我有一个位置数据框,我想获取其坐标。为此,我使用 geopy 包和 Nominatim API。尽管我已指定 featuretype 参数仅返回城市、定居点和村庄,但它仍然为我提供了高速公路、建筑物和其他不相关内容的坐标。代码的其余部分工作正常,但我需要准确的坐标,因为它是整个国家的位置列表。以下是我正在使用的地理定位器的片段。
geolocator = Nominatim(user_agent="my_geocoder", timeout=None)
location = geolocator.geocode(place_name, extratags=True,
featuretype=['state', 'city', 'settlement', 'village'])
感谢您的帮助!
featuretype
参数不是
geopy
库中的有效参数,这就是它不起作用的原因。
geopy
库是一个地理编码和反向地理编码的 Python 客户端,它本身并不定义地理编码服务的功能。它充当不同地理编码服务的包装器,例如 Nominatim、Google Maps 和 Bing。
Nominatim 的限制
正在使用
Nominatim
地理编码器,它不完全支持
featuretype
作为查询参数。虽然 Nominatim 的搜索确实允许使用更具体的特征类型(可以在此处查看文档:https://nominatim.org/release-docs/develop/api/Search/),但无法保证结果中仅包含这些类型。
可能的解决方案
-
结果过滤:
可以通过检查返回的地址组件来过滤地理编码结果。
geopy
的location.raw['address']
为提供了一个字典,其中包含有关该位置的信息。可以检查此字典以查找诸如city
、village
或state
等键,并根据的标准过滤结果。
python
location = geolocator.geocode(place_name, extratags=True)
if location:
address = location.raw.get('address', {})
if address.get('city') or address.get('village') or address.get('state'):
# 处理位置
else:
# 跳过该位置,因为它不符合的标准
-
使用其他地理编码服务: 某些地理编码服务可能提供更精细的过滤器,以获取所需类型的特征。可能需要探索其他地理编码提供商(例如 Google Maps 地理编码 API),这些提供商可能提供对
featuretype
或类似参数的更直接支持。请注意,这些服务通常会有使用限制和定价。 -
查询增强: 通过在查询中包含诸如“城市”、“州”或“村庄”之类的附加信息,可以提高获得所需结果的可能性。例如,可以改为搜索“[地点名称] 城市”或“[地点名称] 州”。
请记住,即使使用这些方法,Nominatim 还是可能会返回并非专门要求的特征类型。地理编码的准确性和相关性取决于地理编码服务提供的数据质量及其搜索算法。
标签:python,geocoding,geopy From: 78807238