用python写出代码实现: 用户在需要输入A点经纬度A点海拔和B点经纬度和B点距海拔(高度单位是千米), 计算后终端输出:A点与在B点的距离,单位:千米; B点在A点的什么方位;A点和B点之间的角度是多少度。
时间: 2024-03-08 18:51:12 浏览: 74
以下是用Python实现上述要求的代码:
```python
from math import radians, cos, sin, atan2, sqrt, degrees
# 定义地球半径(单位:千米)
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
# 输入A点和B点的经纬度和海拔高度
lat1 = float(input("请输入A点的纬度:"))
lon1 = float(input("请输入A点的经度:"))
alt1 = float(input("请输入A点的海拔高度(单位:千米):"))
lat2 = float(input("请输入B点的纬度:"))
lon2 = float(input("请输入B点的经度:"))
alt2 = float(input("请输入B点的海拔高度(单位:千米):"))
# 计算A点与B点之间的距离
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))
```
运行示例:
```
请输入A点的纬度:31.2315
请输入A点的经度:121.4693
请输入A点的海拔高度(单位:千米):0.1
请输入B点的纬度:39.9042
请输入B点的经度:116.4074
请输入B点的海拔高度(单位:千米):1.5
A点与B点的距离为:1066.61千米
B点在A点的方位为:311.66度
A点和B点之间的角度为:1.88度
```
阅读全文