如何从GeoPy地址解析器返回单个地址组成部分(城市,州等)?


10

我正在使用GeoPy将地址地理编码为lat,lng。我还想为每个地址提取逐项列出的地址组成部分(街道,城市,州,邮政编码)。

GeoPy返回带有地址的字符串-但我找不到分离每个组件的可靠方法。例如:

{street: '123 Main Street', city: 'Los Angeles', state: 'CA', zip: 90034, country: 'USA'}

Google地理编码API确实会返回这些单独的组件...有没有办法从GeoPy获取这些组件?(或其他地理编码工具?)

Answers:


8

Lubar,我在Stack Overflow上看到了您的文章,但为了保持一致性,我将在此处发布类似的答案。这是一个好问题。我从事地址验证行业,以前曾解决过您的问题。

我在评论中链接到此Stack Overflow问题。而且重要的是要知道,对于完整的自由格式街道地址的格式确实不能保证。如链接文章中所述,完整的地址可能类似于以下任何一个地址:

1)州Anytown大街102号

2)400n 600e#2,52173

3)po#104 60203

4)1234 LKSDFJlkjsdflkjsdljf #asdf 12345

5)205 1105 14 90210

(原因在链接的文章中进行了解释。)我意识到,GeoPy以某种格式返回地址-取决于所使用的地理编码器(结果格式超出了GeoPy的控制范围),但是地址可以在特定范围内以各种方式显示组成部分(例如带有逗号),并且重要的是要知道标准化的地址没有逗号(根据USPS出版物28)。

我帮助开发了一个名为LiveAddress的API ;它刚刚升级为支持地理编码和单行地址解析。

GeoPy旨在对地址进行地理编码,而不是解析为组件(由于我不会在此处介绍的原因,该任务实际上确实很困难)。但是,只有在地址是真实的情况下,LiveAddress 才会将地址组成部分并返回坐标和有关该地址的其他信息。没有“猜测”结果。

要使用Python将单行地址解析为组件,只需将整个地址放入“街道”字段即可:

import json
import pprint
import urllib

LOCATION = 'https://api.smartystreets.com/street-address/'
QUERY_STRING = urllib.urlencode({ # entire query sting must be URL-Encoded
    'auth-token': r'YOUR_API_KEY_HERE',
    'street': '1 infinite loop cupertino ca 95014'
})
URL = LOCATION + '?' + QUERY_STRING

response = urllib.urlopen(URL).read()
structure = json.loads(response)
pprint.pprint(structure)

生成的JSON对象将包含一个components类似于以下内容的对象:

"components": {
        "primary_number": "1",
        "street_name": "Infinite",
        "street_suffix": "Loop",
        "city_name": "Cupertino",
        "state_abbreviation": "CA",
        "zipcode": "95014",
        "plus4_code": "2083",
        "delivery_point": "01",
        "delivery_point_check_digit": "7"
}

响应还将包括first_line和delivery_line_2的组合,因此,如果需要它们,您不必手动将其串联起来。


另一个API可以是address-parser.net/try.php
SIslam

3

编写您的json文件并不难。

import json

result = '123 Main Street, Los Angeles, CA, 90034, USA'

sp = result.split(',')
dumpJson = json.dumps({'street':sp[0], 'city': sp[1], 'state': sp[2], 
                      'zip': sp[3], 'country': sp[4]})


>>> dumpJson
'{"city": " Los Angeles", "state": " CA", "street": "123 Main Street", 
          "zip": " 90034", "country": " USA"}'

我希望它可以帮助您...


1
我必须对此表示不满,不是因为意图不好,而是因为绝对不能保证地址组件用逗号分隔。请参阅堆栈溢出中的有关将单行地址解析为组件的问题。虽然GeoPy可能会返回某种格式,但是标准地址没有逗号。
马特

@Matt这是我的解决方案。也许这不能解决他的问题,但是可以帮助他找到一种好的解决方案的方法..这完全取决于他...我看到您有解决方案,只在这里写下...除此之外,您不需要投票时写信,一切取决于您。.我们没有其他帮助。祝你好运...
阿拉贡

2
当我单击“向下”按钮时,它建议我发表评论以帮助改善答案,所以我做到了。我并不是要暗示您的答案没有帮助或不属于这里。它无疑为社区增加了价值!这是一个简单的解决方案,其他人可能会忽略类似的问题。我相信其他人会发现它有用。
马特

只是在这里发表评论-这个问题的好答案。强制执行此答案的质量的一种方法是使用正则表达式来识别一行中特定长度的数字-如邮政编码所期望的那样。只是我的2c。
2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.