マップで描画する 2


以前の投稿でfolium を用いることでマップを用いた描画ができることをまとめた.

今回はそれをさらに発展させ,ヒートマップ形式でまとめてみた.(設定数字は仮値)

サンプルコードを残す.

# ライブラリのインポート
import folium
import pandas as pd
from branca.colormap import linear
from folium.plugins import HeatMap

# サンプルデータの作成(都市名、緯度・経度、人口)
data = {
    'City': ['東京', '大阪', '名古屋', '福岡', '札幌'],
    'Latitude': [35.6895, 34.6937, 35.1815, 33.5902, 43.0618],
    'Longitude': [139.6917, 135.5023, 136.9066, 130.4017, 141.3545],
    'Population': [13929286, 2691186, 2295666, 1620585, 1952356]
}
df = pd.DataFrame(data)

# 地図の作成(レイヤーコントロールを有効にするためにtilesをNoneに設定)
m = folium.Map(location=[36.2048, 138.2529], zoom_start=5, tiles=None)

# ベースマップの追加
folium.TileLayer('OpenStreetMap', name='ベースマップ', control=True).add_to(m)
folium.TileLayer(
    'Stamen Terrain',
    name='地形図',
    control=True,
    attr='Map tiles by Stamen Design, CC BY 3.0 — Map data © OpenStreetMap'
).add_to(m)

# カラーマップの作成
colormap = linear.YlOrRd_09.scale(df['Population'].min(), df['Population'].max())
colormap.caption = '人口規模'

# マーカーレイヤーの作成
marker_layer = folium.FeatureGroup(name='都市マーカー')
for idx, row in df.iterrows():
    folium.CircleMarker(
        location=[row['Latitude'], row['Longitude']],
        radius=10,
        popup=f"{row['City']} (人口: {row['Population']})",
        color=colormap(row['Population']),
        fill=True,
        fill_color=colormap(row['Population']),
        fill_opacity=0.7
    ).add_to(marker_layer)
marker_layer.add_to(m)

# カラーマップを地図に追加
colormap.add_to(m)

# ヒートマップの追加(レイヤーとして追加)
heatmap_layer = folium.FeatureGroup(name='ヒートマップ')
HeatMap(
    data=df[['Latitude', 'Longitude']].values.tolist(),
    radius=25,    # ヒートマップの影響範囲を調整
    blur=15,      # ヒートマップのぼかし具合を調整
    max_zoom=5
).add_to(heatmap_layer)
heatmap_layer.add_to(m)

# レイヤーコントロールの追加
folium.LayerControl().add_to(m)

# 地図の保存
m.save('combined_map.html')

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です