GeoPy 지오 코더에서 개별 주소 구성 요소 (도시, 주 등)를 반환하는 방법은 무엇입니까?


10

GeoPy를 사용하여 주소를 위도, 경도로 지오 코딩합니다. 또한 각 주소별로 항목 화 된 주소 구성 요소 (거리, 도시, 주, 우편 번호)를 추출하고 싶습니다.

GeoPy는 주소가 포함 된 문자열을 반환하지만 각 구성 요소를 분리하는 신뢰할 수있는 방법을 찾을 수 없습니다. 예를 들면 다음과 같습니다.

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

Google 지오 코딩 API는 이러한 개별 구성 요소를 반환합니다. GeoPy에서이를 가져올 수있는 방법이 있습니까? (또는 다른 지오 코딩 도구?)

답변:


8

Lubar, Stack Overflow에서 귀하의 게시물을 보았지만 일관성을 유지하기 위해 비슷한 답변을 게시하려고합니다. 좋은 질문입니다. 주소 확인 업계에서 일하고 있으며 이전에 귀하의 문제를 해결했습니다.

나는 연결 이 스택 오버플로 질문 코멘트에; 완전한 자유 주소 형식의 형식에 대한 보장이 없다는 것을 아는 것이 중요합니다. 링크 된 게시물에서 언급했듯이 전체 주소는 다음과 같습니다.

1) 102 메인 스트리트 애니 타운, 주

2) 400n 600e # 2, 52173

3) 포 # 104 60203

4) 1234 LKSDFJlkjsdflkjsdljf #asdf 12345

5) 205 1105 14 90210

(이 이유는 링크 된 게시물에 설명되어 있습니다.) GeoPy는 사용 된 지오 코더 (GeoPy의 제어 범위를 벗어난 결과 형식)에 따라 특정 형식으로 주소를 반환하지만 주소는 특정 형식 내에서 모든 종류의 방식을 볼 수 있음을 알고 있습니다 구성 요소 (예 : 쉼표 포함)를 사용하고 표준화 된 주소에는 쉼표가 없는지 확인해야합니다 (USPS Publication 28에 따름).

최근에 LiveAddress 라는 API 작업을 도왔습니다 . 지오 코딩 및 단일 행 주소 구문 분석을 지원하도록 방금 업그레이드되었습니다.

GeoPy는 구성 요소를 구문 분석하지 않고 지오 코딩하도록 설계되었습니다 (이 작업은 실제로 여기에 들어 가지 않는 이유로 어렵습니다). 그러나 LiveAddress 주소를 구성하고 주소에 대한 좌표 및 기타 정보를 주소가 실제 주소 인 경우에만 반환합니다. "추측 된"결과가 없습니다.

Python을 사용하여 단일 행 주소를 구성 요소로 구문 분석하려면 전체 주소를 "street"필드에 넣으십시오.

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
의도가 좋지 않기 때문에가 아니라 주소 구성 요소가 쉼표로 구분된다는 보장이 없기 때문에 이것을 하향 투표해야합니다. 단일 행 주소를 구성 요소로 구문 분석하는 방법에 대해서는 Stack Overflow에서이 질문을 참조하십시오 . GeoPy는 특정 형식을 반환 할 수 있지만 표준화 된 주소에는 쉼표가 없습니다.
Matt

@ Mat 이것은 내 솔루션입니다. 어쩌면 이것은 그의 문제를 해결할 수는 없지만 좋은 해결책을 찾는 좋은 방법을 찾는 데 도움이 될 수 있습니다 .. 그에게 완전히 달려 있습니다 ... 나는 해결책이 있습니다. 당신이 downvoting 때 쓰기, 그것은 모두 당신에게 달려 있습니다. 우리의 도움이되는 것은 아닙니다. 행운을 빈다 ..
Aragon

2
아래로 버튼을 클릭했을 때 답변을 개선하는 데 도움이되는 의견을 남기는 것이 좋습니다. 나는 당신의 대답이 도움이되지 않거나 여기에 속하지 않았다는 것을 의미하지는 않았습니다. 확실히 지역 사회에 가치를 더합니다! 다른 사람들이 비슷한 문제를 간과하는 간단한 솔루션입니다. 다른 사람들이 유용하다고 확신합니다.
Matt

여기에 의견을 제시하십시오-질문에 대한 좋은 대답. 이 답변의 품질을 강화하는 방법은 우편 번호에 예상되는 한 행에서 특정 길이의 숫자를 식별하는 정규식입니다. 그냥 내 2c.
jason m
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.