使用gdal_calc做1bit栅格差值运算结果不符合预期问题求助
gdal_calc栅格差值运算结果范围异常问题解决方法
问题核心原因
gdal_calc.py默认采用所有输入栅格的交集作为输出范围,非重叠区域的像元会被直接排除在运算范围外,同时NoData空值参与算术运算时返回结果仍为空值,最终导致仅重叠区域有输出。
解决步骤
- 添加
--extent=union参数,指定输出范围为所有输入栅格的并集,覆盖两个栅格的全部区域 - 修改计算式,对非重叠区域的空值做特殊处理,匹配需要的非重叠区域输出逻辑
- 明确指定输出的NoData值,避免结果出现异常值
参考命令
如果需要仅保留非重叠区域的内容、重叠区域设为空,可使用以下命令:
gdal_calc.py -A pica.tif -B picb.tif --outfile=result.tif --extent=union --calc="where(isnan(A), B, where(isnan(B), A, nan))" --NoDataValue=nan
如果需要非重叠区域保留对应栅格原值、重叠区域返回A-B的差值,可使用以下命令:
gdal_calc.py -A pica.tif -B picb.tif --outfile=result.tif --extent=union --calc="where(isnan(A), B, where(isnan(B), A, A-B))" --NoDataValue=nan
注意事项
- 运算前请确认两个输入栅格的空间参考、分辨率完全对齐,若存在错位可先使用
gdalwarp工具做配准后再执行差值运算 - 若输入栅格原本的NoData值不是nan(如常见的-9999、0等),需要将计算式中的
isnan()判断替换为对应等值判断,例如将isnan(A)改为A==-9999
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

