tp5 计算两个经纬度并排序代码
时间: 2024-05-08 15:16:48 浏览: 81
tp5 实现列表数据根据状态排序
以下是 Python 代码,用于计算两个经纬度之间的距离,并根据距离对它们进行排序:
```python
from math import radians, cos, sin, asin, sqrt
# 计算经纬度之间的距离
def distance(lon1, lat1, lon2, lat2):
# 将经纬度转换为弧度
lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
# Haversine 公式计算距离
dlon = lon2 - lon1
dlat = lat2 - lat1
a = sin(dlat / 2)**2 + cos(lat1) * cos(lat2) * sin(dlon / 2)**2
c = 2 * asin(sqrt(a))
r = 6371 # 地球平均半径,单位:公里
return c * r
# 两个经纬度列表
locations = [
{'name': '北京', 'lon': 116.4074, 'lat': 39.9042},
{'name': '上海', 'lon': 121.4737, 'lat': 31.2304},
{'name': '广州', 'lon': 113.2644, 'lat': 23.1291},
{'name': '深圳', 'lon': 114.0579, 'lat': 22.5431},
{'name': '杭州', 'lon': 120.1551, 'lat': 30.2741}
]
# 计算每个位置之间的距离
distances = []
for i in range(len(locations)):
for j in range(i+1, len(locations)):
dist = distance(locations[i]['lon'], locations[i]['lat'], locations[j]['lon'], locations[j]['lat'])
distances.append((locations[i]['name'], locations[j]['name'], dist))
# 对距离进行排序
sorted_distances = sorted(distances, key=lambda x: x[2])
# 输出结果
for d in sorted_distances:
print(d[0], '到', d[1], '的距离为', d[2], '公里')
```
该代码使用 Haversine 公式计算两个经纬度之间的距离,并将它们存储在 distances 列表中。然后,使用 lambda 函数对 distances 列表进行排序,并将结果存储在 sorted_distances 列表中。最后,使用循环输出排序后的距离列表。
阅读全文