第4章 地図とマーカー
1 地図の表示
pythonで地図を表示するライブラリとしてはfoliumがあります。 まずは、地図を表示してみましょう。今回は熊本市役所を中心とした地図を表示したいと思います。
なお、foliumで緯度経度を指定する場合、緯度、経度の順番で記述する必要があります。map1.ipynbに以下を記述します。
import folium
map = folium.Map(location=[32.8032, 130.7080])
map
folium.Map の引数locationに地図の中心位置を指定します。今回は熊本市役所の緯度経度を指定しています。
zoom_startにズームレベル(0~18、大きい方が拡大)を設定できます。
import folium
map = folium.Map(location=[32.8032, 130.7080], zoom_start = 15)
map
なお、表示した地図をwebサイトなどで使用したい場合、HTMLで保存できます。
import folium
map = folium.Map(location=[32.8032, 130.7080], zoom_start = 15)
map.save('map.html')
2 マーカー
地図上の指定の場所にマーカーを設置できます。folium.Markerで場所を指定し、add_toで地図を指定します。
map = folium.Map(location=[32.8032, 130.7080], zoom_start = 15)
# マーカーの追加
marker = folium.Marker([32.8032, 130.7080])
marker.add_to(map)
map
Markerの引数popupにクリックしたときに表示する文字を設定できます。
map = folium.Map(location=[32.8032, 130.7080], zoom_start = 15)
# マーカーの追加
marker = folium.Marker([32.8032, 130.7080], popup="熊本市役所")
marker.add_to(map)
map
popupにはHTMLが使用可能です。横幅を指定し、文字が横書きになるようにしてみます。
map = folium.Map(location=[32.8032, 130.7080], zoom_start = 15)
marker = folium.Marker([32.8032, 130.7080], popup='<div style="width:5em">熊本市役所</div>')
marker.add_to(map)
map
アイコンを変更するには、folium.Iconで色(color)とアイコンの種類(icon)を指定します。
marker2 = folium.Marker([32.80237,130.711038], popup="鶴屋", icon=folium.Icon(color="red",icon="home"))
marker2.add_to(map)
map
iconの種類は絵文字での指定です。 以下の「glyphicon glyphicon-XXX」のXXX部分を指定します。
例:glyphicon glyphicon-plus → icon="plus"
https://getbootstrap.com/docs/3.3/components/
問題
map2.ipynbで、熊本ソフトウェアにマーカーを表示する。クリックしたら「熊本ソフトウェア」と表示する。アイコンは星のマークを表示する。
3 データからマーカー表示
熊本県オープンデータより「熊本県「くまもとフリーWi-Fi」設置箇所一覧」を取得します。
これをDataFrameに読み込みます。文字コードがシフトJISでWindows独自の文字も使用しているため、cp932を指定します。
import pandas as pd
df = pd.read_csv("5_wificsv2024.10.10.csv", encoding="cp932")
df.head()
緯度経度のデータが無いものを削除しておきます。
df = df.dropna(subset=["緯度","経度"])
df.head()
これを一行ずつ緯度と経度と名称を取得し、マーカーを設置します。
import folium
map = folium.Map(location=[32.8032, 130.7080], zoom_start = 15)
for index, row in df.iterrows():
lat = row['緯度']
lng = row['経度']
popup = row['名称']
marker = folium.Marker([lat, lng], popup=popup)
marker.add_to(map)
map
4 まとめてマーカー表示
なお、foliumのプラグインであるMarkerClusterを使うと、たくさんあるマーカーを地域毎にまとめて表示できます。
import folium
from folium.plugins import MarkerCluster
map = folium.Map(location=[32.8032, 130.7080], zoom_start = 15)
marker_cluster = MarkerCluster()
for index, row in df.iterrows():
lat = row['緯度']
lng = row['経度']
popup = row['名称']
marker = folium.Marker([lat, lng], popup=popup)
marker.add_to(marker_cluster)
marker_cluster.add_to(map)
map
5 ヒートマップ
foliumのプラグインであるHeatMapを使うと、ある地点から得点の範囲の円を描くことが出来ます。円が重なる場合には色が変わります。HeatMap(データフレーム, radius=半径, blur=透過度) で指定します。
import folium
from folium.plugins import HeatMap
map = folium.Map(location=[32.8032, 130.7080], zoom_start = 15)
data = df[['緯度','経度']].values.tolist()
HeatMap(data, radius=20, blur=3).add_to(map)
map