GeoPyジオコーダーから個々の住所コンポーネント(市、州など)を返す方法は?


10

GeoPyを使用して住所を緯度、経度にジオコーディングしています。また、各住所の項目別住所コンポーネント(ストリート、市、州、郵便番号)を抽出したいと思います。

GeoPyはアドレスを含む文字列を返しますが、各コンポーネントを分離する信頼できる方法が見つかりません。例えば:

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

GoogleジオコーディングAPIはこれらの個々のコンポーネントを返します...これらをGeoPyから取得する方法はありますか?(または別のジオコーディングツール?)

回答:


8

ルバー、私はあなたの投稿をスタックオーバーフローで見ましたが、一貫性を保つために同様の答えをここに投稿します。いい質問ですね。私は住所確認業界で働いており、以前はこの種の問題に取り組んできました。

このスタックオーバーフローの質問にコメントでリンクしました。完全なフリーフォームの番地の形式については保証がないことを知っておくことが重要です。リンクされた投稿で述べられているように、完全なアドレスは次のいずれかのようになります。

1)102メインストリートエニータウン、州

2)400n 600e#2、52173

3)po#104 60203

4)1234 LKSDFJlkjsdflkjsdljf #asdf 12345

5)205 1105 14 90210

(理由はリンクされた投稿で説明されています。)私は、GeoPyが特定の形式で住所を返すことを理解しています-使用されるジオコーダーによって(結果の形式はGeoPyの制御範囲外です)、住所は特定の範囲内であらゆる種類の方法を見ることができます(カンマのような)コンポーネント、および標準化されたアドレスにはカンマがないことを知ることが重要です(USPS Publication 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
私はこれに反対票を投じなければなりません。意図が良くないからではなく、住所コンポーネントがコンマで区切られているという保証は絶対にないからです。単一行アドレスをコンポーネントに解析することについては、Stack Overflowでこの質問を参照してください。GeoPyは特定の形式を返す場合がありますが、標準化された住所にはカンマがありません。
マット

@マットこれは私の解決策です。多分これは彼の問題を解決することはできませんが、彼が良い解決策のための良い方法を見つけるのを助けることができます..それは完全に彼次第です...私はあなたが解決策を持っていると思います、ここにそれを書いてください...この横にあなたがする必要はありませんあなたが反対票を投じるときに書いてください、それはすべてあなた次第です。あなたに幸運を..
アラゴン

2
[下へ]ボタンをクリックすると、回答を改善するためにコメントを残すよう提案されたので、そうしました。私はあなたの答えが役に立たないか、ここに属していないことを意味するつもりはありませんでした。それは確かにコミュニティに価値を追加します!これは、他の人がおそらく同様の問題を見落とすであろう単純な解決策です。他の人にも役立つと思います。
マット

ここでコメントしてください-質問に対する良い答えです。この回答の品質を強化する方法は、郵便番号で予想されるように、特定の行の長さを特定する正規表現です。ちょうど私の2c。
jason m
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.