Shiny+leaflet:如何让 addMarkers 依赖于用户输入

Shiny+leaflet: How to let addMarkers depend on user input

我想让用户选择是否在 Leaflet 地图上绘制某些标记。这取决于 input$competitorchoice,它可以是 TRUE 或 FALSE。当此值为 TRUE 时,我希望仅 绘制某些标记。我会在这个 if 中使用 if 子句和 addMarkers,但这不起作用...

示例代码如下:

output$mymap<-renderLeaflet({
  leaflet(data=get(paste(input$type,".locations",sep = ""))[[input$stations]])  %>%
  addMarkers(~lon, ~lat,data=terminals,icon=termi,popup = ~name_terminal))

此后,我想添加一个条件 addMarkers.It 仅在 input$competitorchoice 为 TRUE 时调用...

由于您没有提供可重现的示例,我将其基于 Leaflet 教程数据集。一种方法是有一个反应性的复选框输入。这是我的尝试,其中可以通过单击框来标记 enabled/disabled。

library(shiny)
library(leaflet)

ui <- fluidPage(
  leafletOutput("mymap"),
  p(),
  # Add checkboxInput() to turn markers on and off:
  checkboxInput("markers", "Turn On Markers", FALSE)
)

server <- function(input, output, session) {
  # Some random data:
  dat <- data.frame(long = rnorm(40) * 2 + 13, lat = rnorm(40) + 48)

  # observe() looks for changes in input$markers and adds/removes
  # markers as necessary:
  observe({
    proxy <- leafletProxy("mymap", data = dat)
    proxy %>% clearMarkers()
    if (input$markers) {
      proxy %>% addMarkers()
    }
  })

  # Render basic map with any element that will not change.
  # Note: you can change the starting zoom/positioning/et cetera
  # as appropriate:
  output$mymap <- renderLeaflet({
    leaflet(dat) %>% addProviderTiles("Stamen.TonerLite", options = providerTileOptions(noWrap = TRUE))
  })
}

shinyApp(ui, server)