writeRaster 到 .img 文件的大小比源文件大得多

writeRaster to .img file sizes are much bigger than source files

我正在尝试获取多个光栅文件,将它们相加,然后将生成的光栅文件写入磁盘。但是,我注意到每次执行此操作时,生成的 raster.img 文件大小约为 877 MB,而我添加在一起的单个光栅文件不超过 4 MB。此外,有时我将 3 个栅格合并为 1 个,有时我将 10 个栅格合并为 1 个。无论我从多少开始,生成的栅格文件都是相同的大小。

下面是一些示例代码,说明我如何将栅格添加到一起并写入文件

library(raster)
r1 <- r2 <- r3 <- raster(nrow=10, ncol=10)
values(r1) <- runif(ncell(r1))
values(r2) <- runif(ncell(r2))
values(r3) <- runif(ncell(r3))
combined <- r1 + r2 + r3
writeRaster(combined, "data/filename.img", overwrite = T)

基于类似的问题 here 我检查了我的输入栅格和组合栅格的数据类型是否相同,它们是。他们都是FLT4S。组合栅格中的结果值似乎没有错——我没有负值或荒谬的高值或任何东西。

还有什么我想念的吗?我开始使用的栅格的某些质量是否会受到影响?

数据类型可以发挥作用:

x <- writeRaster(combined, "filename1.img", datatype='FLT4S', overwrite=TRUE)
y <- writeRaster(combined, "filename2.img", datatype='INT2S', overwrite=TRUE)
file.size("filename1.img")
#[1] 23249
file.size("filename2.img")
#[1] 15057

但是你声明所有文件都是FLT4S。考虑到文件大小的巨大差异(> 200 倍),一定有其他原因。输入文件可能已压缩。您可以压缩输出文件(参见 manual

z <- writeRaster(combined, "filename3.img", datatype='FLT4S', options="COMPRESSED=YES", overwrite=TRUE)
file.size("filename3.img")
#[1] 7429

这大约是没有压缩的 3 倍。或许原始数据可以再压缩一点,但压缩200倍似乎还是不太可能。