我正在做一个Javascript应用程序,它需要以帧为单位在现实世界地图中移动某个元素。
对于每个框架,我在元素的经度和纬度上具有以下位置,例如对于框架0:
-纬度:49.011213
-经度:8.422885
对于框架1:
-纬度:49.01121
-经度:8.422887
帧(帧0)需要为点(0,0),我希望将以下帧也转换为XY坐标。
基本上,我需要一个Javascript脚本来接收框架的纬度和经度,并返回该框架的位置(x,y)(相对于位置为(0,0)的框架0)。
我尝试了以下操作,但不起作用:
function convertSphericalToCartesian(latitude, longitude)
{
// Convert from Degrees to Radians
let latRad = latitude * (Math.PI)/180;
let lonRad = longitude * (Math.PI)/180;
let earthRadius = 6367; // Radius in km
let posX = earthRadius * Math.cos(latRad) * Math.cos(lonRad);
let posY = earthRadius * Math.cos(latRad) * Math.sin(lonRad);
return {x: posX, y: posY};
}
您知道更好的公式吗?非常感谢。
答案 0 :(得分:1)
您所做的任何转换都会引入错误,因为您试图将球体的表面映射到直角坐标。您没有提到您正在使用此信息做什么-提及“框架”使我想到了动画或涉及在地图上移动物体的游戏。如果真是这样,那么您的计算将与您使用的地图紧密相关。
通常,问题是:您的坐标可能相距多远?
对于短距离(长达几英里或几千米),您可能只需将纬度/经度视为x / y坐标即可。例如,您在示例中给出的坐标实际上只有几英尺远-不用担心复杂的计算。同样,如何在给定地图上的这些坐标处绘制东西很大程度上取决于您使用的地图。
对于更大的距离,地球的曲率变得很重要,并且您正在使用的地图投影将在计算这些坐标的方式上产生很大的不同。例如,this question讨论了墨卡托投影的计算。