[Python] 以folium製作臺灣百岳資訊地圖
Folium可以將Python資料利用Leaflet.js呈現,主要用於視覺化地理資訊,而Leaflet.js是開源的JS數據庫,提供大多數常用的地圖繪製功能,簡單又好用。
首先要來個前置作業,先使用爬蟲從中華民國山岳協會取得了臺灣百岳的座標與標高。
但山岳協會提供的是二分帶T67的座標 ,所以還需pyproj這個轉換座標系統的interface將它轉換成經緯度。
將預先有的資料以pandas讀入。
(這裡指定讀取編碼使用utf-8,其實是try出來的,一開始遇上亂碼,還沒找到發生原因。)
建立一個map物件,將中心訂在經度23.770876、緯度120.934757的地方,zoom_start則是起始的地圖大小,tiles是地圖的樣式。 有10種樣式可以選擇,default為Open street map,我只是挑一個我喜歡的使用。
為剛讀入資料檔,一筆一筆的標記在map上,每一個標記就是一個marker,marker也提供了不同樣式。 我想要做成三角型的樣子,所以用了RegularPolygonMarker,再設定邊數為3就行了。
fill_color是該標記的顏色,我直接笨笨的給了一列顏色,再由高度所算出來的index去取得它應該要填入的顏色。 在標記最後面加上.add_to(mount_map),把標記加到map上。
若想要讓popup資訊好看一點,可以用folium.IFrame加入html碼。
最後,將map存至html。
Taiwan Datums
Folium Docs
大地座標系統漫談-上河文化
proj4 Docs
首先要來個前置作業,先使用爬蟲從中華民國山岳協會取得了臺灣百岳的座標與標高。
import urllib from bs4 import BeautifulSoup request = urllib.request.urlopen('http://www.mountaineering.org.tw/tw/index.php/2015-09-13-14-48-49/2015-09-13-15-07-13').read() soup = BeautifulSoup(request, "html.parser")
但山岳協會提供的是二分帶T67的座標 ,所以還需pyproj這個轉換座標系統的interface將它轉換成經緯度。
from pyproj import Proj myProj = Proj("+proj=tmerc +ellps=aust_SA +lon_0=121 +x_0=250000 +k=0.9999 +units=m +no_defs") longt, lat = myProj(x, y, inverse=True)
將預先有的資料以pandas讀入。
import pandas data = pandas.read_csv("mount-data.txt", encoding="utf-8")
(這裡指定讀取編碼使用utf-8,其實是try出來的,一開始遇上亂碼,還沒找到發生原因。)
建立一個map物件,將中心訂在經度23.770876、緯度120.934757的地方,zoom_start則是起始的地圖大小,tiles是地圖的樣式。 有10種樣式可以選擇,default為Open street map,我只是挑一個我喜歡的使用。
import folium mount_map = folium.Map([23.770876, 120.934757], zoom_start=8, tiles='Cartodb Positron')
為剛讀入資料檔,一筆一筆的標記在map上,每一個標記就是一個marker,marker也提供了不同樣式。 我想要做成三角型的樣子,所以用了RegularPolygonMarker,再設定邊數為3就行了。
folium.RegularPolygonMarker([lat, lon], popup=popup, number_of_sides=3, rotation=30, radius=15 , color='#deebf7', fill_color=color[colorPick], fill_opacity=0.5).add_to(mount_map)
fill_color是該標記的顏色,我直接笨笨的給了一列顏色,再由高度所算出來的index去取得它應該要填入的顏色。 在標記最後面加上.add_to(mount_map),把標記加到map上。
若想要讓popup資訊好看一點,可以用folium.IFrame加入html碼。
iframe = folium.IFrame(html=html, width=90, height=80) popup = folium.Popup(iframe, max_width=200)
最後,將map存至html。
mount_map.save('mount-map-TW.html')
References:
Taiwan Datums
Folium Docs
大地座標系統漫談-上河文化
proj4 Docs
留言
張貼留言