MawaLog

一日一日、楽しく生きる。技術と音楽が好き。

無料のAPI、geocodingを使ってPythonで住所から緯度経度を取得するまでのメモ

地図とGPS

地図とGPS

geocodingという無料のジオコーディングapiサービスがある
Geocoding API - 住所から緯度経度を検索

と、いうことでPythonで扱うときのコードを検証してみた。今回は住所から緯度経度を取得するまでのメモである。

#Webから値を引っ張ってくるので例によってrequestsを利用する
>>>import requests
>>>full_adress = "東京都新宿区西新宿2丁目8−1" #東京都庁の住所である
>>>url = 'http://www.geocoding.jp/api/'
>>>payload = {'q': full_adress}
>>>result = requests.get(url, params=payload)
>>>result.text
#以下のようなXMLが返ってくる。
'<?xml version="1.0" encoding="UTF-8" ?>\n<result>\n<version>1.2</version>\n<address>東京都新宿区西新宿2丁目8−1</address>\n<coordinate>\n<lat>35.689185</lat>\n<lng>139.691648</lng>\n<lat_dms>35,41,21.065</lat_dms>\n<lng_dms>139,41,29.933</lng_dms>\n</coordinate>\n<open_location_code>8Q7XMMQR+MM</open_location_code>\n<url>http://www.geocoding.jp/?q=%E6%9D%B1%E4%BA%AC%E9%83%BD%E6%96%B0%E5%AE%BF%E5%8C%BA%E8%A5%BF%E6%96%B0%E5%AE%BF%EF%BC%92%E4%B8%81%E7%9B%AE%EF%BC%98%E2%88%92%EF%BC%91</url>\n<needs_to_verify>no</needs_to_verify>\n<google_maps>東京都新宿区西新宿2丁目8−1</google_maps>\n</result>\n'

#上記のXMLを辞書に直すことで各値を参照できるようにする。
>>>import xmltodict #ない場合はpip install xmltodictすると入手できます
>>>resultdict = xmltodict.parse(result.text)
>>>resultdict
OrderedDict([('result',
              OrderedDict([('version', '1.2'),
                           ('address', '東京都新宿区西新宿2丁目8−1'),
                           ('coordinate',
                            OrderedDict([('lat', '35.689185'),
                                         ('lng', '139.691648'),
                                         ('lat_dms', '35,41,21.065'),
                                         ('lng_dms', '139,41,29.933')])),
                           ('open_location_code', '8Q7XMMQR+MM'),
                           ('url',
                            'http://www.geocoding.jp/?q=%E6%9D%B1%E4%BA%AC%E9%83%BD%E6%96%B0%E5%AE%BF%E5%8C%BA%E8%A5%BF%E6%96%B0%E5%AE%BF%EF%BC%92%E4%B8%81%E7%9B%AE%EF%BC%98%E2%88%92%EF%BC%91'),
                           ('needs_to_verify', 'no'),
                           ('google_maps', '東京都新宿区西新宿2丁目8−1')]))])

>>>print(resultdict["result"]["coordinate"]["lat"])
>>>print(resultdict["result"]["coordinate"]["lng"])
35.689185 #緯度が求まった
139.691648 #経度が求まった

お気軽に押していただければ励みになります^^