我正在开发一个应用程序,该应用程序显示基于站点的信息,您可以通过传单使用交互式地图进行选择,但我希望能够选择多个站点。现在,使用 input$map_marker_click 我仅根据上次单击的站点生成信息。我想根据用户选择的多个站点生成信息。
我尝试先声明一个空向量,然后使用 input$map_marker_click 添加到该向量,但每次我单击另一个标记时,我的向量都会再次设置为空,并且我会丢失上次标记单击的数据。
您需要使用反应式对象在应用程序服务器中存储持久数据。 存储地图上的简单点击的示例:
library(shiny)
library(leaflet)
library(DT)
ui <- fluidPage(
actionButton(inputId = "reset", label = "Reset"),
leafletOutput("map"),
dataTableOutput("table")
)
server <- function(input, output, session) {
# initialise reactive to store clicks
clicked <- reactiveValues(markers = setNames(data.frame(matrix(ncol = 3, nrow = 0)), c("id", "lat", "lng")))
output$map <- renderLeaflet({
leaflet() %>%
addTiles()
})
observeEvent(input$map_click,{
# append last click to previous clicks
clicked$markers <- rbind(
clicked$markers,
data.frame(id=nrow(clicked$markers)+1, lat = input$map_click$lat, lng = input$map_click$lng))
})
output$table <- renderDataTable({
clicked$markers
})
# reset clicked data
observeEvent(input$reset, {
clicked$markers <- setNames(data.frame(matrix(ncol = 3, nrow = 0)), c("id", "lat", "lng"))
})
}
shinyApp(ui, server)