使用 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:国家地理
    • 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() 绘制
    • 经度和纬度对应第一、第二列
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 构建仪表板

Vamos praticar!

使用 shinydashboard 构建仪表板

Preparing Video For Download...