【folium】地図のMarkerの色や形・アイコン・タイルを変える
前回はGeocoding.jpとfoliumで、地名から座標を取得し地図にマーカーを置くことをしました。
今回は、マーカーの色や形、マーカーに付いた絵(アイコン)とその色、地図タイルの変えます。
日本の地名や住所から座標(緯度と経度)を調べたい時はGeocoding - 住所から緯度経度を検索 が便利です。
作業環境
- Android
- termux
- JupyterNotebook
- Python3.8
- 外部ライブラリfolium
- pip install folium 等でインストール
folium.Map() 地図の作成
map=folium.Map(location=座標, tiles="タイル名", zoom_start=整数)
- 座標は[緯度, 経度]のリスト型
- tilesは地図の種類。デフォルトでOpenStreetMapが使われる。
- zoom_start=数値は地図の拡大縮小サイズ。デフォルトで10。大きい値にすると拡大。
# 地図作成ライブラリのインポート import folium # マップオブジェクト作成 map = folium.Map(location=[33, 130], zoom_start=8) # 地図保存 map.save("マップオブジェクト.html") # 表示 map
デフォルトのMarker(ピン)を追加
マップオブジェクトにピンを追加するには
folium.Marker(location=座標, popup="ポップアップ表示名").add_to(マップオブジェクト)
- ピンの色はデフォルトで青
- ピンの座標 : [緯度, 経度] で指定
- popup="なんとか" : ピンをクリックかタップすると表示される名称を指定(保存したhtml以外ではなぜか文字化けする。)
- マーカー(ピン)追加 :
.add_to(マップオブジェクト)
で指定のマップオブジェクトにマーカー(ピン)を追加する
上で作ったまっさらな地図にピンを差してみます。長崎県庁の座標を指定。
# 長崎県庁の座標 nagasaki_latlng = [32.750178, 129.867426] # デフォルトのピンを差す folium.Marker(nagasaki_latlng, popup="長崎県庁").add_to(map) # 保存 map.save("デフォルトマーカー.html") # 表示 map
赤いピンを追加
マーカー(ピン)の色を変えて差したい場合は
folium.Marker(座標, popup="なんとか", icon=folium.Icon(color="色指定")).add_to(マップ)
- folium.Marker()の引数に
icon=folium.Icon(color="色指定")
を加えるとその色のピンが差せる
# 佐世保市役所の座標 sasebo = [33.18003, 129.715105] # 赤いピンを追加で差す folium.Marker( location=sasebo, popup="佐世保市役所", icon=folium.Icon(color='red') ).add_to(map) # 保存 map.save("赤いマーカー.html") # 表示 map
単に色を変えた場合はマークが「i」になった。icon="info-sign"
がデフォルトらしい。その変え方はあとで。
Markerの色
ピンに使える色は
[‘red’, ‘blue’, ‘green’, ‘purple’, ‘orange’, ‘darkred’,
’lightred’, ‘beige’, ‘darkblue’, ‘darkgreen’, ‘cadetblue’,
‘darkpurple’, ‘white’, ‘pink’, ‘lightblue’, ‘lightgreen’,
‘gray’, ‘black’, ‘lightgray’]。
これ以外や#0000ffのような16進法の色を指定しようとするとUser Warning
と出てできない。Iconの色は決まったものを使うよう注意される。
ただし、アイコンのマークの色は変えられる。それも後程。
Markerのiconのマーク
ピンの形はデフォルトでcolor="blue"
、prefix=glyphicon
。上の長崎県庁に差したものがそれ。
ピンについているマークを変えたい時は次から選べる。
GlyphSearch: Search for icons from Font Awesome, Foundation, Glyphicons, IcoMoon, Ionicons, Material Design, and Octicons
適当に選んで使ってみます。
# 大村市役所の座標 ohmura = [32.900034, 129.958430] # カメラのピンを追加で差す folium.Marker( location=ohmura, popup="大村市役所", icon=folium.Icon(color="lightgreen", icon="camera") ).add_to(map) # 諫早市役所 isahaya = [32.843590, 130.053257] # 目のピンを追加で差す folium.Marker( location=isahaya, popup="諫早市役所", icon=folium.Icon(color="pink", icon="eye-open") ).add_to(map) # 平戸市役所 hirado = [33.368067, 129.553677] # フォークとナイフのピンを追加で差す folium.Marker( location=hirado, popup="平戸市役所", icon=folium.Icon(color="lightblue", icon="cutlery") ).add_to(map) # 保存 map.save("カラフルマーカー.html") # 表示 map
アイコンの色
folium.Marker(icon=folium.Icon(icon_color="#000000", color="purple").add_to(map)
のようにすると、マーカーのピン全体は紫でアイコンは指定色に変えたものを追加することができる。
# 島原市役所の座標 shimabara = [32.787905, 130.370031] # 16進法カラーコードのピンを追加で差す folium.Marker( location=shimabara, popup="島原市役所", icon=folium.Icon(icon="bell", icon_color='#ffff00', color="purple") ).add_to(map) # 保存 map.save("島原マーカー.html") # 表示 map
ピンの形状はデフォルトでglyphicon
というティアドロップ型になっている。python - folium draw star marker - Stack Overflow の方法を使うと他の形状のマーカーに変えられるようです。
円のマーカー
マーカーをピンではなく円にできる。半径を指定することで何らかの規模を示したい時などに使える。
# 東京都庁座標 tokyo = [35.689634, 139.692101] # 大阪府庁座標 osaka = [34.686246, 135.519865] # 愛知県庁座標 aichi = [35.180295, 136.906712] # 東京都人口 jinkou_tokyo = 13999568 # 大阪府人口 jinkou_osaka = 8824394 # マップ作成 map_c = folium.Map([34, 136.5], zoom_start=5) # 円を置く 東京都 folium.Circle( location = tokyo, radius = jinkou_tokyo/100, color = "red", fill = True ).add_to(map_c) # 円を置く 大阪府 folium.Circle( location = osaka, radius = jinkou_osaka/100, color = "green", fill = False ).add_to(map_c) # 円を置く 愛知県 folium.CircleMarker( location = aichi, radius=20, # 数値は適当 popup = "愛知", color="#ffffcc", fill=True, fill_color="#00f351", ).add_to(map_c) # 表示 map_c
Circle()
(東京・大阪)と CircleMarker()
(愛知)の違いは、地図を拡大縮小した時の挙動の違い。
拡大するとCircleMarkerで描いた黄色い円の方は円の半径も小さくなる。逆に引くと円が大きくなる。
あと塗りつぶし色指定のfill
とfill_color
で書き方が違う。
tiles 地図のタイルを変える
foliumのtilesはデフォルトでOpenStreetMapになっている。ここまで作成してきた普通の地図。このtilesを他の物に変えて地図を作ることができる。
使えるタイルが大量にあるようですが、幾つかで変え方を書いておきます。
地理院地図|地理院タイル一覧
例えばこんなの
zoom_start = 7 m = folium.Map(location=[35, 139], tiles='https://cyberjapandata.gsi.go.jp/xyz/gmld_ptc2/{z}/{x}/{y}.png', attr='国土地理院 植生(樹木被覆率)', zoom_start=zoom_start) # 表示 m
凹凸の感じが出てるもの
zoom_start = 10 m = folium.Map(location=[34, 136.3], tiles="Stamen Terrain", zoom_start=zoom_start) # 表示 m
夜の地図
zoom_start = 5 m = folium.Map(location=[35.6, 139.7], tiles="cartodbdark_matter", zoom_start=zoom_start) m
追記
用意した画像をアイコンにして地図に張りつける事もできます。
chayarokurokuro.hatenablog.com
追記おわり
9月2日21時半現在、台風9号が五島市の辺りを北上中。ここ長崎市は雨は降っていないが暴風が吹いている。
しかし9月に入ってまだ9号。最近は台風の威力がめっきり落ちた。以前は中心が沖縄や鹿児島のにいる段階で北部九州も吹き荒れている感じでしたけど。