目的
地名、住所が示す場所に対して、地理座標を与えるジオコーディング(geocoding)を行う方法を説明します。
Google Map
以前はGoogleMapのジオコーディングのAPIがお手軽に使えましたが、昨今は、APIキー取得にはクレジットカード登録が必須になってしまい使用するための敷居が高くなっています。
https://developers.google.com/maps/documentation/geocoding/start?hl=ja
Yahoo!ジオコーダAPI
1日5万回の実行まで使えます。
https://developer.yahoo.co.jp/webapi/map/openlocalplatform/v1/geocoder.html
実際に当方が使用したPythonでの実装例は以下のようになります。
https://github.com/mima3/yakusyopdf/blob/master/create_geo.py
特に注意するのはrecursiveパラメータで、もし、ぴったしの住所がなかった場合、上のレベルで検索します。
recursiveパラメータがtrueの場合、「東京都千代田区ほげ町」が存在しなければ「東京都千代田区」で検索した結果をかえしてくれます。recursiveパラメータがfalseの場合は上位レベルでの検索は行いません。
なお、座標データはXMLまたはJSONで取得可能です。
ジオコーダDAMS(Distributed Address Matching System)
いままではWebサービスでしたがDAMSはローカルにジオコーディング用の環境を作成できます。
http://newspat.csis.u-tokyo.ac.jp/geocode/modules/dams/index.php?content_id=1
APIの制限を気にせずにローカルの環境で実行できるのは大きな強みだと考えられます。
その他、Googleのジオコーダとの違いは以下に記載されています。
http://newspat.csis.u-tokyo.ac.jp/geocode/modules/smartfaq/category.php?categoryid=4
pydams
PythonからDAMSを使用できるライブラリです。
https://github.com/hottolink/pydams
ただしこのpythonのライブラリに指定しているパッチを当てると一部の住所の検索ができなくなりますので注意が必要です。(修正済み)
https://github.com/hottolink/pydams/issues/5