แผนที่เชิงพื้นที่ด้วย leaflet

การสร้างแดชบอร์ดด้วย shinydashboard

Png Kee Seng

Researcher

โครงสร้างของ leaflet plot

  • เลเยอร์แรกที่ต้องมีคือ leaflet()
    • เหมือน ggplot()
  • addTiles() เพิ่มแผนที่โลก
    • เหมือน x, y ใน ggplot
  • เพิ่มเลเยอร์ใหม่โดยใช้ %>%
    • เหมือน + ใน ggplot
library(leaflet)

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

แคนวาส leaflet เปล่า

แคนวาส leaflet พร้อมแผนที่โลก

การสร้างแดชบอร์ดด้วย shinydashboard

Map provider ที่หลากหลาย

  • เพิ่ม addProviderTiles()
  • ตัวอย่าง provider
    • MtbMap: จักรยานเสือภูเขา
    • Esri.NatGeoWorldMap: โดย National Geo
    • Stamen.Toner: ขาวดำ
m %>%
  addProviderTiles(providers$MtbMap)
m %>%
  addProviderTiles(providers$Esri.NatGeoWorldMap)
m %>% 
  addProviderTiles(providers$Stamen.Toner)

Leaflet ด้วย MtbMap provider

Leaflet ด้วย nat geo provider

Leaflet ด้วย stamen toner provider

1 https://rstudio.github.io/leaflet/basemaps.html
การสร้างแดชบอร์ดด้วย shinydashboard

การเพิ่ม polygon ใน leaflet

  • เพิ่ม polygon ด้วย addPolygon()
    • อาร์กิวเมนต์หลักที่ต้องใช้คือออบเจกต์ sf

การเพิ่ม polygon ใน leaflet

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

addPolygons(data=london_poly,
col="red",
label=~Name)
การสร้างแดชบอร์ดด้วย shinydashboard

การเพิ่ม polyline ใน leaflet

  • ต้องใช้ค่าลองจิจูดและละติจูด
    • เก็บอยู่ใน $geometry[[1]]
  • วาด polyline ด้วย 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

การเพิ่ม marker ใน leaflet

  • เพิ่ม marker ได้
    • addCircleMarkers(): แสดงแต่ละจุดเป็นวงกลม
    • addMarkers(): แสดงแต่ละจุดเป็น marker ปกติ
m2 %>%
  addCircleMarkers(data = listings_geo,
                   label = ~name)
m2 %>%
  addMarkers(data = listings_geo,
                   label = ~name)

Circle marker ใน leaflet

Regular marker ใน leaflet

การสร้างแดชบอร์ดด้วย shinydashboard

markerClusterOptions

  • เพิ่ม markerClusterOptions() ได้
    • แสดงค่ารวมของจุดข้อมูล

Marker พร้อม cluster options

m2 %>%
  addMarkers(data = listings_geo,

clusterOptions = markerClusterOptions())
การสร้างแดชบอร์ดด้วย shinydashboard

การเลือกของผู้ใช้

  • เพิ่มเลเยอร์ addLayersControl() เพื่อรับอินพุตจากผู้ใช้
  • baseGroups: ให้ผู้ใช้สลับระหว่าง map provider
    • ต้องตั้งชื่อ provider tile แต่ละอัน
    • กำหนด baseGroups เป็น vector ที่มีชื่อเหล่านั้น
  • overlayGroups: ให้ผู้ใช้เปิด/ปิดเลเยอร์
    • ต้องตั้งชื่อแต่ละเลเยอร์
    • กำหนด overlayGroups เป็น vector ที่มีชื่อเหล่านั้น
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...