leaflet로 만드는 지리공간 지도

shinydashboard로 대시보드 만들기

Png Kee Seng

Researcher

leaflet 플롯 구조

  • 첫 레이어는 leaflet()입니다
    • ggplot()과 유사
  • addTiles()는 세계 지도를 추가합니다
    • ggplot의 x, y와 유사
  • 새 레이어는 %>%로 추가합니다
    • 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()로 그립니다
    • 경도, 위도는 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...