两个GPS坐标之间的连线函数

3
我正在尝试找到一个函数lng = f(lat),它可以帮助我在两个给定的GPS坐标(lat1,lng1)(lat2,lng2)之间画一条线。
我已经尝试了传统的笛卡尔公式y = mx + b,其中m =(y2-y1)/(x2-x1),但GPS坐标似乎不是这样工作的。
有哪些公式/算法可以帮助我实现我的目标?
附注:我正在使用Google Maps API,但如果可能的话,请保持实现不可知。
更新:我的实现方式是错误的,一些答案中所述的算法实际上是有效的。

答案取决于您的要求,如果您告诉我们当前尝试未能达到您的期望,则可以揭示这些要求。什么是“似乎不是那样行为”的意思? - LarsH
4个回答

2
你想做的事情实际上应该是可行的。但请记住,如果北方在顶部,则水平(x)轴为经度,垂直(y)轴为纬度(我认为你可能会混淆这一点)。
如果您将该线路参数化为lat = func(long),则在遇到垂直线(即正好朝北或朝南的线)时会遇到问题,因为纬度会变化,而经度保持不变。
因此,我更愿意使用另一种参数化方法:
long(alpha) = long_1 + alpha * (long_2 - long_1)

lat(alpha)  = lat_1  + alpha * (lat_2  - lat_1)

alpha从0变化到1。

这不会完全与大圆(球体上的最短路径)重合,但你所观察的区域越小,差异就越不明显(正如其他帖子中的人指出的那样)。


0

这是我使用的一个距离公式,可能会有所帮助。这是使用JavaScript编写的。

function Distance(lat1, lat2, lon1, lon2) {
        var R = 6371; // km
        var dLat = toRad(lat2 - lat1);
        var dLon = toRad(lon2 - lon1);
        var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(toRad(lat1)) * Math.cos(toRad(lat2)) * Math.sin(dLon / 2) * Math.sin(dLon / 2);

        var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));

        var d = R * c * 0.621371;

        var r = Math.round(d * 100) / 100;
        return r;
    }

2
这是计算两点间地球曲率距离的“哈弗赛恩公式”。那么它如何帮助他画一条线呢? - LarsH

0

对于短距离,地球曲率的影响不大,使用常规二维几何图形绘制线条效果良好。

但是对于较长距离,两点之间的最短路径在地图上并非直线,而是一条曲线。(例如,从瑞典到阿拉斯加的最短路径是直接穿过北极,而不是经过加拿大和冰岛。)您需要使用三维几何图形在球面上绘制线条,然后将其投射到地图上,就像地球表面被投射到地图上一样。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接