You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shiny应用pickerInput联动及按年份筛选多边形绘制问题求助

问题核心原因
  • 你当前的筛选逻辑只匹配了多边形名称,没有同步匹配选中的年份,所以无法过滤出对应年份的多边形数据
  • shp属性表的多边形名称字段名和codebook不一致,需要先对齐字段名
  • 没必要把renderLeaflet/renderTable包裹在observeEvent中,render函数本身就具备响应式触发能力
  • 原代码缺失leaflet包的加载,会导致绘图报错

调整步骤

1. 先对齐测试数据的字段与命名

首先将你提供的测试数据正确赋值并对齐字段:

# 加载缺失的leaflet包
library(leaflet)

# 空间多边形数据赋值为shp,对齐多边形字段名
shp <- new("SpatialPolygonsDataFrame", 
# 此处替换为你提供的空间数据完整代码
)
# 把shp里的poly字段名改成和codebook一致的Polygon
names(shp@data)[names(shp@data) == "poly"] <- "Polygon"

# 对照表数据赋值为codebook
codebook <- structure(list(X = c(NA, NA, NA, ...)), 
# 此处替换为你提供的codebook完整代码
)

2. 替换Server端的核心响应逻辑

主要修改data反应式的筛选逻辑,删除冗余的observeEvent包裹:

server <- function(input, output, session) {
    
    # 原有的pickerInput联动逻辑保留即可
    observeEvent(input$input_period, {
      codebook_mod <- codebook[codebook$Year == input$input_period, ]
      disabled_choices <- !unique(codebook$Polygon) %in% codebook_mod$Polygon
      updatePickerInput(session = session, 
                        inputId = "picker_cny",
                        choices = unique(codebook$Polygon),
                        choicesOpt = list(
                          disabled = disabled_choices,
                          style = ifelse(disabled_choices,
                                         yes = "color: rgba(119, 119, 119, 0.5);",
                                         no = "")
                        ))
    }, ignoreInit = TRUE)
    
    # 核心修改:同时按年份+选中多边形筛选空间数据
    data <- reactive({
      # 未选多边形时返回空,避免报错
      req(input$picker_cny)
      shp[shp@data$year == input$input_period & shp@data$Polygon %in% input$picker_cny, ]
    })
    
    # 直接写render函数即可,自动响应输入变化
    output$m <- renderLeaflet({
      leaflet() %>%
        addTiles(group = "OSM (默认底图)") %>%
        addPolygons(data = data())
    })
    
    output$table <- renderTable(data()@data)
    
  }

效果验证
  • 选中year_1+勾选polygon_a、polygon_b:只会渲染year_1对应的两个多边形
  • 选中year_3时所有多边形选项禁用,不会渲染任何图形
  • 不同年份选中同一个多边形,会渲染对应年份的不同形状

内容的提问来源于stack exchange,提问作者AnEostig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 19:57:03