我正在尝试计算this link中给出的两个纬度/经度点之间的方位。我看到我们最初使用以下方程式获得的方位角是初始方位角。
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)。
我对初始轴承和最终轴承之间的差异感到困惑。 什么是初始轴承和最终轴承?对于两点之间的轴承,我们应该采用哪种轴承作为最终答案。
答案 0 :(得分:1)
沿最短路径到达目的地的方向与向北的方向之间存在夹角。我们拥有最初和最后一个的原因是我们生活在球体上,因此最短路径是测地线。它是地球上的一条直线,如果在平面地图上绘制它会有点-它将是一条曲线。
有两种方法可以考虑它。在平面地图上思考:当您从A到B行驶时,这条曲线的方向会稍有变化,因此,这条线与North之间的角度会发生变化,即方位也会发生变化。
或者您可以考虑球体,然后考虑三角形A-B-北极。方位角是AB与适当子午线之间的角度。初始方位是AB与子午线A之间的夹角。最后一个方位是AB与子午线B之间的夹角。
仅当A和B之间的距离较短时,才有意义。那么地球的曲率并不重要,初始轴承和最终轴承彼此非常接近,因此可以根据所需的精度来谈论单个轴承。
答案 1 :(得分:0)
仅供参考:R包geosphere
中实现了方位和许多相关计算
bearing
函数返回初始方位,但是您可以反转坐标以获得最终方位。
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
(这些结果应该比通过引用的算法获得的结果更精确)