PythonでGeocoding

PythonでGeocoding

こんにちは。マスジュンです。

今回は、住所から緯度経度に変換する作業をpythonからやってみたいと思います。この変換作業を「ジオコーディング」と言うそうです。店舗の売上予測に、地域の天気などをリンクさせる場合は必要になりますね。

geocoderパッケージのインストール

pythonでジオコーディングする場合は、geocoderをインストールします。

pipを使って、geocoderパッケージをインストールします。

$ pip install geocoder

 

 geocodeの取得

インストールしたgeocoderを使って、住所から緯度と経度を取得していきます。

import geocoder

geo_address = '東京都秋葉原'

g = geocoder.google(geo_address)

print(geo_address+": "+str(g.latlng))
東京都秋葉原: [35.7022051, 139.7741464]

ちなみに、google先生のAPIの場合は、優秀なので建物名で出力できちゃいます♪

 

geo_address = '東京都港区東京タワー'

g = geocoder.google(geo_address)

print(geo_address+": "+str(g.latlng))
東京都港区東京タワー: [35.6585805, 139.7454329]

json形式で出力すれば、より詳細な結果を確認できます。

 

g.geojson
{'features': [{'bbox': [139.7440839197085,
    35.6572315197085,
    139.7467818802915,
    35.6599294802915],
   'geometry': {'coordinates': [139.7454329, 35.6585805], 'type': 'Point'},
   'properties': {'accuracy': 'ROOFTOP',
    'address': '4 Chome-2-8 Shibakoen, Minato, Tokyo 105-0011, Japan',
    'bbox': [139.7440839197085,
     35.6572315197085,
     139.7467818802915,
     35.6599294802915],
    'city': 'Minato',
    'confidence': 9,
    'country': 'JP',
    'lat': 35.6585805,
    'lng': 139.7454329,
    'ok': True,
    'place': 'ChIJCewJkL2LGGAR3Qmk0vCTGkg',
    'postal': '105-0011',
    'quality': 'establishment',
    'raw': {'address_components': [{'long_name': '8',
       'short_name': '8',
       'types': ['premise']},
      {'long_name': '2',
       'short_name': '2',
       'types': ['political', 'sublocality', 'sublocality_level_4']},
      {'long_name': '4 Chome',
       'short_name': '4 Chome',
       'types': ['political', 'sublocality', 'sublocality_level_3']},
      {'long_name': 'Shibakoen',
       'short_name': 'Shibakoen',
       'types': ['political', 'sublocality', 'sublocality_level_2']},
      {'long_name': 'Minato',
       'short_name': 'Minato',
       'types': ['locality', 'political']},
      {'long_name': 'Tokyo',
       'short_name': 'Tokyo',
       'types': ['administrative_area_level_1', 'political']},
      {'long_name': 'Japan',
       'short_name': 'JP',
       'types': ['country', 'political']},
      {'long_name': '105-0011',
       'short_name': '105-0011',
       'types': ['postal_code']}],
     'administrative_area_level_1': {'long_name': 'Tokyo',
      'short_name': 'Tokyo'},
     'country': {'long_name': 'Japan', 'short_name': 'JP'},
     'formatted_address': '4 Chome-2-8 Shibakoen, Minato, Tokyo 105-0011, Japan',
     'geometry': {'location': {'lat': 35.6585805, 'lng': 139.7454329},
      'location_type': 'ROOFTOP',
      'viewport': {'northeast': {'lat': 35.6599294802915,
        'lng': 139.7467818802915},
       'southwest': {'lat': 35.6572315197085, 'lng': 139.7440839197085}}},
     'locality': {'long_name': 'Minato', 'short_name': 'Minato'},
     'place_id': 'ChIJCewJkL2LGGAR3Qmk0vCTGkg',
     'political': {'long_name': 'Japan', 'short_name': 'JP'},
     'postal_code': {'long_name': '105-0011', 'short_name': '105-0011'},
     'premise': {'long_name': '8', 'short_name': '8'},
     'sublocality': {'long_name': 'Shibakoen', 'short_name': 'Shibakoen'},
     'sublocality_level_2': {'long_name': 'Shibakoen',
      'short_name': 'Shibakoen'},
     'sublocality_level_3': {'long_name': '4 Chome', 'short_name': '4 Chome'},
     'sublocality_level_4': {'long_name': '2', 'short_name': '2'},
     'types': ['establishment', 'point_of_interest', 'premise']},
    'state': 'Tokyo',
    'status': 'OK',
    'sublocality': 'Shibakoen'},
   'type': 'Feature'}],
 'type': 'FeatureCollection'}
 かなり色々な情報が返されてきますね。

最後に

今回はpythonで住所を緯度軽度情報に変換しました。天候などをデータとして使う場合は、必須な処理になると思います。googleの他にも、様々なAPIを利用できるようなので、仮にGoogle先生がスネてしまってもなんとかなる気がします。APIの回数だけは少し気にしたほうが良いかもしれませんね。

今日はここまで。それでは、また。

Pythonカテゴリの最新記事