使用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
相关产品推荐
相关产品推荐

