Folium 這套件看似簡單易用, 但其 API 文件內容非常豐富, 還有非常多功能有待探究. 本篇主要是我閱讀日本人小久保奈都彌寫的 "Python 資料可視化攻略 (碁峰 2021)" 第六章關於 Folium 用法之測試筆記 :
Source : 博客來
本系列之前的文章參考 :
# Python 學習筆記 : 用 Folium 套件繪製地圖 (二)
class folium.vector_layers.PolyLine(locations, popup=None, tooltip=None, **kwargs)
folium.PolyLine(locations=[latlng1, latlng2], popup=popup).add_to(map)
import folium
import geocoder
由於 Folium 繪製的是網頁地圖, 故以下測試需在 Colab 或 JupyterLab 上進行.
1. 用 folium.PolyLine() 畫直線 :
在地圖中繪製直線通常是用來標示地圖中兩地的直線距離, 或顯示兩地之間的資訊流動 (人, 事, 物等). Folium 套件中用來繪製直線是使用 PolyLine 物件, 其類別之 API 如下 :
參考 :
只要呼叫其建構函式 folium.PolyLine() 並傳入如下參數會建立 PolyLine 物件 :
- locations : 直線兩端座標經緯度之兩層串列或元組
- popup : 點擊直線會跳出的文字
- color : 線條顏色, 可用顏色名稱字串如 'red' 或色碼如 '#1e227d'
然後呼叫其 add_to() 方法將自己添加到 Map 物件上即可 :
以繪製連接台北 101 與高雄 85 大樓的直線為例 :
import geocoder
loc1="高雄85大樓"
loc2="台北101"
latlng1=geocoder.osm(loc1).latlng
latlng2=geocoder.osm(loc2).latlng
print(latlng1)
print(latlng2)
map=folium.Map(location=geocoder.osm('台灣').latlng, zoom_start=7.5)
folium.Marker(location=latlng1, popup=loc1).add_to(map)
folium.Marker(location=latlng2, popup=loc2).add_to(map)
popup=f"{loc1}-{loc2}直線距離"
folium.PolyLine(locations=[latlng1, latlng2], popup=popup).add_to(map)
map
此例先用 geocoder 查詢台北 101 與高雄 85 大樓之座標經緯度, 用 folium.Marker() 在此兩座標上打標記, 然後用 folium.PolyLine() 在此兩座標間畫一條直線, 結果如下 :
點擊此直線會彈出說明文字, 但可惜是直的.
2. 用 folium.Circle() 畫圓 :
呼叫 folium.Circle() 可以在地圖上畫圓, 這是 Circle 類別的建構函式 :
class folium.vector_layers.Circle(location=None, radius=50, popup=None, tooltip=None, **kwargs)
參考 :
主要參數如下 :
- location : 圓心座標經緯度
- radius : 半徑 (單位為公尺, 預設為 50m)
- color : 圓線顏色, 可用顏色名稱字串如 'red' 或色碼如 '#1e227d'
- fill_color : 圓內填充顏色, 可用顏色名稱字串如 'red' 或色碼如 '#1e227d'
- popup : 點擊圓會跳出的文字
呼叫 folium.Circle() 建立 Circle 物件後呼叫其 add_to() 方法將自己添加到 Map 物件上即可 :
以繪製核三廠萬一發生核災的 80 公里避難圈為例, 程式碼如下 :
import geocoder
place="核三廠"
latlng=geocoder.osm(place).latlng
map=folium.Map(location=geocoder.osm(place).latlng, zoom_start=8)
folium.Marker(location=latlng).add_to(map)
folium.Circle(location=latlng, radius=80000, color='red', file_color='yellow').add_to(map)
map
結果如下 :
可見 80 公里的避難圈幾乎包括整個屏東縣, 且已經到達小港機場了. 其實就日本福島核災經驗, 在 100 公里外還偵測到危險的輻射物.
參考 :
沒有留言:
張貼留言