Python输入城市名,自动测算两地地表直线距离|地理计算小案例
实用GIS小脚本|geopy地理库入门教程
一、前言
想快速知道两座城市之间的地表球面距离?不用手动查经纬度、不用复杂球面计算公式,借助Python第三方库geopy,依靠OpenStreetMap公开地理接口,输入城市名称就能自动解析经纬度并计算公里距离,日常查城际直线距离超方便。
beEnter first city: 北京
Enter second city: 西安
Distance between cities: 916.2384650948642 km
二、环境依赖安装
运行代码前,终端执行pip安装依赖:
pip install geopy
geopy 内置 Nominatim 地名解析、多种距离计算公式,是 Python 地理计算常用开源库。from geopy.geocoders import Nominatimfrom geopy.distance import geodesic# 初始化地理查询对象,user_agent为自定义程序标识geo = Nominatim(user_agent="distance_program")# 控制台手动输入两个城市名称city1 = input("Enter first city: ")city2 = input("Enter second city: ")# 调用OSM接口,解析城市对应的地理位置信息loc1 = geo.geocode(city1)loc2 = geo.geocode(city2)# 提取坐标:(纬度, 经度)coord1 = (loc1.latitude, loc1.longitude)coord2 = (loc2.latitude, loc2.longitude)# 计算地表大圆距离,单位:kmdistance = geodesic(coord1, coord2).km# 输出最终距离结果print("Distance between cities:", distance, "km")
四、代码逐行拆解
from geopy.geocoders import Nominatim:导入地名解析工具,依托 OpenStreetMap 开源地图数据库;
from geopy.distance import geodesic:导入大地线距离算法,计算地球球面真实地表距离;
Nominatim(user_agent="distance_program"):初始化查询客户端,user_agent 是接口必填参数,自定义项目名即可;
input():接收用户手动输入的两座城市名称,支持中英文城市名;
geocode(城市名):向 OSM 接口发起请求,自动匹配地址,返回包含经纬度、行政区的地理对象;
loc.latitude / loc.longitude:分别提取解析结果的纬度、经度,组成坐标元组;
geodesic(coord1, coord2).km:基于地球真实椭球体模型,计算两点地表直线距离,返回千米数值;
五、使用方法
粘贴代码至.py文件,运行脚本;
按提示依次输入两座城市,示例:Beijing、Shanghai;
程序自动输出两座城市地表直线距离(单位 km)。
六、拓展优化 & 小贴士
✅ 1. 异常容错优化:小众乡镇、生僻地名可能解析失败(返回 None),可添加 if 判断规避报错;
✅ 2. 单位切换:把.km改成.miles即可换算英里距离;
✅ 3. 中文适配:直接输入中文地名「北京」「广州」同样可以正常识别;
✅ 4. 批量计算:搭配列表循环,可批量计算多城市两两间距。
运行环境说明
全平台兼容:Windows / MacOS / Linux,Python3.6 及以上版本均可直接运行。