You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pyproj与Haversine计算的航向为何与Google Earth结果不符?

两点间航向计算结果差异原因分析

可能的原因

1. Haversine函数存在笔误

你提供的Haversine函数代码有明显输入错误:

# 错误行:变量名与输入列表不匹配,且最后一个参数误用lon1替代lon2
lat, lon1, lat2, lon2 = map(radians, [lat1, lon1, lat2, lon1])

正确写法应为:

lat1, lon1, lat2, lon2 = map(radians, [lat1, lon1, lat2, lon2])

这个笔误会导致lon2被错误赋值为lon1的弧度值,使dLon=0,理论上计算结果应为0度(正北)。你说结果与pyproj一致,说明实际运行的是修正后的代码。

2. 起点/终点或经纬度顺序混淆

你的Python代码计算的是从点1(42.73864N, 111.8052E)到点2(43.24844N, 110.6083E)的航向,点2实际位于点1的西北方向,正确的真北初始航向应接近300度(而非60.3度)。这种矛盾说明:

  • 可能在pyproj中颠倒了经纬度输入顺序(pyproj要求inv(lon1, lat1, lon2, lat2),若误写为inv(lat1, lon1, lat2, lon2)会导致结果偏差);
  • 或在Google Earth中颠倒了起点和终点,计算的是从点2到点1的航向;
  • 或在某工具中输入坐标时搞反了纬度和经度。

3. Google Earth的方位角定义差异

Google Earth标尺工具默认显示的是大地线的平均方位角,而Python的Geod.inv和Haversine公式计算的是初始方位角(从起点出发的瞬间航向)。但两点距离较近时,该差异通常很小,不足以解释45度的差距,因此可能性较低。

4. 磁北与真北的混淆

若Google Earth设置为显示磁北方位角,而Python计算的是真北方位角,会存在差异,但该区域磁偏角仅为几度,无法解释如此大的差距。

验证建议

  1. 重新确认所有工具中的起点、终点坐标及经纬度顺序;
  2. 使用修正后的Haversine函数重新计算,对比pyproj结果;
  3. 在Google Earth中开启“显示真北”选项,重新测量航向。

内容的提问来源于stack exchange,提问作者Jon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 22:45:40