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

鼠标移动获取GeoTIFF数据:从float32array生成过滤后列表

解决方案

先声明一个全局变量,用来存储所有过滤后的有效结果:

// 全局存储所有有效数据,不会随鼠标移动重置
const allValidReliefValues = [];

然后修改你的displayPixelValue函数,处理每个图层的Float32Array并完成合并过滤:

function displayPixelValue(event) {
  const filteredLayers = map.getAllLayers().filter(layer => layer.get('name'));
  const reliefPattern = "_mbpd_";
  
  // 存储当前鼠标移动事件中得到的所有有效数值
  const currentValidValues = [];

  for (const layer of filteredLayers) {
    if (layer.get('name').match(reliefPattern)) {
      const reliefValue = layer.getData(event.pixel);
      // 将Float32Array转换为普通数组,同时过滤掉NaN和255
      const validValues = Array.from(reliefValue).filter(val => !Number.isNaN(val) && val !== 255);
      // 合并当前图层的有效数值到当前事件数组
      currentValidValues.push(...validValues);
    }
  }

  // 将当前事件的有效数据合并到全局列表
  allValidReliefValues.push(...currentValidValues);
  
  // 可选:打印全局列表验证结果
  console.log('所有有效结果:', allValidReliefValues);
}

map.on(['pointermove'], displayPixelValue);

关键修改说明:

  • 全局数组存数据:allValidReliefValues用来累积所有鼠标移动产生的有效数据,不会每次鼠标移动就清空之前的内容。
  • 遍历优化:用for...of替代传统for循环,代码更简洁易读。
  • Float32Array处理:Array.from()可以直接把Float32Array转成普通数组,同时通过filter一步过滤掉NaN和255——如果还有其他要排除的无效值,直接在filter的条件里补充即可。
  • 数组合并:用扩展运算符...把每个图层的有效数组合并到当前事件数组,再合并到全局数组,这样15个图层的结果都会被收集到,不会只处理第一个。

后续使用:

之后你要用到这个简洁列表的时候,直接调用allValidReliefValues就行,它已经是处理好的普通数组,方便后续任何操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 17:10:23