【问题标题】:how to pass city and country to geocode如何通过城市和国家进行地理编码
【发布时间】:2016-06-15 20:40:10
【问题描述】:

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

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'])

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

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

是否可以同时传递城市和国家来进行地理编码?

【问题讨论】:

    标签: python geopy


    【解决方案1】:

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

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

    “纽约的某个地址”。所以如果你这样提出你的要求:

    d['城市']+" "+d['国家']

    它会更好地匹配示例

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

    【讨论】:

    • 你是对的,它会返回列表。但是列出所有可能的位置。 [位置(温哥华,大温哥华地区,不列颠哥伦比亚省,加拿大,(49.2608944,-123.1139382,0.0)),位置(温哥华,克拉克县,华盛顿,美国,(45.6306954,-122.6744556,0.0)),位置(温哥华,克拉克县,华盛顿,美利坚合众国,(45.6306954,-122.6744556,0.0)),位置(温哥华,圣安东尼奥德尔特昆达马,昆迪纳马卡,哥伦比亚,(4.585473,-74.3518472,0.0)),......这将需要进一步处理。没有其他更简单的方法吗?
    • 在文档中有这个例子:location = geolocator.geocode("175 5th Avenue NYC")。我不知道 geolocator API,但我认为 geolocator.geocode(d['city']+ " " + d['country']) 可以工作(1 个带有城市 + 国家的字符串,而不是 2 个我不能调用的参数在文档中匹配)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-12
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    相关资源
    最近更新 更多