0

处理大型栅格时,最好的 wopt 和 gdal 选项是什么terra::?我想将栅格堆栈(2.5arcmin)与分辨率更高(500 * 500m)的栅格相匹配。工作流程:尽可能接近地分解,然后重新采样,最后屏蔽。这可行,但输出 tif > 100gb,并且该过程需要很长时间。

r <- rast("rasterstack_004166deg.tif") 
r_template <- rast("rasterstack_000449deg.tif") 

wopt_options <- list(gdal = c("BIGTIFF=YES",
                              "PREDICTOR = 2",
                              "NUM_THREADS = ALL_CPUS"),
                     tempdir = "/somewhere_I_have_a_lot_of_space",
                     todisk = TRUE)

r_processed <- disaggregate(r, fact = 9) %>% 
  resample(., r_template) %>% 
  mask(., r_template,
       filename = "outputfile.tif",
       wopt = wopt_options)

wopt_options应该放在里面terra::disaggregate()terra::resample()?有什么方法可以减小文件大小并加快进程?

我还尝试了以下 gdal 选项gdal=c("COMPRESS=DEFLATE", "TFW=YES")or gdal=c("COMPRESS=LZW", "TFW=YES"),但没有真正改变。也尝试过没有任何 gdal 选项。

此外,我还raster::projectRaster()使用更快且 outputfile.tif 小得多的函数(使用分解的 r)来执行此操作。但是,我想我应该避免projecRaster()在这里使用:

beginCluster()
r_processed<- 
  projectRaster(stack(r_disaggregated),
                raster(r_template),
                filename = "outputfile.tif")
endCluster()

r 栅格如下所示: 在此处输入图像描述

4

1 回答 1

1

以下是一些可能会有所帮助的评论。的默认行为terra是在必要时将 BIGTIFF 设置为 true,因此您通常不需要指定它。同样默认情况下,使用 LZW 压缩,因此如果您将压缩设置为 NONE,您应该会看到差异。

要设置tempdir,请使用

terraOptions(tempdir="/somewhere_I_have_a_lot_of_space")`
terraOptions()
#memfrac   : 0.6
#tempdir   : /somewhere_I_have_a_lot_of_space

你不应该设置todisk=TRUE,那只是为了调试。

现在我们有

x <- disaggregate(r, fact = 9) 
y <- resample(x, r_template) 
z <- mask(y, r, filename="outputfile.tif", wopt=wopt_options)      
   

我拆分它是因为它更易于阅读和调试。您正在掩蔽 withr_template但那应该是 with r。如果您想在所有三个步骤中都使用选项,则每次都需要使用wopt参数,而不仅仅是最后一次。

show(r)能让我做一个可重复的例子吗?

我假设问题出在,resample因为它的实现方式有点不同,但这可能在开发版本中有所改进。你可以像这样安装它:

install.packages('terra', repos='https://rspatial.r-universe.dev')

于 2021-06-10T23:25:03.280 回答