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

使用forEachFeatureAtPixel获取多图层信息仅返回首条结果的咨询

问题原因

forEachFeatureAtPixel 方法的运行机制为:只要回调函数返回非undefined的值,就会立刻终止遍历,直接将该返回值作为整个方法的返回结果。你当前的代码中每次回调都返回了包含要素和图层的对象,所以遍历到第一个匹配要素就会停止,自然只能拿到第一条结果。

解决方案

不要在回调函数中返回值,自行声明一个数组存储所有匹配到的要素和图层信息即可,修改后的代码如下:

map.on("click", function (evt) {
    // 声明空数组存储所有匹配结果
    const allMatchResults = [];
    map.forEachFeatureAtPixel(evt.pixel, function (feature, layer) {
        // 把匹配到的要素和图层推入数组,不要返回任何值
        allMatchResults.push({ feature, layer });
    });
    // 清空原有内容
    contINFO.innerHTML = '';
    // 遍历所有结果拼接展示内容
    allMatchResults.forEach(result => {
        const feature = result.feature;
        const layer = result.layer;
        if (layer === vec01) {
            contINFO.innerHTML += '<b>One name:' + feature.get('one_name') + '</b><br>';
        } else if (layer === vec02) {
            contINFO.innerHTML += '<b>Other name:' + feature.get('other_name') + '</b> <b>Percent: ' + feature.get('percent') + '</b><br>';
        }
    });
});
补充说明
  • 如果需要过滤不需要的图层,可以在push操作前添加判断条件,仅将目标图层的匹配结果推入数组,减少后续遍历的冗余数据
  • 如果给forEachFeatureAtPixel配置了图层过滤参数,要注意过滤规则的准确性,避免漏匹配目标图层的要素

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:54:03