在 R 中繪製地圖視覺化 leaflet:臺灣地區液化潛能製圖
今年春節前夕,發生了台南的大地震也讓人正視到台灣位於斷層帶的現實;
以下介紹,如何繪製 臺灣地區液化潛能製圖
首先你要有資料!
資料可以由網路上取得論文
本資料採用的是謝昇航 (2011)的論文 臺灣地區液化潛能製圖
下載位址: http://ir.lib.ncu.edu.tw:88/thesis/view_etd.asp?URN=976204004)
在附錄部份,作者提供了完整的資料表格;
一開始我使用的方式是:複製資料到 excel 後,錄製一段簡單的 VBA 將資料整理成一般資料表型式的 csv。後續有人提供可以用另外一套解決方案:tabula,可以直接捉取 pdf 資料輸出成 csv 格式,亦可以達成相同目的。
因為預設座標系統格式是 TWD97 格式,所以請專人協助後轉換為一般經緯度格式(即 EPSG 4326)。
對於資料有興趣的人,請直接整理好後的原始資料 https://drive.google.com/file/d/0B4523k7TnHsoRXYtNUcxUGh0T2s/view?usp=sharing
接下來就是正題了,若要繪製地圖 首先你要安裝 leaflet 套件,另外建議可以搭搭 dplyr 可以讓語法更為簡潔精練 然後試試以下的語法
leaflet( ) %>% addTiles( )
此時若你是使用 Rstudio 做為 IDE 工具,應該發現已經出現世界地圖了; 接下來我們要做的事情就是將我們的資料置入於地圖中
此時我們可以把我們的資料讀進來 例如:(實際路徑請自己依情況調整) dfmap <- read.delim("SheetR_MAP.csv",stringsAsFactors=FALSE)
然後把剛剛的語法調整如下: leaflet(df_map ) %>% addTiles( )
此時什麼事情都沒有發生
,因為我們還是沒有告訴 leaflet 要如何繪製圖形
好歹,我們要告訴 leaflet 各點位的經緯度吧?
m <- leaflet(df_map ) %>% addTiles( )
最基本的語法如下: m %>% addCircleMarkers( lat = ~ Lat , lng = ~ Lon ) 此時就可以將所有探測點給標示出來:
當然,我們感興趣的重點不會是探測點的位置,而是實際液化狀況為何? 因為資料量高達3000多點,若直接標示數值會顯得非常沒有意義; 此時可以依據論文作者所提示的數值間距,進行群組分類:
PL範圍: PL > 15 高度液化潛能
5<PL ≦15 中度液化潛能
0<PL ≦5輕度液化潛能
PL=0液化潛能極低
定義資料(顏色)群組:
pal <- colorBin(palette=c(green
,pink
,red
,purple
),domain=df_map$Pl,bins=c(0,5,10,15,70),pretty=TRUE,na.color=#808080
,alpha=F)
備註:於資料整理階段時已知最高值不會高於70
所以再將程式碼修改為:
m %>%
addCircleMarkers( lat = ~ Lat , lng = ~ Lon ,color=~pal(Pl) )
地圖上就會變成花花綠綠
最後,因為想要透過網路與網友們分享,我再加入了一些互動的功能 例如:游標指向的點會出現資料數值、可以針對區域做選擇
程式碼提供如下:
可以發現若扣掉說明文字,整個具備基礎互動功能的地圖視覺化用了不到30行的程式碼… leaflet 的確在地圖視覺化解決方案上有蠻高的競爭優勢!