如何修改Python中geocoder/geopy的返回语言为英文?
反向地理编码获取英文国家名的解决方案
不管是geopy还是geocoder,它们底层都调用OpenStreetMap的Nominatim服务,而Nominatim本身支持通过language参数指定返回结果的语言,以下是具体实现方法:
1. 使用geopy实现
在reverse方法中直接传入language='en'参数,同时可从返回结果的原始数据中直接提取国家名,无需解析整个地址字符串:
from geopy.geocoders import Nominatim # 建议设置规范的user-agent(如项目名称、邮箱前缀),降低被屏蔽概率 geolocator = Nominatim(user_agent="my-geocoding-project") location = geolocator.reverse("31.107, 103.146", language='en') # 从raw字典中提取国家名 country_name = location.raw.get('address', {}).get('country', '') print(country_name) # 输出:China
2. 使用geocoder实现
通过extra_kwargs参数传递language='en'给底层Nominatim请求,同样从原始数据中提取国家名:
import geocoder g = geocoder.osm([31.107, 103.146], method='reverse', extra_kwargs={'language': 'en'}) # 从raw字典中提取国家名 country_name = g.raw.get('address', {}).get('country', '') print(country_name) # 输出:China
补充说明
language参数接受ISO 639-1标准语言代码(如'en'对应英文、'fr'对应法语)- 规范设置user-agent能有效降低Nominatim服务屏蔽请求的概率,避免使用
http这类模糊名称
内容的提问来源于stack exchange,提问作者elk
相关产品推荐
相关产品推荐

