如何使Shiny leaflet map在输入值R中重新改变

时间:2017-10-27 16:10:03

标签: r shiny leaflet

我有以下ui.R和server.R

我有一个包含3列的简单数据集:人的类型,经度,纬度

我希望Leaflet Map能够对" Person of Type"中的变化作出反应。 <<< 这就是我被困住的地方。 我知道我需要使用某种observeEvent,但不知道如何实现这个

谢谢

ui.R

ui <- fluidPage(
  selectInput(inputId = "Selector",
              label = "Please Select Type of Person",
              choices = c("Please Select:",
                          "Type A",
                          "Type B"),
              selected = "Please Select:"),

  leafletOutput("myMap")
)

shinyApp(ui=ui, server=server)

server.R

library(shiny)

server <- function(input,output){

  output$myMap <- renderLeaflet({

    leaflet() %>%
      addTiles()%>%
      addMarkers(data=SampleData,
                 ~Longitude,
                 ~Latitude)
  })

}

1 个答案:

答案 0 :(得分:1)

不完全确定您希望地图执行的操作,但听起来您正在寻找leafletProxy。例如,假设您要清除标记并添加新标记。使用addMarkers时,请务必添加group参数:

(编辑提供了一个完整的可重复的示例。请注意,我之前给出的答案没有改变,我只是添加了数据和其他闪亮的应用程序结构。请注意,'请选择:'部分被视为这里有效的选择,有更好的方法来处理选择,但这不是这个问题的关键。)

library(shiny)
library(leaflet)

SampleData <- data.frame(type = c('Type A', 'Type B', 'Type A', 'Type B'),
                         Longitude = c(80.1, 80.2, 80.3, 80.4),
                         Latitude = c(40.1, 40.2, 40.3, 40.4))


ui <- fluidPage(
  selectInput(inputId = "Selector",
              label = "Please Select Type of Person",
              choices = c("Please Select:",
                          "Type A",
                          "Type B"),
              selected = "Please Select:"),

  leafletOutput("myMap")
)


server <- function(input,output){

  output$myMap <- renderLeaflet({

    leaflet() %>%
      addTiles()%>%
      addMarkers(data=SampleData,
                 ~Longitude,
                 ~Latitude,
                 group = "myMarkers")
  })


  observeEvent(input$Selector, {
    leafletProxy("myMap") %>%
      clearGroup("myMarkers") %>%
      addMarkers(data = SampleData[SampleData$type == input$Selector, ],
                 ~Longitude,
                 ~Latitude,
                 group = "myMarkers")
  })

}
shinyApp(ui, server)