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

Posted

技术标签:

【中文标题】writeRaster 到 .img 文件的大小比源文件大得多【英文标题】:writeRaster to .img file sizes are much bigger than source files 【发布时间】:2018-03-16 15:45:48 【问题描述】:

我正在尝试获取多个光栅文件,将它们添加在一起,然后将生成的光栅文件写入磁盘。但是,我注意到每次执行此操作时,生成的 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。组合栅格中的结果值似乎没有错 - 我没有负值或高得离谱的值或任何东西。

我还有什么遗漏的吗?是否有一些我开始忽略的栅格质量会影响这一点?

【问题讨论】:

【参考方案1】:

数据类型可以发挥作用:

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 倍。

【讨论】:

谢谢!压缩成功了,文件缩小到了 6 mb 多一点。

以上是关于writeRaster 到 .img 文件的大小比源文件大得多的主要内容,如果未能解决你的问题,请参考以下文章

修改Linux Deploy的linux.img文件大小

html canvas的 ctx.createPattern(img2,'no-repeat'); 如何让img的大小适应canvas的大小

java如何实现把一个大图片压缩到指定大小的图片且长宽比不变

java如何实现把一个大图片压缩到指定大小的图片且长宽比不变

java如何实现把一个大图片压缩到指定大小的图片且长宽比不变?

为啥 jquery 的 ui.css 文件的字体大小比正常大?