awesome - r leaflet weight
R Leaflet(CRAN)-cómo registrarse haciendo clic en un marcador (1)
Utilizando el paquete de RStudio Leaflet en una brillante aplicación, he podido lograr toda la funcionalidad que he buscado, excepto anular la selección de un objeto marcador una vez que se ha hecho clic en él.
Más específicamente, el valor input $ map_click_id se establece en NULL antes de hacer clic en cualquier marcador. Al hacer clic en un marcador, se actualiza con los datos (ID, lat, lng, nonce) para ese marcador. Me gustaría configurar el mapa para que cuando un usuario haga clic en cualquier área del mapa que no sea un marcador, la entrada $ map_click_id se restablezca a NULL hasta que se haga clic en otro marcador.
He intentado varias soluciones para esto, como comparar los clics de marcador y clics de mapa, pero la variable de clic de marcador, una vez configurada en un valor no NULO, se actualiza cada vez que se hace clic en el mapa, independientemente de si está en un marcador o no, entonces esto no funciona.
¡Cualquier ayuda aquí sería muy apreciada! A continuación se muestra un ejemplo reproducible muy mínimo. En este caso, me gustaría que la información del marcador se imprima en la consola cuando se hace clic en ella, y que se devuelva NULL a la consola cuando se hace clic en cualquier área que no sea marcador del mapa.
library(leaflet)
library(shiny)
# set basic ui
ui <- fluidPage(
leafletOutput("map")
)
server <- shinyServer(function(input, output) {
# produce the basic leaflet map with single marker
output$map <- renderLeaflet(
leaflet() %>%
addProviderTiles("CartoDB.Positron") %>%
addCircleMarkers(lat = 54.406486, lng = -2.925284)
)
# observe the marker click info and print to console when it is changed.
observeEvent(input$map_marker_click,
print(input$map_marker_click)
)
})
shinyApp(ui, server)
Esta parece ser la misma pregunta que aquí, pero como no hubo respuesta para esto, pensé que volvería a intentarlo.
Puede usar un valor reactiveValues
para almacenar el marcador en el que se hizo clic y restablecerlo siempre que el usuario haga clic en el fondo del mapa:
server <- shinyServer(function(input, output) {
data <- reactiveValues(clickedMarker=NULL)
# produce the basic leaflet map with single marker
output$map <- renderLeaflet(
leaflet() %>%
addProviderTiles("CartoDB.Positron") %>%
addCircleMarkers(lat = 54.406486, lng = -2.925284)
)
# observe the marker click info and print to console when it is changed.
observeEvent(input$map_marker_click,{
data$clickedMarker <- input$map_marker_click
print(data$clickedMarker)}
)
observeEvent(input$map_click,{
data$clickedMarker <- NULL
print(data$clickedMarker)})
})