2个GPS坐标之间的线路功能

时间:2010-09-30 19:28:50

标签: google-maps map gps

我正在尝试找到一个函数 lng = f(lat),它可以帮助我在2个给定的GPS坐标之间画一条线,(lat1,lng1)(lat2,lng2)

我尝试过传统的笛卡尔公式y = mx + b,其中m =(y2-y1)/(x2-x1),但GPS坐标似乎没那么表现。

什么是可以帮助我实现目标的公式/算法。

PS:我正在使用谷歌地图API,但如果可能的话,让我们保持这种实现不可知。

更新:我的实现是错误的,似乎算法实际上正如一些答案所述。我的坏:(

schema

4 个答案:

答案 0 :(得分:2)

您想要做的事情应该实际工作。但请记住,如果北在顶部,水平(x)轴是LONGITUDE,垂直(y)轴是LATITUDE(我想你可能会对此感到困惑)。

如果将线参数化为lat = func(long),那么当经度变化而经度变化时,垂直线(即那些正好向南的线)会遇到麻烦。

因此我宁愿使用另一种参数化:

long(alpha) = long_1 + alpha * (long_2 - long_1)

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

并将alpha从0更改为1.

这与great circle(球体上的最短路径)并不完全一致,但是你所看到的区域越小,差异就越小(正如其他人在这里指出的那样)。

答案 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 :(得分:0)

对于短距离,地球曲率没有显着差异,使用常规二维几何图形绘制线条可以正常工作。

对于较长距离,两条线之间的最短路径不会在地图上以直线投影,而是以曲线形式投影。 (例如,从瑞典到阿拉斯加的最短路径将直接通过极点,而不是经过加拿大和冰岛。)您必须使用三维几何在球体表面上绘制一条线,然后将其投影到地图与地图投影在地图上的方式相同。

答案 3 :(得分:0)

您的目标是找到这个等式还是实际画一条线

如果是后者,由于您使用的是Maps API,请指定geodesic: true并使用Polyline绘制:

http://code.google.com/apis/maps/documentation/javascript/reference.html#Polyline