使用 Shiny 和 leaflet 记录多个输入标记点击

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

我正在开发一个应用程序,该应用程序显示基于站点的信息,您可以通过传单使用交互式地图进行选择,但我希望能够选择多个站点。现在,使用 input$map_marker_click 我仅根据上次单击的站点生成信息。我想根据用户选择的多个站点生成信息。

我尝试先声明一个空向量,然后使用 input$map_marker_click 添加到该向量,但每次我单击另一个标记时,我的向量都会再次设置为空,并且我会丢失上次标记单击的数据。

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

您需要使用反应式对象在应用程序服务器中存储持久数据。 存储地图上的简单点击的示例:

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)
© www.soinside.com 2019 - 2024. All rights reserved.