コンテンツにスキップ

第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