R Leaflet (CRAN) - Wie registriere ich mich, wenn ich auf einen Marker klicke?

Verwendung derRStudio Leaflet-Paket in einer glänzenden App konnte ich alle Funktionen erreichen, die ich gesucht habe, außer ein Marker-Objekt abzuwählen, sobald es angeklickt wurde.

Insbesondere wird der Wert für $ map_click_id auf NULL gesetzt, bevor auf Markierungen geklickt wird. Beim Klicken auf einen Marker werden die Daten (ID, Lat, Lng, Nonce) für diesen Marker aktualisiert. Ich möchte die Map so einrichten, dass beim Klicken eines Benutzers auf einen Bereich der Map, der kein Marker ist, die Eingabe von $ map_click_id auf NULL zurückgesetzt wird, bis auf einen anderen Marker geklickt wird.

Ich habe eine Reihe von Lösungen ausprobiert, um dieses Problem zu umgehen, z. B. das Vergleichen der Klickzeiten für Markierungsklicks und Kartenklicks. Die Markierungsklickvariable wird jedoch jedes Mal aktualisiert, wenn auf die Karte geklickt wird ob es sich um einen Marker handelt oder nicht, das funktioniert also nicht.

Jede Hilfe hier wäre sehr dankbar! Unten sehen Sie ein sehr minimal reproduzierbares Beispiel. In diesem Fall möchte ich, dass die Markierungsinformationen beim Klicken auf die Konsole gedruckt werden und NULL an die Konsole zurückgegeben wird, wenn auf einen Nicht-Markierungsbereich der Karte geklickt wird.

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)

Dies scheint die gleiche Frage zu sein wie hier @ gefra aber da es keine Antwort darauf gab, dachte ich, ich würde es noch einmal versuchen.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage