如何在Leaflet Shiny地图中"保存"点击事件

Lau*_*ren 6 r click leaflet shiny

我想做的很简单.我希望能够在Shiny/Leaflet地图上保存所有点击事件.这是一些示例代码:

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 = rwa@data$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
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如您所见,我可以在单击多边形时打印单击ID(或整个单击事件).很容易.但是,当我单击另一个多边形时,有关我的第一个单击多边形的所有信息都将丢失.我看到有一个参数选项autoDestroy = FobserveEvent,但我不知道我怎么会用它来保存以前单击多边形.有没有办法可以存储我的所有点击/点击向量或列表中的$ ID?

Joh*_*aul 8

您可以使用此操作reactiveValues来存储点击次数.

在服务器顶部添加功能

RV<-reactiveValues(Clicks=list())
Run Code Online (Sandbox Code Playgroud)

然后将您更改observeEvent为:

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
Run Code Online (Sandbox Code Playgroud)

每次点击都会发生什么,id附加到list存储的点击中RV$Clicks.这不一定是list你可以做到的,vector如果这对你更好.

  • @Lauren - 看到这个解决方案回答了你原来的问题,现在你有了一个新问题,你应该发一个新问题 (2认同)