GIS奮闘記

元GISエンジニアの技術紹介ブログ。主にPythonを使用。

スポンサーリンク

foliumを使ってみよう

本日はfoliumについて書いてみたいと思います。

foliumとは

WEBマップを作成するためのライブラリです。Leafletというjavascriptのライブラリーがベースになっているようです。WEBサイトに以下のように簡単にインタラクティブなマップを組み込むことができます。

f:id:sanvarie:20181022104917p:plain

インストール

pip install foliumですね

環境

Python2.7.3
jupyter notebook
Windows10

ベースとなる地図について

foliumでは色々な地図タイルを指定することができます

https://github.com/python-visualization/folium/tree/master/folium/templates/tiles

  1. mapboxbright
  2. cartodbdark_matter
  3. cartodbpositron
  4. cloudmade
  5. mapbox
  6. mapboxcontrolroom
  7. openstreetmap
  8. stamenterrain
  9. stamentoner
  10. stamenwatercolor

今回はOpenStreetMap をタイルに指定してみようと思います。OpenStreetMapって何?という方は以下のエントリーを読んでみてください。

www.gis-py.com

サンプルコード

import folium

m = folium.Map(
    location=[-31.950527,115.860457],
    tiles='OpenStreetMap',
    zoom_start=10
)

m

たったこれだけですね。本当に簡単です。

f:id:sanvarie:20181022105832p:plain

緯度経度とマップ読み込み時のズームレベルは任意で指定できます。今回はオーストラリアのパースの地図を表示させてみました。

ただ、これだけだと面白くないので、このマップにポイントをプロットしたいと思います。使用するデータは以下エントリーで作成した西オーストラリアのAirbnbのShapeファイルです。

www.gis-py.com

サンプルコード

import folium
import geopandas

m = folium.Map(
    location=[-31.950527,115.860457],
    tiles='OpenStreetMap',
    zoom_start=10
)

data = geopandas.GeoDataFrame.from_file(r"D:\gis-py\geopandas\airbnb\accommodation.shp")
gjson = data[1:100].to_json() # 数が多すぎるのでデータをしぼる

points = folium.features.GeoJson(gjson)

m.add_child(points)
m

Shapeの全データをプロットするとメモリエラーを起こしてしまったので、データを100件にしぼりましたが、ばっちりですね。

f:id:sanvarie:20181022122402p:plain

f:id:sanvarie:20181022122525p:plain

WEBマップの作成がこんなに簡単にできるなんて一昔前は考えられなかったですね。GIS系のPythonライブラリが年々充実してきている気がします。本当に便利なので、ぜひ使ってみてください。