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

ArcGIS JS API如何对对象存储的多个FeatureLayer应用过滤器

实现方法

你只需要新增变量记录当前激活的年份,再修改过滤逻辑,遍历当前年份下的所有图层批量应用过滤规则即可,具体步骤如下:

  • 新增全局变量存储当前选中的激活年份,在你已有的年份切换逻辑里同步更新这个变量的值
  • 修正原createFL函数的属性位置错误(原代码将透明度、可见性属性写在了portalItem配置内部,不会生效)
  • 重写doQuery逻辑,匹配到当前激活年份的图层组后,遍历组内所有图层统一设置definitionExpression

完整修正代码

1. 修正图层创建函数

const createFL = (layer) => { 
    if(layer.featureLayer !== null && layer.featureLayer !== undefined)
        return;
    layer.featureLayer = new FeatureLayer({ 
        portalItem: {
            id: layer.layerID
        },
        opacity: layer.opacity !== undefined ? layer.opacity : 1.0,
        visible: false,
    })
}

2. 新增激活年份记录变量

// 初始值和页面默认加载的年份保持一致即可
let activeYear = 1918;

// 在你已实现的年份切换函数中,新增一行更新activeYear的逻辑
// 示例(替换成你自己的切换逻辑即可):
/*
function onYearSelect(selectedYear) {
    // 你原有的隐藏旧图层、加载显示新年份图层的逻辑保持不变
    activeYear = selectedYear; // 新增这行
}
*/

3. 修正过滤应用逻辑

document.getElementById("doBtn").addEventListener("click",doQuery);
const attributeName = document.getElementById("attSelect");
const expressionSign = document.getElementById("signSelect");
const inputValue = document.getElementById("valSelect");
let expression;

function doQuery() {
    // 拼接表达式时转义输入内容里的单引号,避免过滤语法报错
    expression = attributeName.value +
                expressionSign.value +
                "'" + inputValue.value.replace(/'/g, "''") + "'";
    document.getElementById("printResults").textContent = expression;
    
    // 匹配当前激活年份对应的图层配置
    const activeLayerGroup = layersByYears.find(config => config.year === activeYear);
    if (!activeLayerGroup) return;

    // 遍历当前年份下所有图层,统一应用过滤规则
    activeLayerGroup.layers.forEach(layerConfig => {
        // 图层未初始化时先创建实例
        if (!layerConfig.featureLayer) {
            createFL(layerConfig);
        }
        layerConfig.featureLayer.definitionExpression = expression;
    });
}

补充说明

  • 如果需要实现清除过滤功能,只需要将expression赋值为空字符串''后执行同样的遍历逻辑,API会自动清除图层上的过滤规则
  • 切换年份时,如果希望过滤规则对新切换的年份图层同样生效,可以在年份切换的逻辑末尾手动调用一次doQuery()即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 07:33:24