用python写出代码实现: 用户在需要输入A点经纬度A点海拔和B点经纬度和B点距海拔(高度单位是千米), 计算出: 1、A点与在B点的距离,单位:千米; 2、B点在A点的什么方位; 3、A点和B点之间的角度是多少度。
时间: 2024-03-08 12:51:10 浏览: 62
python实现经纬度换算+计算两地距离+地理可视化
5星 · 资源好评率100%
以下是用Python实现上述要求的代码:
```python
from math import radians, cos, sin, atan2, sqrt
# 定义地球半径(单位:千米)
R = 6371
def distance(lat1, lon1, alt1, lat2, lon2, alt2):
"""
计算两点之间的距离
:param lat1: A点纬度
:param lon1: A点经度
:param alt1: A点海拔
:param lat2: B点纬度
:param lon2: B点经度
:param alt2: B点海拔
:return: 两点之间的距离(单位:千米)
"""
# 将经纬度转换为弧度
lat1, lon1, lat2, lon2 = map(radians, [lat1, lon1, lat2, lon2])
# 计算两点之间的距离
dlat = lat2 - lat1
dlon = lon2 - lon1
a = sin(dlat / 2) ** 2 + cos(lat1) * cos(lat2) * sin(dlon / 2) ** 2
c = 2 * atan2(sqrt(a), sqrt(1 - a))
dis = R * c
# 计算海拔高度差
alt_diff = abs(alt2 - alt1)
# 计算两点之间的真实距离
dis = sqrt(dis ** 2 + alt_diff ** 2)
return dis
def bearing(lat1, lon1, lat2, lon2):
"""
计算B点在A点的方位
:param lat1: A点纬度
:param lon1: A点经度
:param lat2: B点纬度
:param lon2: B点经度
:return: B点在A点的方位(单位:度)
"""
# 将经纬度转换为弧度
lat1, lon1, lat2, lon2 = map(radians, [lat1, lon1, lat2, lon2])
dlon = lon2 - lon1
y = sin(dlon) * cos(lat2)
x = cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(dlon)
brng = atan2(y, x)
# 将弧度转换为度数
brng = degrees(brng)
# 将角度转换为0到360度之间的值
brng = (brng + 360) % 360
return brng
def angle(lat1, lon1, alt1, lat2, lon2, alt2):
"""
计算A点和B点之间的角度
:param lat1: A点纬度
:param lon1: A点经度
:param alt1: A点海拔
:param lat2: B点纬度
:param lon2: B点经度
:param alt2: B点海拔
:return: A点和B点之间的角度(单位:度)
"""
# 计算两点之间的距离
dis = distance(lat1, lon1, alt1, lat2, lon2, alt2)
# 计算A点和B点之间的高度差
alt_diff = abs(alt2 - alt1)
# 计算角度
angle = degrees(atan2(alt_diff, dis))
return angle
```
使用示例:
```python
# A点经纬度
lat1 = 31.2315
lon1 = 121.4693
alt1 = 0.1 # 千米
# B点经纬度
lat2 = 39.9042
lon2 = 116.4074
alt2 = 1.5 # 千米
# 计算两点之间的距离
dis = distance(lat1, lon1, alt1, lat2, lon2, alt2)
print("A点与B点的距离为:{:.2f}千米".format(dis))
# 计算B点在A点的方位
brng = bearing(lat1, lon1, lat2, lon2)
print("B点在A点的方位为:{:.2f}度".format(brng))
# 计算A点和B点之间的角度
angle = angle(lat1, lon1, alt1, lat2, lon2, alt2)
print("A点和B点之间的角度为:{:.2f}度".format(angle))
```
阅读全文