【问题标题】:writeRaster to .img file sizes are much bigger than source fileswriteRaster 到 .img 文件的大小比源文件大得多
【发布时间】: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。组合栅格中的结果值似乎没有错 - 我没有负值或高得离谱的值或任何东西。

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

【问题讨论】:

    标签: r raster filesize


    【解决方案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 多一点。
    猜你喜欢
    • 2017-06-21
    • 2014-04-28
    • 2020-04-12
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多