geod.inv 是 pyproj 库中 Geod 类的一个核心方法,用于执行 逆地理问题(Inverse Geodetic Problem) 的计算,即根据两个地理坐标点(经纬度)计算它们之间的 前向方位角、后向方位角和测地线距离。以下是其详细解析
1. 函数签名
            
            
              python
              
              
            
          
          from pyproj import Geod
# 创建 Geod 对象(需指定地球椭球模型)
geod = Geod(ellps="WGS84")  # 默认使用 WGS84 椭球体
# 调用方法
forward_azimuth, back_azimuth, distance = geod.inv(lon1, lat1, lon2, lat2)2. 参数说明
| 参数 | 类型 | 说明 | 
|---|---|---|
| lon1 | float | 第一个点的经度(单位:度,范围:-180 到 180 或 0 到 360) | 
| lat1 | float | 第一个点的纬度(单位:度,范围:-90 到 90) | 
| lon2 | float | 第二个点的经度(单位:度,范围:-180 到 180 或 0 到 360) | 
| lat2 | float | 第二个点的纬度(单位:度,范围:-90 到 90) | 
3.返回值
| 返回值 | 类型 | 说明 | 
|---|---|---|
| forward_azimuth | float | 从第一个点到第二个点的前向方位角(单位:度,范围:0° 到 360°) | 
| back_azimuth | float | 从第二个点返回到第一个点的后向方位角(单位:度,范围:0° 到 360° | 
| distance | float | 两点之间的测地线距离(单位:米) | 
4.方位角定义
- 
前向方位角 (forward_azimuth): 从第一个点出发,指向第二个点的方向角度。 - 0° 表示正北方向,90° 为正东,180° 为正南,270° 为正西。
 
- 
后向方位角 (back_azimuth): 从第二个点返回第一个点的方向角度,与前向方位角互补(±180°) 
5.使用示例
计算北京到上海的方位角和距离
            
            
              python
              
              
            
          
          from pyproj import Geod
# 初始化 Geod 对象
geod = Geod(ellps="WGS84")
# 北京天安门的坐标 (lon1, lat1)
beijing = (116.3975, 39.9085)
# 上海东方明珠的坐标 (lon2, lat2)
shanghai = (121.4997, 31.2397)
# 计算逆解
forward_az, back_az, distance = geod.inv(beijing[0], beijing[1], shanghai[0], shanghai[1])
print(f"前向方位角: {forward_az:.2f}°")  # 输出: 约 109.39°
print(f"后向方位角: {back_az:.2f}°")     # 输出: 约 290.62°
print(f"距离: {distance / 1000:.2f} 公里")  # 输出: 约 1076.06 公里6.关键注意事项
- 
椭球模型的选择: 不同椭球模型(如 WGS84、GRS80)会影响计算结果精度。默认使用 WGS84,适用于 GPS 数据。 
- 
输入顺序: 第一个点是起点,第二个点是终点,顺序颠倒会导致方位角反转。 
- 
坐标范围: - 经度(lon)可以是 **-180 到 180** 或 0 到 360,但建议统一范围。
- 纬度(lat)必须是 **-90 到 90**,超出范围会抛出异常。
 
- 
重合点的处理: 如果两点重合,distance 为 0,但方位角可能为 NaN(需代码容错) 
7.总结
- 功能:geod.inv 是地理空间分析的核心工具,用于计算两点间的方位角和测地距离。
- 适用场景:导航系统、路径规划、地理围栏、距离估算等。
- 精度保障:使用合适的椭球模型(如 WGS84)可确保高精度结果