2016/2/23

在 R 中繪製地圖視覺化 leaflet:臺灣地區液化潛能製圖

在 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 ) 此時就可以將所有探測點給標示出來:

P1

當然,我們感興趣的重點不會是探測點的位置,而是實際液化狀況為何? 因為資料量高達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) ) 地圖上就會變成花花綠綠

最後,因為想要透過網路與網友們分享,我再加入了一些互動的功能 例如:游標指向的點會出現資料數值、可以針對區域做選擇

最終版本的視覺化結果如下: P2

程式碼提供如下:

可以發現若扣掉說明文字,整個具備基礎互動功能的地圖視覺化用了不到30行的程式碼… leaflet 的確在地圖視覺化解決方案上有蠻高的競爭優勢!