よちよちpython

独習 python/Qpython/Pydroid3/termux

【folium】地図のMarkerの色や形・アイコン・タイルを変える

前回Geocoding.jpfoliumで、地名から座標を取得し地図にマーカーを置くことをしました。
今回は、マーカーの色や形、マーカーに付いた絵(アイコン)とその色、地図タイルの変えます。

日本の地名や住所から座標(緯度と経度)を調べたい時は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
Make this Notebook Trusted to load map: File -> Trust Notebook



デフォルトの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
Make this Notebook Trusted to load map: File -> Trust Notebook



赤いピンを追加

マーカー(ピン)の色を変えて差したい場合は

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
Make this Notebook Trusted to load map: File -> Trust Notebook

単に色を変えた場合はマークが「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
Make this Notebook Trusted to load map: File -> Trust Notebook

アイコンの色

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
Make this Notebook Trusted to load map: File -> Trust Notebook



ピンの形状はデフォルトで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
Make this Notebook Trusted to load map: File -> Trust Notebook

Circle() (東京・大阪)と CircleMarker() (愛知)の違いは、地図を拡大縮小した時の挙動の違い。
拡大するとCircleMarkerで描いた黄色い円の方は円の半径も小さくなる。逆に引くと円が大きくなる。
あと塗りつぶし色指定のfillfill_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
Make this Notebook Trusted to load map: File -> Trust Notebook



凹凸の感じが出てるもの

zoom_start = 10
m = folium.Map(location=[34, 136.3],
                   tiles="Stamen Terrain",
                   zoom_start=zoom_start)
# 表示
m
Make this Notebook Trusted to load map: File -> Trust Notebook



夜の地図

zoom_start = 5
m = folium.Map(location=[35.6, 139.7],
                   tiles="cartodbdark_matter",
                   zoom_start=zoom_start)

m
Make this Notebook Trusted to load map: File -> Trust Notebook



9月2日21時半現在、台風9号五島市の辺りを北上中。ここ長崎市は雨は降っていないが暴風が吹いている。
しかし9月に入ってまだ9号。最近は台風の威力がめっきり落ちた。以前は中心が沖縄や鹿児島のにいる段階で北部九州も吹き荒れている感じでしたけど。