【问题标题】:Function for line between 2 GPS coordinates2个GPS坐标之间的直线功能
【发布时间】:2010-09-30 19:28:49
【问题描述】:

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

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

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

PS:我正在使用 Google Maps API,但如果可能,让我们保持这个实现不可知。

更新:我的实现是错误的,看起来算法实际上是按照一些答案所述的那样工作。我的坏:(

【问题讨论】:

  • 答案取决于您的要求,如果您告诉我们您当前的尝试以何种方式未能达到您的期望,就会显示出来。你说的“看起来不像那样”是什么意思?

标签: google-maps map gps


【解决方案1】:

您想要做的应该确实有效。但是请记住,如果北在顶部,则水平 (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(球体上的最短路径)并不完全一致,但您查看的区域越小,差异就越不明显(正如其他海报指出的那样)。

【讨论】:

    【解决方案2】:

    这是我使用的距离公式,可能会有所帮助。这是使用 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;
        }
    

    【讨论】:

    • 这是两点之间地球曲率距离的“正弦公式”。这怎么能帮助他划清界限?
    【解决方案3】:

    对于短距离,在地球曲率没有显着差异的情况下,使用常规二维几何绘制一条线效果很好。

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-26
        • 1970-01-01
        • 1970-01-01
        • 2017-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多