如上图所示,在已知两点 GPS 坐标的情况下,计算由这两点连成的直线与正北方的夹角。
在https://www.sunearthtools.com/cn/tools/distance.php网页中,提及了在 GPS 坐标系中计算距离和方位角的相关算法。关于方位角计算的描述如下:
要确定从地球上两点之间的起点的方向,请使用以下公式:
- Δφ = ln( tan( latB / 2 + π / 4 ) / tan( latA / 2 + π / 4) )
- Δlon = abs( lonA - lonB )
- θ = atan2( Δlon , Δφ )
Note:
- ln = natural log
- if Δlon > 180° then Δlon = Δlon (mod 180).
- operation a mod n
- function atan2(y, x)
- the angles are in radians
值得注意的是,在该算法中,所有的数值均要用弧度(Radian)表示。
一个 Java 版本的实现可如下:
public double getDirection(double lat1, double lon1, double lat2, double lon2) {
lat1 = Math.toRadians(lat1);
lat2 = Math.toRadians(lat2);
lon1 = Math.toRadians(lon1);
lon2 = Math.toRadians(lon2);
double deltaFI = Math.log(Math.tan(lat2 / 2 + PI / 4) / Math.tan(lat1 / 2 + PI / 4));
double deltaLON = Math.abs(lon1 - lon2) % 180;
double theta = Math.atan2(deltaLON, deltaFI);
return Math.toDegrees(theta);
}
网友评论