我有一个很大的光栅,我不明白如何处理它。我的假设是我可以将其切成块,制作一个 vrt,然后处理 vrt 以获得答案。但事实并非如此(至少没有使用我的代码),所以我希望在这里找到一些指导。
我的代码:
f <- system.file("ex/lux.shp", package = "terra")
v <- vect(f)
r <- rast(v)
values(r) <- 1:ncell(r)
r2 <- disagg(r, fact = c(4000, 5000)) # make a really big raster
tester <- zonal(r2, v, summary = "range") # calculation that is too big to handle
# this throws Error: std::bad_alloc
filename <- "test_tile/test_.tif"
ff <- makeTiles(r2, 1000, filename) # make it into many small tiles, hopefully to process
vrtfile <- "test_tile/testing.vrt"
vrt_thing <- vrt(ff, vrtfile)
tester <- zonal(vrt_thing, v, summary = "range")
# this also throws Error:std::bad_alloc
简而言之,我认为每个图块都会在后台通过该调用进行处理,一次处理一个,并将结果神奇地缝合在一起。这不是它的工作原理,这表明我误解了一些东西。非常感谢任何帮助我找到一种方法来进行区域计算的帮助。 (注意,这是一个可重现的示例,不是我的数据...我不是在寻找该文件的字面结果...)。最终,我需要使用许多不同的多边形一一静态栅格多次执行此计算。
由于您的代码无法运行,因此不清楚您在做什么。
library(terra)
# terra 1.7.72
f <- system.file("ex/lux.shp", package = "terra")
v <- vect(f)
r <- rast(v)
values(r) <- 1:ncell(r)
test <- zonal(r, v, summary = "range")
# Error in .local(x, z, ...) : unused argument (summary = "range")
在
terra::zonal
中,争论会很“有趣”,但这也不被接受
test <- zonal(r, v, fun="range")
# Error: [zonal] Unknown function
test <- zonal(r, v, fun=range)
# Error: [zonal] this 'fun' is not supported. You can use extract instead
但是,你可以做
rvmin <- zonal(r, v, fun="min")
rvmax <- zonal(r, v, fun="max")
或
e <- extract(r, v, fun=range, ID=FALSE)
结果是一样的
head(e)
lyr.1 lyr.1.1
[1,] 4 25
[2,] 35 47
[3,] 41 63
[4,] 36 36
[5,] 23 34
[6,] 58 60
head(cbind(rvmin, rvmax))
lyr.1 lyr.1
1 4 25
2 35 47
3 41 63
4 36 36
5 23 34
6 58 60
如果这没有帮助,您可以使用
terraOptions
更改有关内存可用性的假设