使用复选框Leaflet / R添加标记

时间:2018-12-20 09:32:15

标签: r shiny leaflet

如果用户勾选了一个复选框,我正在尝试在交互式传单地图上添加标记。但是,我无法在renderLeaflet函数中使用复选框外观,但是可以在renderPlot函数中使用

有效的我的代码如下:

ui <- fluidPage(

  sidebarLayout(
    sidebarPanel(
    checkboxInput('check1','Show Counties', value = TRUE)),

  mainPanel(
    # I'm aware that this should be changed to leaftletOutput, when used 
    # with the in the second code snippet below
    plotOutput("mymap")

  ),

  position = 'right'

  )

)

server <- function(input, output) {

  output$mymap <- renderPlot({

    if (input$check1){
      hist(rnorm(10))
    } else {
      hist(rnorm(100))
    }

  })

 }

shinyApp(ui = ui, server = server)

相同的逻辑在Leaflet中不起作用,我非常感谢您提供有关如何修改以下代码的信息。我知道您无权访问 USstates coor 这两个变量,但是我希望有人可以指出错误,可能是语法错误。输出函数如下所示;

output$mymap <- renderLeaflet({

  if (input$check1 == TRUE){
    leaflet(USstates) %>%
      addTiles() %>%
      addPolygons(color = 'navy',
                  opacity = 1.0,
                  weight = 1) %>%
      addMarkers(lng = coor[,1],lat = coor[,2])
  } else {
    leaflet(USstates) %>%
      addTiles() %>%
      addPolygons(color = 'navy',
                  opacity = 1.0,
                  weight = 1)
  }

})

1 个答案:

答案 0 :(得分:0)

创建此帖子后,我立即提出了一个原因解决方案。解决方案是将传单代码包装在一个反应​​函数中,然后在renderLeaflet函数中调用该代码。解决方法如下:

server <- function(input, output) {
  display <- reactive({
    if (input$check1){
      leaflet(USstates) %>%
        addTiles() %>%
        addPolygons(color = 'navy',
                    opacity = 1.0,
                    weight = 1) %>%
        addMarkers(lng = coor[,1],lat = coor[,2])
    } else {
      leaflet(USstates) %>%
        addTiles() %>%
        addPolygons(color = 'navy',
                    opacity = 1.0,
                    weight = 1)
    }
  })

  output$mymap <- renderLeaflet({
    display()
  })
}