Search code examples
rr-leaflet

Get coordinates from a drawing object from an R leaflet map


I am building a shiny app where I would like to get the coordinates of a polygon from a leaflet map. Specifically, the shape is drawn using the Drawtoolbar from the leaflet.extras package. A simple example app is below.

My question is, how can I get the coordinates from the shape drawn on the map by the user?

library(shiny)
library(leaflet)
library(leaflet.extras)

# Define UI 
ui <- fluidPage(
  leafletOutput("mymap",height=800)
)

# Define server logic 
server <- function(input, output) {
  output$mymap <- renderLeaflet(
    leaflet() %>%
    addProviderTiles("Esri.OceanBasemap",group = "Ocean Basemap") %>%
    setView(lng = -166, lat = 58.0, zoom = 5) %>%
    addDrawToolbar(
      targetGroup='draw',
      editOptions = editToolbarOptions(selectedPathOptions = selectedPathOptions()))  %>%
  addLayersControl(overlayGroups = c('draw'), options =
                     layersControlOptions(collapsed=FALSE))
)

observeEvent(input$mymap_shape_click,{
   print(input$mymap_shape_click)
})

  observeEvent(input$mymap_click,{
    print(input$mymap_click)
  })
}

# Run the application
shinyApp(ui = ui, server = server)

Solution

  • You need to observe the _draw_new_feature function

    library(leaflet.extras)
    
    # Define UI 
    ui <- fluidPage(
      leafletOutput("mymap",height=800)
    )
    
    # Define server logic 
    server <- function(input, output) {
    
      output$mymap <- renderLeaflet(
        leaflet() %>%
          addProviderTiles("Esri.OceanBasemap",group = "Ocean Basemap") %>%
          setView(lng = -166, lat = 58.0, zoom = 5) %>%
          addDrawToolbar(
            targetGroup='draw',
            editOptions = editToolbarOptions(selectedPathOptions = selectedPathOptions()))  %>%
          addLayersControl(overlayGroups = c('draw'), options =
                             layersControlOptions(collapsed=FALSE))
      )
    
      observeEvent(input$mymap_draw_new_feature,{
        feature <- input$mymap_draw_new_feature
    
        print(feature)
    
      })
    
    }
    
    # Run the application
    shinyApp(ui = ui, server = server)