给定起点和终点坐标,输出最邻方位角,方位角仅为东西南北四个方向和东北东南西北西南四个方向。用python实现
时间: 2024-10-13 09:10:20 浏览: 26
利用C#编写一个坐标方位角计算程序
5星 · 资源好评率100%
在Python中,你可以通过计算两个经纬度之间的角度差来确定从起点到终点的最邻方位角。首先,你需要导入必要的库,如`math`模块来进行弧度转换。以下是一个简单的函数示例:
```python
import math
def get_direction(start_lat, start_lng, end_lat, end_lng):
# 将度数转换为弧度
start_rad = math.radians((start_lat, start_lng))
end_rad = math.radians((end_lat, end_lng))
# 地球半径(平均值,单位:公里)
earth_radius = 6371
# 向量差
dlat = end_rad[0] - start_rad[0]
dlng = end_rad[1] - start_rad[1]
# 利用Haversine公式计算距离
a = math.sin(dlat / 2) ** 2 + math.cos(start_rad[0]) * math.cos(end_rad[0]) * math.sin(dlng / 2) ** 2
c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a))
# 距离(公里)
distance = earth_radius * c
# 计算方位角
bearing = math.degrees(math.atan2(dlng, dlat))
# 根据角度调整方向至最邻近的东、西、南、北、东北、东南、西北、西南八个方向之一
if bearing > 90 and bearing <= 180:
return "南"
elif bearing > 180 and bearing <= 270:
return "西"
elif bearing > 270 and bearing <= 360:
return "北"
elif bearing >= 45 and bearing < 135:
return "东北" if bearing < 135 else "东南"
elif bearing >= 135 and bearing < 225:
return "东南"
elif bearing >= 225 and bearing < 315:
return "西北"
elif bearing >= 315 and bearing < 45:
return "西南"
# 示例使用
direction = get_direction(39.9042, 116.4074, 39.9152, 116.4189)
print(direction)
```
这个函数会返回一个字符串,表示从起点到终点的方向。请注意,这个函数假设输入的是地理坐标,并简化了处理,对于更精确的角度计算,可能需要引入额外的误差检查和处理。
阅读全文