首页 > 解决方案 > Leaflet / Shiny中的反应性过滤器产生不正确的结果

问题描述

我正在使用 Leaflet 和 Shiny 制作地图,但在我的代码的反应部分出现问题。

我想使用下拉过滤器来选择特定区域内的点。目前,以下代码过滤器指向正确的区域,但是 - 奇怪的是 - 它们不是应该存在的点。

例如,如果我选择区域 1,则仅显示区域 1 中的点,但它们是地图各处的点,实际上不应该位于区域 1 中。

我已经确定了我认为下面有问题的部分,我将非常感谢任何评论。谢谢!

library(leaflet)
library(shiny)
library(dplyr)

dairypoints <- read.csv("Data dairies.csv")
rdmareas <- readOGR("The New Dairy Areas.shp")

ui <- fluidPage(
  titlePanel("Search Dairy Producers in the UK by Area"),
  selectInput("dropdown", "Select Area", choices = c(dairypoints$area), multiple = FALSE),
  leafletOutput("dairypointsmap", height = 1000, width= 1000)
)

pal <- colorFactor(c("blue", "black"), domain = c("Dairy Farm", "RDM Farm"))

#I think it's this section (next 3 lines) that's causing the problem
server <- function(input, output){
  filtered <- reactive({
    dairypoints %>% filter(dairypoints$area==input$dropdown)
  })

  output$dairypointsmap <- renderLeaflet({
    dairypointsmap <- leaflet(filtered()) %>%
      setView(lng = -2.916976, lat = 54.815864, zoom = 6) %>%
      addTiles() %>%
      addLegend("topright", pal = pal, values = ~Type) %>%
      addPolygons(data = rdmareas, 
                  stroke = TRUE, fillOpacity = 0, 
                  smoothFactor = 0.1, color = "black", opacity = 1, weight = 1) %>%
      addCircleMarkers(
        radius = 4,
        color = ~pal(dairypoints$Type),
        stroke = FALSE, fillOpacity = 1,
        popup = paste("Name", dairypoints$Name, "<br>",
                      "Producer ID", dairypoints$ProducerID, "<br>",
                      "Area Number", dairypoints$area, "<br>",
                      "Post Code", dairypoints$Postcode, "<br>",
                      "CPH", dairypoints$CPH, "<br>",
                      "Farm Type", dairypoints$Type))
  })
  options(shiny.sanitize.errors = FALSE)
}

shinyApp(ui = ui, server = server)

标签: rshinyleafletreactive

解决方案


推荐阅读