微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

大型栅格的最佳 wopt 选项

如何解决大型栅格的最佳 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()

r 栅格如下所示:

enter image description here

解决方法

以下是一些可能有帮助的评论。 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?