使用 leaflet 製作地理空間地圖

使用 shinydashboard 建立儀表板

Png Kee Seng

Researcher

leaflet 繪圖結構

  • 第一層需要 leaflet()
    • 類似 ggplot()
  • addTiles() 加入世界地圖
    • 在 ggplot 中類似 xy
  • %>% 新增圖層
    • 在 ggplot 中類似 +
library(leaflet)

m <- leaflet() %>%
addTiles()

空白的 leaflet 畫布。

含世界地圖的 leaflet 畫布。

使用 shinydashboard 建立儀表板

不同地圖供應商

  • 加入 addProviderTiles()
  • 供應商範例:
    • MtbMap:登山車地圖
    • Esri.NatGeoWorldMap:National Geo 提供
    • Stamen.Toner:黑白風格
m %>%
  addProviderTiles(providers$MtbMap)
m %>%
  addProviderTiles(providers$Esri.NatGeoWorldMap)
m %>% 
  addProviderTiles(providers$Stamen.Toner)

使用 MtbMap 供應商的 Leaflet。

使用 Nat Geo 供應商的 Leaflet。

使用 Stamen Toner 供應商的 Leaflet。

1 https://rstudio.github.io/leaflet/basemaps.html
使用 shinydashboard 建立儀表板

在 leaflet 中加入多邊形

  • addPolygon() 加入多邊形
    • 主要參數為 sf 物件

在 leaflet 中加入多邊形。

leaflet() %>% 
  addTiles() %>% 

addPolygons(data=london_poly,
col="red",
label=~Name)
使用 shinydashboard 建立儀表板

在 leaflet 中加入折線

  • 需要經度與緯度
    • 位於 $geometry[[1]]
  • addPolylines() 繪製折線
    • 經度與緯度分別對應第 1、2 欄
loop_geo <- london_loop$geometry[[1]]

capital_geo <- london_capital$geometry[[1]]
m2 <- leaflet() %>% 
  addTiles() %>% 
  addPolygons(data = london_poly, col="red", 
                  label=~Name) %>% 

addPolylines(loop_geo[,1], loop_geo[,2]) %>% addPolylines(capital_geo[,1], capital_geo[,2], color = "orange")
使用 shinydashboard 建立儀表板

在 leaflet 中加入標記

  • 可加入標記
    • addCircleMarkers():以圓點表示各點
    • addMarkers():以一般標記表示各點
m2 %>%
  addCircleMarkers(data = listings_geo,
                   label = ~name)
m2 %>%
  addMarkers(data = listings_geo,
                   label = ~name)

leaflet 中的圓形標記。

leaflet 中的一般標記。

使用 shinydashboard 建立儀表板

markerClusterOptions

  • 可加入 markerClusterOptions()
    • 顯示聚合後的數量

含群聚選項的標記。

m2 %>%
  addMarkers(data = listings_geo,

clusterOptions = markerClusterOptions())
使用 shinydashboard 建立儀表板

使用者選擇

  • 加入 addLayersControl() 讓使用者可操作
  • baseGroups:讓使用者切換不同地圖供應商
    • 需為各供應商圖磚加上標籤
    • baseGroups 設為包含這些標籤的向量
  • overlayGroups:讓使用者開關各圖層
    • 需為各圖層加上標籤
    • overlayGroups 設為包含這些標籤的向量
m_london <- leaflet(london_poly) %>% 

addTiles(group="Default") %>% addProviderTiles(providers$Stamen.Toner,
group = "Toner") %>%
addProviderTiles(providers$Esri.NatGeoWorldMap,
group = "Nat Geo") %>%
addPolygons(col="red", label=~Name,
group = "Ward") %>%
addPolylines(loop_geo[,1], loop_geo[,2],
group = "London loop") %>%
addPolylines(capital_geo[,1], capital_geo[,2], labelOptions = labelOptions(noHide = TRUE), color = "orange",
group = "Capital ring", ) %>%
addMarkers(data = listings_geo, clusterOptions = markerClusterOptions(),
group = "Listings") %>%
addLayersControl(
baseGroups = c("Default", "Toner", "Nat Geo"),
overlayGroups = c("Ward","Listings", "London loop", "Capital loop"))
使用 shinydashboard 建立儀表板

使用者選擇:呈現結果

含使用者選擇的 Leaflet 地圖。

使用 shinydashboard 建立儀表板

一起來練習吧!

使用 shinydashboard 建立儀表板

Preparing Video For Download...