OpenLayers WebGLTileLayer多栅格数据源相乘提取数据异常问题
问题原因与解决方法
你遇到的问题核心是:多数据源场景下,WebGL图层不会自动将所有数据源的波段按顺序合并。默认的["band", n]表达式只会指向最后一个加载的数据源的波段,所以用["band",5]去取第二个数据源的波段完全无效——每个数据源的波段都是从1开始独立计数的。
正确的操作方式是通过["raster-data", dataIndex]指定要调用的数据源(索引从0开始),再结合["band", n]提取对应波段。
具体实现示例
假设你有两个栅格数据源sourceA(含RGB+Alpha波段)和sourceB,要实现对应波段相乘,可以这样写WebGL图层的样式:
const webglLayer = new WebGLTileLayer({ sources: [sourceA, sourceB], style: { color: [ "array", // 红波段相乘:sourceA的band1 * sourceB的band1 ["*", ["band", 1, ["raster-data", 0]], ["band", 1, ["raster-data", 1]]], // 绿波段相乘:sourceA的band2 * sourceB的band2 ["*", ["band", 2, ["raster-data", 0]], ["band", 2, ["raster-data", 1]]], // 蓝波段相乘:sourceA的band3 * sourceB的band3 ["*", ["band", 3, ["raster-data", 0]], ["band", 3, ["raster-data", 1]]], // 保留sourceA的透明度波段 ["band", 4, ["raster-data", 0]] ] } });
关键说明
["raster-data", 0]代表第一个数据源(sources数组的第0项),["raster-data",1]代表第二个数据源;- 每个数据源的波段索引都是独立的,从1开始计数,和其他数据源无关;
- 用WebGL图层直接做波段运算,性能远高于
RasterSource的CPU端处理,因为是GPU加速并行计算。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

