Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Click event on Leaflet tile map in Shiny

Tags:

r

shiny

r-leaflet

Is it possible to get the lat long from a click event in leaflet/shiny (in R) from the tile map? (i.e. NOT from any loaded markers, polygons etc). Just to show positional (lat/long) info i guess.

I thought maybe from this question it was possible but no luck.

ui <- bootstrapPage(
  tags$style(type = "text/css", "html, body {width:100%;height:100%}"),
  leafletOutput("map", width = "100%", height = "100%")
)

server <- function(input, output,session) {
  
  output$map <- renderLeaflet({
    leaflet() %>% 
      addProviderTiles("CartoDB.Positron")%>%
      setView(lng = -4, lat= 52.54, zoom = 7)
  })
  
  #Show popup on click
  observeEvent(input$map_marker_click, {
    click <- input$map_marker_click
    text<-paste("Lattitude ", click$lat, "Longtitude ", click$lng)
    
    proxy <- leafletProxy("map")
    proxy %>% clearPopups() %>%
      addPopups(click$lng, click$lat, text)
  })
  
}

runApp(shinyApp(ui, server), launch.browser = TRUE)

Ultimately i want to create a click marker for raster data (using the returned lat/long) in Leaflet & Shiny but this would be a good start (This question seems to have done something but I cannot recreate it at all).

like image 821
Sam Avatar asked Jan 31 '26 08:01

Sam


1 Answers

I have modified your code. Please check if this is what you wanted?

library(shiny)
library(leaflet)

ui <- bootstrapPage(
    tags$style(type = "text/css", "html, body {width:100%;height:100%}"),
    leafletOutput("map", width = "100%", height = "100%")
)

server <- function(input, output, session) {

    output$map <- renderLeaflet({
        leaflet() %>%
            addProviderTiles("CartoDB.Positron") %>%
            setView(lng = -4, lat = 52.54, zoom = 7) %>%
            addTiles(layerId = "map_click")
    })

    observeEvent(input$map_click, {
        click <- input$map_click
        lat <- click$lat
        lng <- click$lng

        proxy <- leafletProxy("map")
        proxy %>% clearPopups() %>%
            addPopups(lng, lat, paste("Latitude:", lat, "Longitude:", lng))

        print(paste("Click coordinates:", lat, lng))
    })
}

shinyApp(ui, server)

On the app, upon clicking anywhere on the map, you get something like this:

enter image description here

like image 96
Manoj Kumar Avatar answered Feb 01 '26 22:02

Manoj Kumar



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!