如何在geocode python中严格按城市州进行搜索



我正在使用geopy nomatim来获取给定城邦的经纬度,但问题是,它搜索地址中的所有内容,而不仅仅是城邦。

我的实现是这样的:

geolocator = Nominatim(user_agent='clear-sky-finder')
location = geolocator.geocode(f"{city}, {state}")
if not location: 
raise APIException("City not found", 404)
lat = location.latitude
long = location.longitude

如果我输入像Chandler, Arizona这样的名字,它可以工作,但是如果我输入像Chan, Arizona这样的名字,我希望它失败。但它仍然会显示结果,因为在亚利桑那州梅萨的某个地方有一家餐馆的名字里有"Chan"这个词。

我试过这样做:

location = geolocator.reverse(f"{lat},{long}")
location_city = location.raw['address']['city']

if location_city != city: 
raise APIException("City not found", 404)

但这样一来,它就错过了一些城市,比如"沃德尔";因为它把它算作另一个城市的一部分。

有什么方法可以让它是特定的城市吗?

有一个对我有效的解决方案。您需要设置&;addressdetails= true &;项目点。然后你可以得到更多关于地址的细节。这是我为"巴黎"买的

地址{"郊区":"巴黎","city_district":"巴黎",">城市":"巴黎"、"ISO3166-2-lvl6":"fr - 75","状态":"巴黎"、"ISO3166-2-lvl4‘:’FR-IDF"、"地区":"法国metropolitaine"、"国家":"法国"、"country_code":"fr"}

如果location1.raw["address"]["city"]中的城市名称与您的输入匹配,则它是一个城市的名称。

注意:我还建议检查"town"解决你的问题。对于不同的输入,地址结构是不同的。有时"geopy"提供一个"城镇";或";municipality"键,而不是输入数据的城市。检查location1.raw["address"]的输出,查看几个输入数据。


import geopy
from geopy.geocoders import Nominatim

geolocator = Nominatim(user_agent="MyApp")
location1=geolocator.geocode('Paris',addressdetails=True)

for key in location1.raw.keys():
print(key)
print(location1.raw[key])
print("++++++++++++++++++++++++++++++++++++++++++")

输入图片描述

最新更新