geopy:Python 地理编码,它全包了
geopy:Python 地理编码,它全包了
geopy 在 GitHub 上已经拿到 4,819 Star 了。
这个 Python 库专门处理地理编码:把地址转成经纬度,把经纬度转成地址,算两个地点之间的距离。三行代码就能跑起来。
1、 它解决什么问题
很多应用都离不开地理位置。物流系统要把收货地址转成坐标来规划配送路线,外卖平台要根据坐标查找附近商家,签到功能需要知道某个经纬度对应什么地点。处理这些需求,本质就是在做地理编码和反向地理编码。
每家开发团队都得对接地理编码服务。问题是服务商的 API 各不相同:请求格式不同、参数不同、返回的数据结构也不同。换个服务商,代码几乎要重写。如果项目同时用多个服务商做兜底,维护成本更高。
geopy 把这一层抽象掉了。它封装了多个主流地理编码服务,对外提供统一的接口。目前支持 OpenStreetMap Nominatim、Google Geocoding API V3、Bing Maps、ArcGIS、OpenCage 等。不管底层用的是哪个,在 geopy 里调用方式都相同。换服务商只需要改类名,其余代码不用动。
支持 Python 3.7 到 3.12,PyPy3 也没问题。MIT 协议开源,可以放心集成到项目里。

2、 地址转坐标
把地址翻译成经纬度,核心用法很直接:
>>> from geopy.geocoders import Nominatim
>>> geolocator = Nominatim(user_agent="specify_your_app_name_here")
>>> location = geolocator.geocode("175 5th Avenue NYC")
>>> print((location.latitude, location.longitude))
(40.7410861, -73.9896297241625)
返回的 location 对象包含地址全称、经纬度和服务商原始数据。对于需要批量处理地址的业务场景,比如物流调度、门店地图标注,这个功能可以省掉对接多个平台的时间。
3、 坐标转地址
反过来,给一组坐标返回可读的地址描述:
>>> location = geolocator.reverse("52.509669, 13.376294")
>>> print(location.address)
Potsdamer Platz, Mitte, Berlin, 10117, Deutschland, European Union
设备定位、轨迹回放、打卡签到都走这个流程:设备上报经纬度,系统转换成可读的地址文本展示给用户。geopy 把这一两步的操作封装成了一行调用。
4、 计算距离
geopy 能算两个坐标之间的距离,内置两种算法:
>>> from geopy.distance import geodesic
>>> newport_ri = (41.49008, -71.312796)
>>> cleveland_oh = (41.499498, -81.695391)
>>> print(geodesic(newport_ri, cleveland_oh).miles)
538.390445368
测地线距离基于 WGS-84 椭球模型,精度更高,是默认选项。大圆距离把地球当作正球体计算,速度更快。大部分场景直接用 geodesic 就够了。结果可以指定单位:英里、公里、米都支持。

5、 安装
pip install geopy
依赖只有标准 Python 包,不涉及系统级库,装完就能用。
6、 适合哪些人用
- 需要批量解析地址坐标、做地理数据可视化的开发者
- 搭建地图服务或位置功能的后端工程师
- 做地理数据分析、需要处理经纬度的数据工作者
- 物流、出行、本地生活类业务中涉及地理计算的团队
者
- 搭建地图服务或位置功能的后端工程师
- 做地理数据分析、需要处理经纬度的数据工作者
- 物流、出行、本地生活类业务中涉及地理计算的团队
更多推荐



所有评论(0)