folium で、地図の tiles を指定できますが、何が指定できるのかわからなかったので、調べてみました。
地図の タイル とは何か?
わからなかったのでまずここから確認しました。
地図タイルについて - smellman’s Broken Diary の で、地図タイルってなんなの
にわかりやすい説明記載されています。
タイルの URL の意味がこれでわかりました。
folium で 指定できるタイルについて
example が記載されている記事があります。
Folium Map Tiles - deparkes
また、folium 自体 の example に TilesExample.ipynb
という notebook があり、タイルの使い方が記載されています。
folium/TilesExample.ipynb at master · python-visualization/folium
exmaple では、tiles='OpenStreetMap'
、 tiles='Mapbox Bright'
等で指定していますが、この指定可能なタイルには、どんなものがあるのか気になったので以下にまとめます。
使用できる ビルドインタイル
以下のタイルが folium のパッケージ内に含まれていて、名称での指定が可能です。
folium/folium/templates/tiles at master · python-visualization/folium
- mapboxbright
- cartodbdark_matter
- cartodbpositron
- cloudmade
- mapbox
- mapboxcontrolroom
- openstreetmap
- stamenterrain
- stamentoner
- stamenwatercolor
tiles='Mapbox Bright'
だと、mapboxbright が使われ、tiles='mapboxbright'
でも mapboxbright が使われます。
jupyter で 動かしてみる
以下、jupyter notbook 上で動作確認した結果を記載します。
API キーを発行する必要があるタイルもあります。
version の出力
import os
import folium
print(folium.__version__)
0.5.0
OpenStreetMap をタイルに指定する
lon, lat = -38.625, -12.875
zoom_start = 8
m = folium.Map(location=[lat, lon], tiles='OpenStreetMap', zoom_start=zoom_start)
m
Mapbox Bright をタイルに指定する
m = folium.Map(location=[lat, lon], tiles='Mapbox Bright', zoom_start=zoom_start)
m
mapboxbright をタイルに指定する
m = folium.Map(location=[lat, lon], tiles='mapboxbright', zoom_start=zoom_start)
m
cartodbdark_matter をタイルに指定する
m = folium.Map(location=[lat, lon], tiles='cartodbdark_matter', zoom_start=zoom_start)
m
cartodbpositron を タイルに指定する
m = folium.Map(location=[lat, lon], tiles='cartodbpositron', zoom_start=zoom_start)
m
cloudmade をタイルに指定する
m = folium.Map(location=[lat, lon], tiles='cloudmade', zoom_start=zoom_start)
m
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-15-56f01905df85> in <module>()
----> 1 m = folium.Map(location=[lat, lon], tiles='cloudmade', zoom_start=zoom_start)
2 m
/Library/Python/2.7/site-packages/folium/map.pyc in __init__(self, location, width, height, left, top, position, tiles, API_key, max_zoom, min_zoom, zoom_start, world_copy_jump, no_wrap, attr, min_lat, max_lat, min_lon, max_lon, max_bounds, detect_retina, crs, control_scale, prefer_canvas, no_touch, disable_3d, subdomains, png_enabled)
201 no_wrap=no_wrap, attr=attr,
202 API_key=API_key, detect_retina=detect_retina,
--> 203 subdomains=subdomains
204 )
205
/Library/Python/2.7/site-packages/folium/map.pyc in add_tile_layer(self, tiles, name, API_key, max_zoom, min_zoom, attr, active, detect_retina, no_wrap, subdomains, **kwargs)
297 detect_retina=detect_retina,
298 subdomains=subdomains,
--> 299 no_wrap=no_wrap)
300 self.add_child(tile_layer, name=tile_layer.tile_name)
301
/Library/Python/2.7/site-packages/folium/map.pyc in __init__(self, tiles, min_zoom, max_zoom, attr, API_key, detect_retina, name, overlay, control, no_wrap, subdomains)
439 self.tiles = ''.join(tiles.lower().strip().split())
440 if self.tiles in ('cloudmade', 'mapbox') and not API_key:
--> 441 raise ValueError('You must pass an API key if using Cloudmade'
442 ' or non-default Mapbox tiles.')
443 templates = list(self._env.list_templates(
ValueError: You must pass an API key if using Cloudmade or non-default Mapbox tiles.
API Key が必要との旨でエラーになります。
mapbox をタイルに指定する
m = folium.Map(location=[lat, lon], tiles='mapbox', zoom_start=zoom_start)
m
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-16-3f5fb80e95a5> in <module>()
----> 1 m = folium.Map(location=[lat, lon], tiles='mapbox', zoom_start=zoom_start)
2 m
/Library/Python/2.7/site-packages/folium/map.pyc in __init__(self, location, width, height, left, top, position, tiles, API_key, max_zoom, min_zoom, zoom_start, world_copy_jump, no_wrap, attr, min_lat, max_lat, min_lon, max_lon, max_bounds, detect_retina, crs, control_scale, prefer_canvas, no_touch, disable_3d, subdomains, png_enabled)
201 no_wrap=no_wrap, attr=attr,
202 API_key=API_key, detect_retina=detect_retina,
--> 203 subdomains=subdomains
204 )
205
/Library/Python/2.7/site-packages/folium/map.pyc in add_tile_layer(self, tiles, name, API_key, max_zoom, min_zoom, attr, active, detect_retina, no_wrap, subdomains, **kwargs)
297 detect_retina=detect_retina,
298 subdomains=subdomains,
--> 299 no_wrap=no_wrap)
300 self.add_child(tile_layer, name=tile_layer.tile_name)
301
/Library/Python/2.7/site-packages/folium/map.pyc in __init__(self, tiles, min_zoom, max_zoom, attr, API_key, detect_retina, name, overlay, control, no_wrap, subdomains)
439 self.tiles = ''.join(tiles.lower().strip().split())
440 if self.tiles in ('cloudmade', 'mapbox') and not API_key:
--> 441 raise ValueError('You must pass an API key if using Cloudmade'
442 ' or non-default Mapbox tiles.')
443 templates = list(self._env.list_templates(
ValueError: You must pass an API key if using Cloudmade or non-default Mapbox tiles.
API キーが必要との旨でエラーとなります。
mapboxcontrolroom をタイルに指定する
m = folium.Map(location=[lat, lon], tiles='mapboxcontrolroom', zoom_start=zoom_start)
m
openstreetmap をタイルに指定する
m = folium.Map(location=[lat, lon], tiles='openstreetmap', zoom_start=zoom_start)
m
defalut の openstreetmap の タイルが適用されます。 後述しますが、openstreetmap の タイルは他にも多数あります。
stamenterrain を タイルに指定する
m = folium.Map(location=[lat, lon], tiles='stamenterrain', zoom_start=zoom_start)
m
stamentoner を タイル に指定する
m = folium.Map(location=[lat, lon], tiles='stamentoner', zoom_start=zoom_start)
m
stamenwatercolor を タイル に指定する
m = folium.Map(location=[lat, lon], tiles='stamenwatercolor', zoom_start=zoom_start)
m
ビルドインタイル 以外で指定可能なタイルについて
folium というか Leaflet は、WMS 、 TMS のタイルの指定ができます。
Using WMS and TMS services - Leaflet - a JavaScript library for interactive maps
Leaflet では、WMS と TMS で、メソッドが異なり、それは、folium でも同じかと思われます。
検索して見た限り、add_wms_layer
というメソッドを使って、WMS のタイルが指定できるようです。
Adding WMS layers to your folium maps
上記、記載はしたものの、厳密にはWMS、 TMS でもないタイルのフォーマットが主に使われているようなのでメソッドの動作確認はスルーして、folium で使える 地図タイルを探します。
地図タイルの提供してくれるサービス
無料で使用可能なものとして以下がありました。
-
地理院地図|地理院タイル一覧
国土地理院の地図タイルです。基本的には無料で使えます。タイルによりライセンスが違いますので、行政サイトでウェブ地図を使う際の注意点などまとめ の地理院地図
や、国土地理院コンテンツ利用規約|国土地理院 を一読しておいたほうがよいです。 -
Leaflet Provider Demo
Leaflet の Demo ですが、zxy形式 の地図タイル URL が多数記載されています。
地図提供プロバイダーごとに利用規約等は異なりますので、使用する際に確認が必要かと思います。
探す過程では、以下の記事を参考にしました。
行政サイトでウェブ地図を使う際の注意点などまとめ - Qiita
jupyter で 動かしてみる
jupyter で tile を指定して動かしてみます。
version の出力
import os
import folium
print(folium.__version__)
0.5.0
国土地理院 の タイル を 指定する 空中写真(1961~1964年)
zoom_start = 15
m = folium.Map(location=[35.658593, 139.745441],
tiles='https://cyberjapandata.gsi.go.jp/xyz/ort_old10/{z}/{x}/{y}.png',
attr='国土地理院 空中写真(1961~1964年)',
zoom_start=zoom_start)
m
出典:国土地理院ウェブサイト 地理院地図|地理院タイル一覧
国土地理院のタイルを指定する 植生(樹木被覆率)
zoom_start = 5
m = folium.Map(location=[35.658593, 139.745441],
tiles='https://cyberjapandata.gsi.go.jp/xyz/gmld_ptc2/{z}/{x}/{y}.png',
attr='国土地理院 植生(樹木被覆率)',
zoom_start=zoom_start)
m
出典:国土地理院ウェブサイト 地理院地図|地理院タイル一覧
tamen TonerLite をタイル に指定する
zoom_start = 3
m = folium.Map(location=[35.658593, 139.745441],
tiles='https://stamen-tiles-{s}.a.ssl.fastly.net/toner-lite/{z}/{x}/{y}.png',
attr= 'Map tiles by <a href="http://stamen.com">Stamen Design</a>, <a href="http://creativecommons.org/licenses/by/3.0">CC BY 3.0</a> — Map data © <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>',
zoom_start=zoom_start)
m
サンプルコードのURLは'https://stamen-tiles-{s}.a.ssl.fastly.net/toner-lite/{z}/{x}/{y}.{ext}'
です。
'{ext}'
をfolium からの指定する方法がわからなかったので、'https://stamen-tiles-{s}.a.ssl.fastly.net/toner-lite/{z}/{x}/{y}.ping'
としました。
HikeBike.HikeBike をタイルに指定する
zoom_start = 5
m = folium.Map(location=[35.658593, 139.745441],
tiles='http://{s}.tiles.wmflabs.org/hikebike/{z}/{x}/{y}.png',
attr= '© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>',
zoom_start=zoom_start)
m
まとめ
folium で 指定できる 地図タイルについて調べてみました。以下、まとめます。
-
default で指定できるタイルは、folium/folium/templates/tiles at master · python-visualization/folium を確認する
-
国土地理院の地図タイルも使うことができる。
-
leaflet で使えるものは使用可能なので、Leaflet Provider Demo に記載されているものは使える。
-
タイル プロバイダ で API キーの発行が必要なものもある。 以上です。
コメント