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

问题描述 投票:0回答:1

我希望能够保存闪亮/传单地图上的所有点击事件。这是一些示例代码:

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

enter image description here

如您所见,当我单击多边形时,我可以打印单击 ID(或整个单击事件)。很容易。但是,当我单击另一个多边形时,有关我第一个单击的多边形的所有信息都会丢失。我看到

autoDestroy = F
中有一个
observeEvent
的参数选项,但我不确定如何使用它来保存之前单击的多边形。有没有一种方法可以将我的所有点击/click$ids 存储在矢量或列表中?

r shiny r-leaflet
1个回答
11
投票

您可以使用

reactiveValues
存储点击次数来执行此操作。

在服务器功能顶部添加

RV<-reactiveValues(Clicks=list())

然后将

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

发生的情况是,每次单击时,

id
都会附加到存储在
list
中的点击的
RV$Clicks
中。这不一定是
list
,如果这对您更好,您可以将其设为
vector

© www.soinside.com 2019 - 2024. All rights reserved.