我希望能够保存闪亮/传单地图上的所有点击事件。这是一些示例代码:
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
如您所见,当我单击多边形时,我可以打印单击 ID(或整个单击事件)。很容易。但是,当我单击另一个多边形时,有关我第一个单击的多边形的所有信息都会丢失。我看到
autoDestroy = F
中有一个 observeEvent
的参数选项,但我不确定如何使用它来保存之前单击的多边形。有没有一种方法可以将我的所有点击/click$ids 存储在矢量或列表中?
您可以使用
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
。