由於我們介接API所下載的格式是JSON檔,因此必須利用jsonlite
套件解析該格式。在下載完資料後,檔案僅是以文字存取,但為進一步作地理資訊分析,我們必須轉換為地理資訊格式(如.shp),而sf
套件即是用來做地理分析的工具。另外做大數據分析和繪圖可分別下載dplyr
與ggplot2
套件。
install.packages("jsonlite")
install.packages("sf")
install.packages("dplyr")
install.packages("ggplot2")
library(jsonlite)
library(sf)
library(dplyr)
library(ggplot2)
以下是介接交通部GIS-T路網資料的程式碼,我們以台北市道路路網為例,詳細步驟依序為:
$top
參數為3(意指挑選資料庫前3筆資料),$format
參數為JSON,設定完成後點選Try it out!
,隨後網頁會回傳Request URL。完成複製後,我們必須將Request URL的網址稍作修正,剛剛我們只回傳了前3筆資料,所以網址中有$top=3
這個參數,但事實上我們希望能回傳所有資料,因此須把這個參數予以刪除,即: https://gist.motc.gov.tw/gist_api/V3/Map/Road/Network/City/Taipei?$top=3&$format=JSON
應更正為:
https://gist.motc.gov.tw/gist_api/V3/Map/Road/Network/City/Taipei?&$format=JSON
(之所以要這樣修正,是因為如果我們一開始沒有設定$top
這個參數,會使我們的網頁回傳時間過久,網頁甚至會當掉!)
修正完畢,我們就可以用jsonlite
套件內的fromJSON
來讀取這個檔案了!!
road=fromJSON("https://gist.motc.gov.tw/gist_api/V3/Map/Road/Network/City/Taipei?&$format=JSON")
不過讀取完後的資料只是文字檔,因此必須再利用sf
套件轉換成地理資訊格式。觀察road資料裡面可發現,其中有一個欄位是Geometry,它是利用WKT格式記錄地理資訊,我們可以利用st_as_sfc
這個函式來轉換。此外整個road資料也必須設定為地理資訊格式,須利用st_sf
轉換,其中應設定crs
為4326
,亦即WGS84經緯度系統。
road=mutate(road, Geometry=st_as_sfc(Geometry))%>%
st_sf(crs=4326)
最後我們再來畫張地圖,以確認路網是否完整匯入。
ggplot(road)+
geom_sf()