仅通过QGIS界面及栅格计算器实现差值判断重分类的方法咨询
QGIS栅格计算器实现指定需求的解决方案
仅通过QGIS自带的栅格计算器功能可完全实现该需求,之前的写法失效是因为存在栅格运算的逻辑误区。
问题原因
栅格运算的默认规则是:只要有一个参与运算的像元为NoData,整个算术运算的结果直接返回NoData。你尝试的raster_A@1 - raster_B@1逻辑,在raster_B对应位置为NoData时,计算结果直接是NoData,后续和raster_A@1的相等判断永远为假,因此无法得到预期结果。
正确实现方案
QGIS栅格计算器内置了is_no_data()函数专门用于判断像元是否为无值,搭配if()条件函数即可实现需求:
单逻辑实现(仅提取A有值、B无值区域,赋值99,其余为NoData)
直接使用如下表达式:
if(is_no_data(raster_B@1) AND NOT is_no_data(raster_A@1), 99, no_data())
双逻辑实现(同时处理A有B无赋99、B有A无赋-99,其余为NoData)
嵌套if判断即可:
if( is_no_data(raster_B@1) AND NOT is_no_data(raster_A@1), 99, if( is_no_data(raster_A@1) AND NOT is_no_data(raster_B@1), -99, no_data() ) )
注意事项
- 运算前请确保两个输入栅格的投影、分辨率、行列数、空间范围完全一致,避免栅格计算器默认取交集导致有效像元丢失
- 输出栅格时可选择整型数据类型(如Int16)存储结果,节省存储空间
内容的提问来源于stack exchange,提问作者Overlord84
相关产品推荐
相关产品推荐

