javascript纬度经度xyz在地球上的位置(threejs) [英] javascript Latitude Longitude to xyz position on earth (threejs)
问题描述
我在jsfiddle上设置了一个测试用例,有两个坐标
latlons = [[40.7142700,-74.0059700],[52.5243700,13.4105300]];
纽约和柏林
和这是我的函数来从经纬度和半径计算xyz
函数calcPosFromLatLonRad(lat,lon,radius){
// Attempt1
var cosLat = Math.cos(lat * Math.PI / 180.0);
var sinLat = Math.sin(lat * Math.PI / 180.0);
var cosLon = Math.cos(lon * Math.PI / 180.0);
var sinLon = Math.sin(lon * Math.PI / 180.0);
var rad = radius;
y = rad * cosLat * sinLon;
x = rad * cosLat * cosLon;
z = rad * sinLat;
// Attempt2
// x =半径* Math.sin(lat)* Math.cos(lon)
// y =半径* Math.sin(lat) * Math.sin(lon)
// z =半径* Math.cos(lat)
//尝试3
//纬度= lat *数学。 PI / 180
// longitude = lon * Math.PI / 180
// x = -radius * Math.cos(纬度)* Math.cos(经度)
// y =半径* Math.sin(纬度)
// z =半径* Math.cos(纬度)* Math.sin(经度)
//尝试4
// var phi =(90-lat)*(Math.PI / 180);
// var theta =(lng + 180)*(Math.PI / 180);
// x =((rad)* Math.sin(phi)* Math.cos(theta));
// z =((rad)* Math.sin(phi)* Math.sin(theta));
// y =((rad)* Math.cos(phi));
console.log([x,y,z]);
return [x,y,z];
}
但所有尝试返回不同的xy,并且它们都不正确(z是总是正确的)。
有人请求指导我以正确的方式吗?
i不知道什么可能是错的
继承人的小提琴
函数calcPosFromLatLonRad(lat,lon,radius){
var phi =(90-lat)*(Math.PI / 180)
var theta =(lon + 180)*(Math.PI / 180)
x = - ((radius)* Math.sin(phi)* Math.cos(theta))
z =((radius)* Math.sin(phi)* Math .sin(theta))
y =((radius)* Math.cos(phi))
return [x,y,z]
}
是的,这很酷吗?
我仍然对一些简短的等式感兴趣
i´m playing arround with three.js
i want to render objects on specific geocoordinates on a bigger sphere, i´m pretty near to the solution, but i dont get the correct xyz position from lat lon
i have set up a test case on jsfiddle, there are two coordinates
latlons = [[40.7142700,-74.0059700], [52.5243700,13.4105300]];
its New York and Berlin
and this is my function to calc xyz from lat lon and radius
function calcPosFromLatLonRad(lat,lon,radius){
// Attempt1
var cosLat = Math.cos(lat * Math.PI / 180.0);
var sinLat = Math.sin(lat * Math.PI / 180.0);
var cosLon = Math.cos(lon * Math.PI / 180.0);
var sinLon = Math.sin(lon * Math.PI / 180.0);
var rad = radius;
y = rad * cosLat * sinLon;
x = rad * cosLat * cosLon;
z = rad * sinLat;
// Attempt2
// x = radius * Math.sin(lat) * Math.cos(lon)
// y = radius * Math.sin(lat) * Math.sin(lon)
// z = radius * Math.cos(lat)
// Attempt3
// latitude = lat * Math.PI/180
// longitude = lon * Math.PI/180
// x = -radius * Math.cos(latitude) * Math.cos(longitude)
// y = radius * Math.sin(latitude)
// z = radius * Math.cos(latitude) * Math.sin(longitude)
// Attempt4
// var phi = (90-lat)*(Math.PI/180);
// var theta = (lng+180)*(Math.PI/180);
// x = ((rad) * Math.sin(phi)*Math.cos(theta));
// z = ((rad) * Math.sin(phi)*Math.sin(theta));
// y = ((rad) * Math.cos(phi));
console.log([x,y,z]);
return [x,y,z];
}
but all attempts return different xy, and they are all not correct ( z is always correct).
could someone pleas guide me to the right way ? i have no idea what could be wrong
heres the fiddle to play with
unfortunatly i can´t further explain, but after playing around this one works like a charme :)
function calcPosFromLatLonRad(lat,lon,radius){
var phi = (90-lat)*(Math.PI/180)
var theta = (lon+180)*(Math.PI/180)
x = -((radius) * Math.sin(phi)*Math.cos(theta))
z = ((radius) * Math.sin(phi)*Math.sin(theta))
y = ((radius) * Math.cos(phi))
return [x,y,z]
}
yeah thats pretty cool isnt it ? And i´m still interested into some shorter equation
这篇关于javascript纬度经度xyz在地球上的位置(threejs)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!