首页 > 解决方案 > R光栅乘法 - 为什么光栅大小会大大增加

问题描述

我正在使用 R(光栅包)中的 MODIS 光栅数据,我想知道,为什么将两个光栅文件相乘时光栅的大小会变大 7000 倍。在我的例子中,一个栅格是一个简单的 MODIS 栅格(值介于 0 和 255(整数)之间),另一个是一种模板(0 和 1(整数))。所以我不明白为什么光栅应该这么大?尝试使用 writeRaster 保存栅格时这是一个大问题,因为我的 R 会话不断崩溃。

我的代码如下所示:

a <- list.files('All_MODIS_files_of_one_year.tif')
for (day in 1:length(a)){
ra <- raster(a[day])
ra_reduce <- ra * s

对象大小ra为 12064 字节,对象大小s为 11984 字节。对象大小ra_reduce为 93777512 字节。当我最终堆叠一整年时,文件变得几乎 40 GB 大。:(

我尝试了该round函数,尝试将其设置@file@datanotation为整数,但没有任何帮助。有谁知道如何解决这个问题?!

标签: rraster

解决方案


ra(可能也是)的对象大小s非常小,因为它在内存中没有单元格值。如果您show(ra)会看到数据在磁盘上(在文件中)。乘法后,值将在内存中。您可以通过使用诸如calcoverlay允许您将结果写入文件的方法来避免这种情况,或者使用writeRaster. 那是:

x <- overlay(ra, s, fun=function(x,y){x*y}, filename='file.tif')

或者

ra_reduce <- ra * s
ra_reduce <- writeRaster(ra_reduce, filename='ra_reduce.tif')

要减小文件大小,您可以(也许)使用该datatype参数。


推荐阅读