如何编写函数计算两城市距离?geopy坐标选取求助
计算两座城市间距离的函数实现
你可以通过以下方式完善函数,利用geopy.distance计算千米级距离:
首先确认数据集的列名——从提供的concap.csv来看,纬度和经度对应的列是Latitude和Longitude。我们可以通过DataFrame的索引直接提取目标城市的坐标,再传入geopy的距离计算方法。
完整代码实现
import pandas as pd from geopy import distance capitals = pd.read_csv('https://raw.githubusercontent.com/j-rossi-nl/teaching-data/main/2022_ITP/concap.csv') capitals.set_index('CapitalName', inplace=True) def cities_distance(city_from: str, city_to: str = 'Amsterdam', cities: pd.DataFrame = capitals)->float: # 获取两座城市的经纬度坐标 try: coord_from = (cities.loc[city_from, 'Latitude'], cities.loc[city_from, 'Longitude']) coord_to = (cities.loc[city_to, 'Latitude'], cities.loc[city_to, 'Longitude']) except KeyError as e: raise ValueError(f"未找到城市: {e.args[0]}") # 计算距离并返回千米数值 return distance.distance(coord_from, coord_to).kilometers
关键步骤说明
- 提取坐标:因为已经将
CapitalName设为DataFrame的索引,所以用cities.loc[城市名, 列名]可以直接获取对应城市的纬度和经度,将它们组成元组(纬度在前,经度在后,符合geopy的参数要求)。 - 计算距离:
distance.distance()接受两个坐标元组,返回一个Distance对象;调用.kilometers属性就能直接得到以千米为单位的距离值。 - 异常处理:添加
try-except捕获KeyError,可以在输入不存在的城市名时给出明确提示,避免程序直接崩溃。
使用示例
# 计算北京到阿姆斯特丹的距离 print(cities_distance("Beijing")) # 计算伦敦到巴黎的距离 print(cities_distance("London", "Paris"))
内容的提问来源于stack exchange,提问作者lorenzo077
相关产品推荐
相关产品推荐

