R/Shiny + leaflet의 클릭 좌표로지도에 다각형을 그립니다.

9818 단어 RleafletShiny
Draw Polygon 버튼을 클릭하면지도에 다각형을 그립니다. reactiveValues 의 초기화는 각 리스트에 NULL 를 넣어두면 된다.
library(shiny)
library(leaflet)

ui <- fluidPage(
  leafletOutput(outputId="map", height="800"),
  actionButton(inputId="polygon", label="Draw Polygon"),
  tableOutput(outputId="rv")
)

server <- function(input, output, session){
  output$map <- renderLeaflet(expr={
    leaflet() %>%
      addTiles() %>%
      setView(lng=135, lat=35, zoom=9)
  })

  rv <- reactiveValues(lat=NULL, lng=NULL)
  observeEvent(
    eventExpr=input$map_click,
    handlerExpr={
      rv$lat <- append(rv$lat, input$map_click$lat)
      rv$lng <- append(rv$lng, input$map_click$lng)

      X <- data.frame(lat=rv$lat, lng=rv$lng)
      leafletProxy(mapId="map", session=session, data=X) %>%
        addPolylines(lng=X$lng, lat=X$lat)
    }
  )

  output$rv <- renderTable(expr={
    data.frame(rv$lat, rv$lng)
  })

  observeEvent(eventExpr=input$polygon, handlerExpr={
    X <- data.frame(lat=rv$lat, lng=rv$lng)
    leafletProxy(mapId="map", session=session, data=X) %>%
      clearShapes() %>%
      addPolygons(lng=X$lng, lat=X$lat)
    rv$lat <- NULL
    rv$lng <- NULL
  })
}

shinyApp(ui, server)

좋은 웹페이지 즐겨찾기