javascript纬度经度xyz在地球上的位置(threejs) [英] javascript Latitude Longitude to xyz position on earth (threejs)

查看:1759
本文介绍了javascript纬度经度xyz在地球上的位置(threejs)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在一个更大的球体上渲染特定地理坐标上的对象,我很接近解决方案,但我没有得到正确的xyz位置来自lat lon



我在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不知道什么可能是错的



继承人的小提琴

UPDATE:working jsfiddle

解决方案

不幸的是,我不能进一步解释,但在玩这个之后像一个魅力:)

 函数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

UPDATE: working jsfiddle

解决方案

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

working fiddle

这篇关于javascript纬度经度xyz在地球上的位置(threejs)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆