geopy用于地理编码和逆地理编码,支持多种服务如Nominatim;需设置user_agent,遵守请求限制,建议生产环境使用付费API。

geopy 是一个 Python 第三方库,用于地理编码(将地址转为经纬度)和逆地理编码(将经纬度转为地址)。它支持多种服务,比如 Google Maps、OpenStreetMap (Nominatim)、Bing 等。下面介绍常见用法。
安装 geopy
在命令行运行:
pip install geopy使用 Nominatim 进行地理编码(地址转经纬度)
Nominatim 是 OpenStreetMap 提供的免费服务,适合非商业用途。使用前需设置一个合法的 user agent。
示例代码:
立即学习“Python免费学习笔记(深入)”;
在整本书中我们所涉及许多的Flex框架源码,但为了简洁,我们不总是显示所指的代码。当你阅读这本书时,要求你打开Flex Builder,或能够访问Flex3框架的源码,跟随着我们所讨论源码是怎么工作及为什么这样做。 如果你跟着阅读源码,请注意,我们经常跳过功能或者具体的代码,以便我们可以对应当前的主题。这样能防止我们远离当前的主题,主要是讲解代码的微妙之处。这并不是说那些代码的作用不重要,而是那些代码处理特别的案例,防止潜在的错误或在生命周期的后面来处理,只是我们当前没有讨论它。有需要的朋友可以下载看看
# 创建地理编码器对象
geolocator = Nominatim(user_agent="my_app")
# 输入地址
location = geolocator.geocode("北京市天安门")
if location:
print((location.latitude, location.longitude))
print(location.address)
输出类似:
(39.9037442, 116.3972847)Tian'anmen, Dongcheng District, Beijing, 100006, China
逆地理编码(经纬度转地址)
把坐标转换成可读地址:
from geopy.geocoders import Nominatimgeolocator = Nominatim(user_agent="my_app")
# 输入经纬度
location = geolocator.reverse("39.9037442, 116.3972847")
if location:
print(location.address)
print(location.raw) # 原始数据字典
注意事项和建议
使用 geopy 时注意以下几点:
- Nominatim 有使用限制,每秒只能请求一次,频繁请求可能被封 IP
- 必须设置 user_agent,否则请求会被拒绝
- 生产环境或高频率需求建议使用付费服务如 Google Geocoding API
- 处理网络异常时加上 try-except 更稳妥
基本上就这些。geopy 接口简单,重点是选对服务提供商并遵守其使用规则。










