下面描述了我正在尝试做的事情的一个缩小的示例。
我有3个共享相同范围和分辨率的光栅。第一个光栅由'0‘和'1’像素组成,第二个光栅由'0‘和'2’像素组成,第三个光栅由'0‘和'3’像素组成。我希望将它们全部叠加在一起,以便在每个像素处,保留三个栅格中的最高值。例如,如果像素的第一个、第二个和第三个光栅的值分别为“1”、“2”和“0”,则最终的叠加后输出将具有该像素的值“2”。
我最初试着使用raster::overlay和raster::update函数,但没能让它们正常工作。但是,经过一些试验,我成功地使用了stack()、stackApply()和calc()函数。虽然我已经设法让它工作,但我想知道是否有更好的替代方案,因为最终,我将对20个范围更大的栅格执行此过程。
下面是我对前面描述的可重现代码的尝试。
library(raster)
# Create matrix of values to assign to rasters
set.seed(1)
val1 = round(matrix(runif(5*5,0,1),5,5)) # matrix of '0' and '1's
set.seed(2)
val2 = round(matrix(runif(5*5,0,1),5,5))*2 # matrix of '0' and '2's
set.seed(3)
val3 = round(matrix(runif(5*5,0,1),5,5))*3 # matrix of '0' and '3's
# View matrices
val1
val2
val3
# Create random raster and assign matrix values
raster1 = raster(
nrows = 5,
ncols = 5,
xmn = 0,
xmx = 5,
ymn = 0,
ymx = 5,
vals = val1
)
raster2 = raster(
nrows = 5,
ncols = 5,
xmn = 0,
xmx = 5,
ymn = 0,
ymx = 5,
vals = val2
)
raster3 = raster(
nrows = 5,
ncols = 5,
xmn = 0,
xmx = 5,
ymn = 0,
ymx = 5,
vals = val3
)
# View rasters
plot(raster1)
plot(raster2)
plot(raster3)
# Stack rasters
stack = stack(raster1, raster2, raster3)
plot(stack)
# Create single raster using the maximum values at each location
maximum = stackApply(stack, indices = rep(1, nlayers(stack)),fun = max)
maximum = calc(stack,function(x){max(x)})
plot(maximum)发布于 2020-10-10 23:59:05
max应该同时在几个不同的光栅上工作。
max_raster <- max(raster1, raster2, raster3)
plot(max_raster)

看起来和你堆叠的栅格一样。
stack2 <- stack(maximum, max_raster)
plot(stack2)

这里有一个包含一些功能的帮助页面:http://finzi.psych.upenn.edu/library/raster/html/raster-package.html
https://stackoverflow.com/questions/64294955
复制相似问题