如何通过城市和国家进行地理编码

how to pass city and country to geocode

我想确保获得正确城市的纬度和经度。例如,澳大利亚有悉尼,加拿大有悉尼。这工作正常

for d in listofobjs:
    location = geolocator.geocode(d['city'])
    d2 = {
        'username': d['username'],
        'latitude': location.latitude,
        'longitude': location.longitude
    }
    listofobjs2.append(d2)

但是如果我尝试这样定位,我会收到错误消息

location = geolocator.geocode(d['city'],d['country'])

当我尝试从 locatoion 读取纬度时出现错误

AttributeError: 'list' object has no attribute 'latitude'

是否可以将城市和国家都传递给地理编码?

在文档中指出 geolocator.geocode 可以 return 0,1 或更多值。 该方法可以 return 一个列表,因此当您尝试将其作为单个结构元素访问时会出现错误消息。 或者遍历列表并根据需要追加到 listofobjs2。

您不能确定准确匹配 1 个位置。但是为什么要传递 2 个参数呢?我会将它们组合成一个字符串,就像文档示例中的那样:

"some address NYC"。因此,如果您这样提出请求:

d['city']+" "+d['country']

它会更好地匹配示例

https://geopy.readthedocs.io/en/1.10.0/