2016-12-12 6 views
4

Was ich tun möchte, ist ziemlich einfach. Ich möchte alle Klickereignisse auf einer Shiny/Leaflet-Karte speichern können. Hier einige Beispiel-Code:Wie "speichern" klicken Ereignisse in Leaflet Shiny Karte

library(raster) 
library(shiny) 
library(leaflet) 

#load shapefile 
rwa <- getData("GADM", country = "RWA", level = 1) 

shinyApp(
    ui = fluidPage(
    leafletOutput("map") 
), 

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

    #initial map output 
    output$map <- renderLeaflet({ 
     leaflet() %>% 
     addTiles() %>% 
     addPolygons(data = rwa, 
        fillColor = "white", 
        fillOpacity = 1, 
        color = "black", 
        stroke = T, 
        weight = 1, 
        layerId = [email protected]$OBJECTID, 
        group = "regions") 
    }) #END RENDER LEAFLET 

    observeEvent(input$map_shape_click, { 

     #create object for clicked polygon 
     click <- input$map_shape_click 

     print(click$id) 

    }) #END OBSERVE EVENT 
    }) #END SHINYAPP 

enter image description here

Wie Sie sehen können, kann ich die Klick-IDs drucken (oder ganze Click-Ereignis), wenn ich auf einem Polygon klicken. Leicht genug. In dem Moment, in dem ich auf ein anderes Polygon klicke, gehen alle Informationen über mein erstes angeklicktes Polygon verloren. Ich sehe, dass es eine Argumentoption von autoDestroy = F in observeEvent gibt, aber ich bin mir nicht sicher, wie ich das verwenden würde, um vorher angeklickte Polygone zu speichern. Gibt es eine Möglichkeit, ALLE meine Klicks/Klick $ IDs in einem Vektor oder einer Liste zu speichern?

Antwort

5

Sie können dies unter Verwendung von reactiveValues zum Speichern der Klicks tun.

Ganz oben Ihre Funktion Server

RV<-reactiveValues(Clicks=list()) 

hinzufügen und dann observeEvent ändern:

observeEvent(input$map_shape_click, { 

     #create object for clicked polygon 
     click <- input$map_shape_click 
     RV$Clicks<-c(RV$Clicks,click$id) 
     print(RV$Clicks) 

}) #END OBSERVE EVENT 

Was jedes Mal, wenn geschieht klicken, wird die id zum list der beigefügten Klicks gespeichert in RV$Clicks. Dies muss kein list sein Sie könnten es zu einem vector machen, wenn das für Sie besser ist.

+0

Danke, das macht den Trick! Ich habe den Überblick über Beobachtungsereignisse bekommen, aber ich kann Reaktive noch nicht erfassen. Immer noch ziemlich neu in Shiny. – Lauren

+1

@Lauren Erwähnenswert, dass 'reactiveValues' sich von' reactive() '-Funktionen unterscheiden. Beide sind sehr nützlich in ihrem eigenen – SymbolixAU

+0

@ John Paul, @SymbolixAU, wenn ich mein 'observeEvent' ändere, um nur' zu beobachten', mein zuerst-geklicktes Element wiederholt (scheinbar) unendlich. Irgendeine Einsicht, warum dies passiert/wie man es repariert? Oder sollte ich eine andere Frage stellen? – Lauren

Verwandte Themen