使用pyproj计算点位相对正北方向方位角的异常问题
问题核心原因
你对正北参考点的认知存在错误:北纬90°是地球北极点,所有经度对应的(任意经度, 90°N)坐标都指向同一个北极点。不管你修改第二个点的经度为多少,本质都是计算当前点到北极点的方位角,而指向北极点的方向就是正北,自然返回的正向方位角永远为0。
正确计算逻辑
pyproj的Geod.inv()方法返回的fwd_azimuth本身就是「两点连线相对于起点正北方向的角度」,默认规则如下:
- 取值范围为-180° ~ 180°
- 正北为0°,正东为90°,正西为-90°,正南为±180°
不需要额外以北极点为终点计算,直接传入你需要统计的起点、终点经纬度即可,注意inv()方法的参数顺序为**(起点经度, 起点纬度, 终点经度, 终点纬度)**,不要搞反经纬度顺序。
示例代码
import pyproj from pyproj import CRS # 起点WGS84坐标:纬度10.0808°N,经度48.0409°E start_lat, start_lon = (10.08079707822896, 48.04090098449795) # 示例终点:起点正东方1经度的位置,纬度保持不变 end_lat, end_lon = (10.08079707822896, 49.04090098449795) geod = CRS.from_epsg(4326).get_geod() fwd_azimuth, back_azimuth, distance = geod.inv(start_lon, start_lat, end_lon, end_lat) # 可选:转换为国内常用的0~360°方位角格式 azimuth_360 = fwd_azimuth if fwd_azimuth >= 0 else fwd_azimuth + 360 print(f"相对于正北的方位角:{round(azimuth_360, 2)}°")
如果需要验证正北方向,可将终点设置为与起点同经度、纬度更大的点,计算得到的方位角会返回0,符合预期。
内容的提问来源于stack exchange,提问作者windcheater
相关产品推荐
相关产品推荐

