よちよちpython

独習 python/Qpython/Pydroid3/termux/Linux

【folium】地図上のクリックした場所にピンを差すClickForMarker()

今回は、foliumで作成した地図上で「クリックした場所にマーカーを差し散らかす」方法です。

差し散らかさなくてもいいけどw



前回の投稿

【folium】地図上でクリックした場所の座標をpopupで表示させるLatLngPopup() - よちよちpython
も参考。



地図作成

import folium

#ベースの地図作成 (中心座標は適当です)
m = folium.Map(location=[36, 138], zoom_start=12)

# 中心座標に目印(赤)を追加 (特に必要なし)
folium.Marker([36, 138], 
              popup="地図の中心座標",
              icon=folium.Icon(color="red")
             ).add_to(m)

# クリックでピンを差し散らかすメソッドを追加
folium.ClickForMarker(popup="追加したピン").add_to(m)


# htmlファイルに保存する時は
#m.save("ClickForMarker.html")

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

↑の地図に赤のピンだけが差してあります。
どこかをクリックすると、その場所にマーカーが設置されます。

クリックし過ぎると散らかりますw

folium.ClickForMarker()のマーカーの色について

追加されるマーカーの色は指定できません。 デフォルトの青。

引数はClickForMarker(popup=None)で、popupのみ変更可能。



クリックで設置したマーカーのクリア方法は分からない。
Jupyterで実行中ならセルを再実行する。地図をhtmlファイルに保存した場合はファイルの再読み込み。これで地図が初期化される。



追加するマーカーのpopupを複数用意できる?

上の列では、追加されるマーカーのpopupは全て「追加したピン」になりますが、別のpopupでも差せないだろうか?

ClickForMarkerメソッドを複数書けばどうなる?

import folium

#ベースの地図作成
m = folium.Map(location=[36, 138], zoom_start=12)

# 中心座標の目印(赤)を追加 (特に必要なし)
folium.Marker([36, 138], 
              popup="地図の中心座標",
              icon=folium.Icon(color="red")
             ).add_to(m)

# 差し散らかすメソッド1を追加
folium.ClickForMarker(popup="追加メソッド1").add_to(m)

# 差し散らかすメソッド2を追加
folium.ClickForMarker(popup="追加メソッド2").add_to(m)

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

この場合、クリックして追加されるマーカーは全て「追加メソッド2」になる。
先に書いたClickForMarkerの追加メソッド1は無視される。よってこの方法は使えない。



FeatureGroup()LayerControl()を使って層ごとにClickForMarker()を設置すれば行けるんでは?と思い、試してみたがマーカーが設置されなかった。層の分離は趣旨が違うので別の機会に。
この件は放置。需要もなかろうw

おわりに

使い途としては、クリックしてマーカーを追加し、スクリーンショットで画像を保存するとかかな。
変更後の地図が残るでもないようですし、簡易の使用に限定かな。

以上です。