【问题标题】:Converting Latitude and Longitude to XY Coordinates将纬度和经度转换为 XY 坐标
【发布时间】:2020-03-12 04:42:07
【问题描述】:

我正在做一个 Javascript 应用程序,它需要在现实世界地图中以帧为单位移动某个元素。

对于每一帧,我在元素的纬度和经度上都有以下位置,例如帧 0:
- 纬度:49.011213
- 经度:8.422885

对于第 1 帧:
- 纬度:49.01121
- 经度:8.422887

Frame (Frame 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};
}

你知道一个更好的公式吗?非常感谢。

【问题讨论】:

    标签: javascript math geometry mapping coordinates


    【解决方案1】:

    您所做的任何转换都会引入错误,因为您正在尝试将球体的表面映射到直角坐标。你没有提到你在用这些信息做什么——提到“帧”让我想到了动画或涉及在地图上移动物体的游戏。如果是这种情况,那么您的计算将与您使用的地图密切相关。

    一般来说,问题是:您的坐标可能相距多远?

    对于小距离(最多几英里或几公里),您可能只需将纬度/经度视为 x/y 坐标即可。例如,您在示例中给出的坐标实际上仅相距英尺 - 不要为复杂的计算而烦恼。同样,您如何在给定地图上的这些坐标处绘制某些东西在很大程度上取决于您使用的地图。

    对于更远的距离,地球的曲率变得很重要,您使用的地图投影将对这些坐标的计算方式产生很大影响。例如,this question 讨论了墨卡托投影的计算。

    【讨论】:

    • 我使用的是小距离,但它可以在全球任何地方。但是,地图的面积约为 25 平方米或更小。我想要一个公式,因为我在网上寻找的那些对我不起作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 2010-10-11
    相关资源
    最近更新 更多