玩玩看地理空間資料!(4) — Folium互動式地圖

Interactive map with folium pacakge

Elena
7 min readOct 25, 2023

還沒看過玩玩看地理空間資料系列的,可以點擊這邊 👇:

玩玩看地理空間資料!(1) — 用Geopandas資料視覺化
玩玩看地理空間資料!(2) — 地理資料幾何運算
玩玩看地理空間資料!(3) — 地理空間資料連接與分組操作

除了介紹geopandas的基本操作,地圖視覺化還有一個很好用的套件 — Folium。

Folium 是一個強大地圖視覺化的工具,Folium 建立在leaflet.js及python生態系,可以在geopandas操作數據,並製作互動式地圖。

本篇將會分為四個部份進行介紹:

  1. 創建地圖
  2. MarkerCluster
  3. BubbleMap
  4. HeatMap

程式與資料已整理至Github

Let’s Start!

創建地圖

首先先來創建一張地圖,將中心坐標定位於國父紀念館,視覺化地圖資訊,地圖底圖的default 都是用OpenStreetMap來呈現。location 設定經緯度坐標,即可顯示地圖的中心位置。

OpenStreetMap:是一個開源、由全球志願者共同編輯的地圖資料庫,允許用戶即時參與、編輯、和分享地理資訊。

Taipei_map = folium.Map(location=[25.03949721583935, 121.55957402734612], tiles='openstreetmap', zoom_start=15)
Taipei_map
OpenStreetMap

Marker是地圖上標記特定地點的一種圖標。這些標記可以用來標識特定位置,並且在用戶與地圖互動時顯示相關訊息。

讀取Youbike2.0 的站點,將站點繪製至地圖上。location 參數指定了站點的經緯度坐標,popup 則為當用戶點擊標記時會顯示站點名稱。

# Read Youbike data
Youbike_data_df = pd.read_csv('./Youbike2.0.csv', encoding = "Big5", dtype = {'tot':int})
# Add Youbike 2.0 station to the map
for idx, row in Youbike_data_df.iterrows():
Marker(location = [row['lat'], row['lng']], popup = row['station'], icon=folium.Icon(color="green")).add_to(Taipei_map)
# display map
Taipei_map
Marker

MarkerCluster

Marker Cluster 的主要功能是將地圖上的相鄰標記點(Markers)群組在一起,當縮放地圖時,這些群組會根據地圖的縮放級別(Zoom Level)動態顯示或隱藏。當縮小地圖時,標記點的群組會變得更大;當放大地圖時,標記點的群組會分解為更小的群組或單個標記點。

本案例中將Youbike2.0 各站點加入至Markercluster中,這些標記點將根據它們的位置自動群組,並根據地圖的縮放級別顯示或隱藏。

marker_cluster = MarkerCluster()
Taipei_map_2 = folium.Map(location=[25.03949721583935, 121.55957402734612], tiles='openstreetmap', zoom_start=15)

for idx, row in Youbike_data_df.iterrows():
if not math.isnan(row['lng']) and not math.isnan(row['lat']):
marker_cluster.add_child(Marker([row['lat'], row['lng']]))
Taipei_map_2.add_child(marker_cluster)
MarkerCluster

BubbleMap

氣泡圖(Bubble Map)通常用來表示地理位置和相關數據,其中氣泡的大小通常表示數據的數量或者某一數值的大小。

使用Youbike2.0 的站點資料來創建Bubble Map。CircleMarker 用於創建氣泡,可以透過 location 參數指定氣泡的位置,popup 參數為當用戶點擊氣泡時顯示站點名稱,radius 參數指定氣泡的半徑(大小),我們將可租借腳踏車總量(tot)作為氣泡大小,color 參數指定氣泡的邊框顏色,fill_color 參數指定氣泡的填充顏色。

Taipei_map_3 = folium.Map(location=[25.03949721583935, 121.55957402734612], tiles='openstreetmap', zoom_start=15)
for row in range(0, len(Youbike_data_df)):
folium.CircleMarker(
location = [Youbike_data_df.iloc[row]['lat'], Youbike_data_df.iloc[row]['lng']],
popup = Youbike_data_df.iloc[row]['station'],
radius = float(Youbike_data_df.iloc[row]['tot']),
color = '#69b3a2',
fill = True,
fill_color = '#69b3a2').add_to(Taipei_map_3)
Taipei_map_3
BubbleMap

HeatMap

熱力圖(HeatMap)是一種透過顏色來表示數據密度的地圖視覺化方法。在熱力圖中,顏色深淺表示數據點的密集程度,通常用於顯示大量數據點在地理空間上的分布和密度。

HeatMap 用於創建熱力圖,data 是一個包含經緯度坐標的列表,每個坐標代表一個Youbike2.0 站點的位置。radius 表示熱力圖中每個點的半徑,顏色深淺表示數據密集程度,即Youbike2.0 站點的密集程度。

Taipei_map_4 = folium.Map(location=[25.03949721583935, 121.55957402734612], tiles='openstreetmap', zoom_start=15)
HeatMap(data = Youbike_data_df[['lat', 'lng']], radius = 30).add_to(Taipei_map_4)
Taipei_map_4
Heatmap

本篇透過Folium創建了互動式地圖並介紹地圖套件的用法~如果喜歡這篇文章或覺得有幫助,可以按下 👏 👏 👏支持或分享給更多人!

--

--

Elena

AI Engineer | Data | GIS | 金魚腦女子,希望可以透過文字記錄以喚起被遺忘的記憶。