読者です 読者をやめる 読者になる 読者になる

あれもPython,これもPython

Pythonで世界を包みたい

Pythonで地図情報を扱いたい(foliumを使用する)

Python勉強記(モジュール毎)

PythonだとCUIな処理のイメージが強いですが、
ビジュアライズでも強力なモジュールがそろっています。

例えば地理情報の処理では、
foliumというモジュールが便利です。

github.com

foliumの導入

定番ですが、pipで

pip install folium

foliumの使い方

foliumは緯度経度から地図上にマーカーをマッピングできます。
今回はまず、住所から緯度経度を取得します。

GeocodingというサイトのAPIを使うと、
住所から緯度経度をXMLで取得可能です。

Geocoding - 住所から緯度経度を検索

import urllib
import lxml.html

area_address = "対象の住所"
area_name = "対象の名前"

url = "http://www.geocoding.jp/api/?q="
html = urllib.urlopen(url + address).read()

dom = lxml.html.fromstring(html)
lat = float(dom.xpath("//lat")[0].text)
lng = float(dom.xpath("//lng")[0].text)

習得した緯度経度をfoliumを用いて、
マーカーが振られたHTMLを出力します。

import folium 

loc = [lat,lng]

#  foliumのオブジェクトを作成
# 中心の緯度経度と、大きさを指定
map_obj = folium.Map(location=loc,zoom_start=15)

# 先ほどのオブジェクトに指定した緯度経度のマーカーを立てる
map_obj.simple_marker(location=loc,popup=area_name)

# HTMLとして出力
map_obj.create_map(path="output.html")

folium.Mapにtiles引数で以下を与えると
以下の様な種類に変更することが可能です。

Stamen Terrain http://maps.stamen.com/terrain/#12/37.7707/-122.3783

Stamen Toner http://maps.stamen.com/toner/#12/37.7707/-122.3783

などなど。

他にもマーカーの種類を変えたり、
コロプレス地図を作成することが可能です。