1

我正在尝试计算此链接中给出的两个纬度/经度点之间的方位角。我看到我们最初使用以下等式得到的方位是初始方位。

    public static double GetBearing(double latitude1, double longitude1, double latitude2, double longitude2)
        {
            var lat1 = ToRadians(latitude1);
            var lat2 = ToRadians(latitude2);
            var longdiff = ToRadians(longitude1 - longitude2);
            var X = Math.Cos(lat2) * Math.Sin(longdiff);
            var Y = Math.Cos(lat1) * Math.Sin(lat2) - Math.Sin(lat1) * Math.Cos(lat2) * Math.Cos(longdiff);
            var bearing =ToDegrees(Math.Atan2(X, Y));
            return (bearing+360)%360;
        }

鉴于

对于最终方位角,只需将初始方位角从终点带到起点并将其反转(使用 θ = (θ+180) % 360)。

我对初始轴承和最终轴承之间的区别感到困惑。这个初始方位和最终方位是什么,我们应该将哪个方位作为两点之间方位的最终答案。

4

2 回答 2

4

方位角是沿最短路径到目的地的方向和向北的方向之间的角度。我们有初始和最终的原因是我们生活在球体上,所以最短的路径是测地线。它是地球上的一条直线,如果你在平面地图上绘制它,它会是一条曲线。

有两种思考方式。在平面地图上思考:当你从 A 到 B 时,这条曲线会稍微改变方向,所以这条线与北的夹角会发生变化,即方位发生变化。

或者你可以考虑球体,然后考虑三角形 A - B - 北极。方位角是 AB 与适当子午线之间的夹角。初始方位是 AB 和子午线 A 之间的角度。最后一个是 AB 和子午线 B 之间的角度。它们是不同的。

只有当 A 和 B 之间的距离很短时,单个“最终答案”方位才有意义。那么地球的曲率就没有多大关系了,初始方位和最终方位非常接近,所以根据需要的精度可以说是单方位。

于 2019-05-15T14:35:51.217 回答
1

仅供参考:方位角和许多相关计算在 R 包中实现geospherebearing函数返回初始方位角,但您可以反转坐标以获得最终方位角。

library(geosphere)
bearing(cbind(0,0),cbind(20,20))
#[1] 43.4035
finalb <- bearing(cbind(20,20),cbind(0,0)) 
(finalb + 180) %% 360
#[1] 46.9656

(这些结果应该比你用你参考的算法得到的更精确)

于 2019-05-18T00:12:05.167 回答