【问题标题】:Street city reverse geocoding using google python使用谷歌python的街道城市反向地理编码
【发布时间】:2016-04-21 15:17:21
【问题描述】:

我正在使用 google maps api 来反转地图上的地理编码纬度和经度。我想以以下格式返回地址:[街道编号] [路线]、[城镇]、[州],去掉括号。

我不确定如何将地址组件链接到类型。现在这是我的解决方案,但它并不总是返回格式正确的地址。如何按类型搜索?其他解决方案使用了循环,但我不确定 if 语句会是什么样子?

address = '{} {}, {}, {}'.format(json['results'][0]['address_components'][0]['long_name'] , json['results'][0]['address_components'][1]['long_name'] , json['results'][0]['address_components'][3]['long_name'] , json['results'][0]['address_components'][5]['short_name'])

【问题讨论】:

    标签: python google-maps google-maps-api-3 reverse-geocoding


    【解决方案1】:

    您可以在反向地理编码中使用字段formatted_address

    formatted_address 是一个字符串,其中包含该位置的人类可读地址。通常,此地址等同于“邮政地址”,有时会因国家/地区而异。 (请注意,由于许可限制,某些国家/地区(例如英国)不允许分发真实的邮政地址。)此地址通常由一个或多个地址组件组成。例如,地址“111 8th Avenue, New York, NY”包含“111”(街道编号、“8th Avenue”(路线)、“New York”(城市)和“NY”(美国州)。

    这是此查询返回的formatted_address 值的完整列表示例。

    https://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&key=YOUR_API_KEY
    
    "formatted_address" : "277 Bedford Avenue, *lyn, NY 11211, USA",
    "formatted_address" : "Grand St/Bedford Av, *lyn, NY 11211, USA",
    "formatted_address" : "Grand St/Bedford Av, *lyn, NY 11249, USA",
    "formatted_address" : "Bedford Av/Grand St, *lyn, NY 11211, USA",
    "formatted_address" : "*lyn, NY 11211, USA",
    "formatted_address" : "Williamsburg, *lyn, NY, USA",
    "formatted_address" : "*lyn, NY, USA",
    "formatted_address" : "New York, NY, USA",
    "formatted_address" : "New York, USA",
    "formatted_address" : "United States",
    

    更多信息请查看documentation

    也尝试检查此SO question

    【讨论】:

    • 感谢您的回复。我找到了格式化的地址,第一个选项几乎符合我的需要(我现在正在使用它),但理想情况下,我想返回没有 zip 和国家/地区的地址。
    • 我强烈建议您继续使用formatted_address ─ 想出自己的地址格式既不容易也不太可能是个好主意。如果您只关心少数几个国家,则可以使用正则表达式删除邮政编码和国家(删除与某些模式匹配的部分)。尽管它是一种对地址进行反格式化,但它比格式化更容易,而且从长远来看更有可能继续工作。