Bản đồ địa lý với leaflet

Xây dựng Dashboard với shinydashboard

Png Kee Seng

Researcher

Cấu trúc biểu đồ leaflet

  • Lớp đầu tiên là leaflet()
    • Tương tự ggplot()
  • addTiles() thêm bản đồ thế giới
    • Như x, y trong ggplot
  • Thêm lớp mới bằng %>%
    • Như + trong ggplot
library(leaflet)

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

Canvas leaflet trống.

Canvas leaflet với bản đồ thế giới.

Xây dựng Dashboard với shinydashboard

Các nhà cung cấp bản đồ khác nhau

  • Thêm addProviderTiles()
  • Một vài nhà cung cấp ví dụ
    • MtbMap: Đạp xe leo núi
    • Esri.NatGeoWorldMap: Của National Geo
    • Stamen.Toner: Đen trắng
m %>%
  addProviderTiles(providers$MtbMap)
m %>%
  addProviderTiles(providers$Esri.NatGeoWorldMap)
m %>% 
  addProviderTiles(providers$Stamen.Toner)

Leaflet với nhà cung cấp MtbMap.

Leaflet với nhà cung cấp nat geo.

Leaflet với nhà cung cấp stamen toner.

1 https://rstudio.github.io/leaflet/basemaps.html
Xây dựng Dashboard với shinydashboard

Thêm đa giác trong leaflet

  • Thêm đa giác bằng addPolygon()
    • Tham số chính là một đối tượng sf

Thêm đa giác trong leaflet.

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

addPolygons(data=london_poly,
col="red",
label=~Name)
Xây dựng Dashboard với shinydashboard

Thêm polyline trong leaflet

  • Cần kinh độ và vĩ độ
    • Nằm trong $geometry[[1]]
  • Vẽ polyline bằng addPolylines()
    • Kinh độ, vĩ độ lần lượt ở cột 1 và 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")
Xây dựng Dashboard với shinydashboard

Thêm marker trong leaflet

  • Có thể thêm marker
    • addCircleMarkers(): mỗi điểm là một vòng tròn
    • addMarkers(): mỗi điểm là một marker thường
m2 %>%
  addCircleMarkers(data = listings_geo,
                   label = ~name)
m2 %>%
  addMarkers(data = listings_geo,
                   label = ~name)

Marker dạng vòng tròn trong leaflet.

Marker thường trong leaflet.

Xây dựng Dashboard với shinydashboard

markerClusterOptions

  • Có thể thêm markerClusterOptions()
    • Hiển thị giá trị gộp

Marker với tùy chọn cụm.

m2 %>%
  addMarkers(data = listings_geo,

clusterOptions = markerClusterOptions())
Xây dựng Dashboard với shinydashboard

Lựa chọn của người dùng

  • Thêm lớp addLayersControl() để cho phép người dùng chọn
  • baseGroups: Cho phép chuyển đổi giữa các nhà cung cấp bản đồ
    • Cần gán nhãn cho từng tile nhà cung cấp
    • Đặt baseGroups là vector chứa các nhãn này
  • overlayGroups: Cho phép bật/tắt các lớp
    • Cần gán nhãn cho từng lớp
    • Đặt overlayGroups là vector chứa các nhãn này
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"))
Xây dựng Dashboard với shinydashboard

Lựa chọn người dùng: kết quả

Bản đồ leaflet với lựa chọn người dùng.

Xây dựng Dashboard với shinydashboard

Ayo berlatih!

Xây dựng Dashboard với shinydashboard

Preparing Video For Download...