用于计算2个坐标的现有函数 . 例如,它可以计算这2个城市(52.22,21.01)和(52.40,16.92)之间的距离 .
from math import sin, cos, sqrt, atan2, radians
def cor_dist_calculator(lat1, lat2, lon1, lon2):
R = 6373.0
dlon = lon2 - lon1
dlat = lat2 - lat1
a = sin(dlat / 2)**2 + cos(lat1) * cos(lat2) * sin(dlon / 2)**2
c = 2 * atan2(sqrt(a), sqrt(1 - a))
distance = R * c
print "Distance is: " + str(distance) + " km."
return
# to calcualte distance between (52.22, 21.01) and (52.40, 16.92)
cor_dist_calculator(radians(52.22), radians(52.40), radians(21.01), radians(16.92))
输出是:
Distance is: 278.82127298 km.
现在,对于城市列表,我想计算其中任何两个城市之间的距离 . 数据以字典形式出现,我可以访问坐标:
cities = {
"Ahmedabad":"23.02579,72.58727",
"Bengaluru":"12.97194,77.59369",
"Chennai":"13.08784,80.27847",
"Delhi":"28.65195,77.23149",
"Hyderabad":"17.38405,78.45636",
"Kanpur":"26.46523,80.34975",
"Kolkata":"22.56263,88.36304",
"Mumbai":"19.07283,72.88261",
"Pune":"18.51957,73.85535",
"Surat":"21.19594,72.83023"}
for c, o in cities.items():
lat = o.split(",")[0]
lon = o.split(",")[1]
如何计算字典中任意两个城市之间的所有距离?
谢谢 .
4 回答
Code
Output
我建议将这一行添加到def下方的计算器中:
因此,您可以轻松输入度数的坐标 .
然后,使用两个城市的组合构建一个列表(以避免计算从城市到自身或city1-city2和city2-city1的距离):
现在res包含:
如果你想要两个方向的距离(相同:))将
itertools.combinations
改为itertools.permutations
.使用
permutations
,您可以像这样获取信息:如果用户提供两个城市名称作为输入,您可以简单地执行:
而且,如果你想随机计算所有 - 你可以循环 .
你已经完成了大部分工作 . 只需从用户那里获取输入并根据您的需要对其进行格式化即可 .