我有一组包含每日土壤湿度数据的栅格(.vrt)。我想对所有栅格的像素求和,以便按月进行度量。但是,每天都没有覆盖整个世界,这导致在前几天存在度量的地方没有数据值。
我想做的是对每个栅格的值求和。但是,似乎每当无数据像素合计时,结果像素就被直接分类为无数据。我想相反:忽略所有nodata值并求和其余值。
我想到了两种解决问题的方法:
- 汇总栅格而忽略nodata值
- 将无数据像素转换为值0,然后将所有栅格相加
不幸的是,我找不到任何工具可以做到这一点。
谁能帮我?
我有一组包含每日土壤湿度数据的栅格(.vrt)。我想对所有栅格的像素求和,以便按月进行度量。但是,每天都没有覆盖整个世界,这导致在前几天存在度量的地方没有数据值。
我想做的是对每个栅格的值求和。但是,似乎每当无数据像素合计时,结果像素就被直接分类为无数据。我想相反:忽略所有nodata值并求和其余值。
我想到了两种解决问题的方法:
不幸的是,我找不到任何工具可以做到这一点。
谁能帮我?
Answers:
首先,您可以使用gdal_calc.py将所有-9999更改为0,并将NoData值设置为0。
例如:
gdal_calc.py -A input.tif --outfile=input_with_NoData.tif --calc="A+9999*(A==-9999)" --NoDataValue=0
然后,您可以用忽略的无数据值gdal_translate与-a_nodata选项后面没有。
-a_nodata 值:
将指定的nodata值分配给输出频段。从GDAL 1.8.0开始,可以将其设置为none,以避免在源文件中存在nodata值的情况下对输出文件进行设置
例:
gdal_translate -a_nodata none input_with_NoData.tif output_without_NoData.tif
gdal_translate -a_nodata none ...
。例如: gdal_calc.py -A input.tif --outfile=input_with_NoData.tif --type=Int16 --calc="A+9999*(A==-9999)" --NoDataValue=0
cd
命令更改工作目录,然后重试以仅具有-A test.tif
。
在R中:
library(raster)
s <- stack('file1', 'file2', ...)
ss <- sum(s, na.rm=TRUE)
s
,参数na.rm=TRUE
导致NA
值被忽略。输出对象ss
是raster
可以与之一起导出的对象writeRaster
(请参阅参考资料?writeRaster
)。(@RobertH是R raster
包的创建者。)
Spatial Analyst中的条件工具是一种将空值转换为零的简便方法。然后取和应该是一个瞬间。
我记得前一段时间有这个问题。作为解决方案,我认为我对栅格中的所有像元进行了+1,将栅格加在一起,然后进行了最终减法(无论您添加了多少+1)。这很粗糙,但是如果能完成工作……!
或者,使用QGIS中“处理”工具箱中的“重新分类网格值”将空值转换为零。