pythonでgooglemap情報を扱う(地名から座標を取得、座標から地図画像を取得)方法まとめ

[追記]
2018/08からGoogleMapのポリシーが変わり、APIキーの取得が必須になったようです。
追って対策を調べて記載変更しますが、現状は、このままの方法ではAPIキーのエラーで位置情報の取得ができません。

概要

googlemapデータを機械学習の元ネタにするために、データの取り扱い方を調べたのでまとめておく。

pygeocoderを使って地名から座標(緯度経度)、詳細住所を取得する

pipでライブラリをインストール

pip install pygeocoder


あとはpythonで書くだけ。
例えば国会議事堂の住所が知りたければこんな感じ。googlemapで検索して出てくるワードであれば、住所が紐付けられている模様。

from pygeocoder import Geocoder
address = '国会議事堂'
results = Geocoder.geocode(address)
print(results[0].coordinates)
# => (35.675888, 139.744858)

result = Geocoder.reverse_geocode(*results.coordinates, language="ja")
print result
# => 日本, 〒100-0014 東京都千代田区永田町1丁目7−1 国会議事堂

ふむ、簡単にかける割にはすごい。

urllibを使って特定の座標周辺の地図を画像として保存

次は、上記で得た座標を元に周辺の地図画像をダウンロードしてみる。
基本的には以下URLを参考にした。

Google Maps Static API入門
Google Mapの地図の画像を取得するには – 山本隆の開発日誌

pipでライブラリをインストール

sudo pip install urllib

以下のように、地図画像を取得して保存させる。
自分で書いておいてなんだけど、いまいち美しくない…。

from pygeocoder import Geocoder
import urllib

def download_pic(url,filename):
	img = urllib.urlopen(url)
	localfile = open( "./" + str(filename) + ".png" , 'wb')
	localfile.write(img.read())
	img.close()
	localfile.close()

address = 'ホワイトハウス'
results = Geocoder.geocode(address)
print(results[0].coordinates)

result = Geocoder.reverse_geocode(*results.coordinates, language="ja")
print result

html1 = "https://maps.googleapis.com/maps/api/staticmap?center="
html2 = "&maptype=hybrid&size=640x480&sensor=false&zoom=18&markers="
html3 = "&key=googleから取得したキーコードを入力"

axis = str((results[0].coordinates)[0]) + "," + str((results[0].coordinates)[1])

html = html1 + axis + html2 + axis + html3

print html

download_pic(html,address)

これを実行すると、ちゃんとホワイトハウス周辺の地図が保存できる。
さすがグーグル、使いやすくできてる。
細かなパラメータについては上記リンクを参照。