使用folium對地理資訊視覺化
Hi,我是老鼠屎。最近在做地理資訊視覺化進度基本為龜速。但是探索的過程中發現了folium神器,在這裡進行一些整理。
Folium可以讓你用Python強大生態系統來處理資料,然後用Leaflet地圖來展示。Folium內建一些來自OpenStreetMap、MapQuest Open、MapQuest Open Aerial、Mapbox和Stamen的地圖元件(tilesets),並且支援用Mapbox或者Cloudmade API keys來自定義地圖元件。Folium支援GeoJSON和TopJSON疊加(overlays),繫結資料來創造一個分級統計圖(Choropleth map)。
1 安裝
關於folium的安裝,直接pip install即可。然而這裡需要注意的是,folium的安裝依賴於branca、jinja2、requests和six等庫。具體可以參考一下下圖。
2 使用
2.1 關於地圖的顯示
根據其官方demo,我們可以先建立一個非常基本的地圖看一下效果。
import folium
m = folium.Map(location=[45.5236, -122.6750])
location是地圖中心的位置。然而當我們想在jupyter notebook裡面展示地圖時,卻無法顯示。
這裡老鼠屎的解決方案是:先把地圖儲存為html的格式,再通過webbrowser將其開啟。
import folium
import webbrowser
m = folium.Map(location=[45.5236, -122.6750])
m.save("1.html")
webbrowser.open("1.html")
之後就可以在網頁上顯示地圖。
2.2 地圖型別的載入
預設的地圖型別是OpenStreetMap,當然,其他型別的地圖(Stamen Terrain,Stamen Toner,Mapbox Bright,Mapbox Control Room等)也是可以使用的。通過tiles引數即可進行選擇。
import folium import webbrowser m = folium.Map(location=[45.5236, -122.6750],tiles='Stamen Toner',zoom_start=13) m.save("1.html") webbrowser.open("1.html")
這裡加了zoom_start引數,表示地圖的初始縮放級別。載入後的地圖如下所示。
2.3 在地圖上新增標記
我們通過folium.Marker()方法,建立了一個簡單的標記小部件,並通過add_to()將定義好的部件施加於先前建立的Map物件m之上。
import folium
import webbrowser
m = folium.Map(location=[45.5236, -122.6750],zoom_start=13)
folium.Marker([45.488869,-122.571034], popup='<i>Mt. Hood Meadows</i>').add_to(m)
m.save("1.html")
webbrowser.open("1.html")
這裡,location:同folium.Map()中的同名引數,用於確定標記部件的經緯位置;popup:str型或folium.Popup()物件輸入,用於控制標記部件的具體樣式(folium內部自建了許多樣式),預設為None,即不顯示部件;icon:folium.Icon()物件,用於設定popup定義的部件的具體顏色、圖示內容等。效果如下圖所示。
2.4 在地圖上畫線
import folium
import webbrowser
m = folium.Map(location=[100.0, 0.0],
zoom_start=6,
control_scale=True)
gj = folium.GeoJson(data={ "type": "MultiLineString",
"coordinates": [
[ [100.0, 0.0], [101.0, 1.0] ],
[ [102.0, 2.0], [103.0, 3.0] ]
]
})
gj.add_to(m)
m.save("1.html")
webbrowser.open("1.html")
效果如下圖。