如何解决大型栅格的最佳 wopt 选项
使用 terra::
处理大型栅格时,最好的 wopt 和 gdal 选项是什么?
我想将栅格堆栈 (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")
或 gdal=c("COMPRESS=LZW","TFW=YES")
,但没有真正改变。也试过没有任何 gdal 选项。
此外,我还使用 raster::projectRaster()
函数(使用分解的 r)执行此操作,该函数速度更快且 outputfile.tif 更小。但是,我想我应该避免在此处使用 projecRaster()
:
beginCluster()
r_processed<-
projectRaster(stack(r_disaggregated),raster(r_template),filename = "outputfile.tif")
endCluster()
解决方法
以下是一些可能有帮助的评论。 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)
我将其拆分,因为这样更易于阅读和调试。您使用 r_template
进行屏蔽,但应该使用 r
。如果您想在所有三个步骤中都使用这些选项,则需要每次都使用 wopt
参数,而不仅仅是最后一次。
你能show(r)
让我做一个可重现的例子吗?
我假设问题出在 resample
上,因为它的实现方式略有不同,但这可能会随着开发版本而有所改善。你可以这样安装:
install.packages('terra',repos='https://rspatial.r-universe.dev')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。