问题描述
以下描述了我正在尝试做的缩小示例。
我有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,1),5,5)) # matrix of '0' and '1's
set.seed(2)
val2 = round(matrix(runif(5*5,5))*2 # matrix of '0' and '2's
set.seed(3)
val3 = round(matrix(runif(5*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,vals = val2
)
raster3 = raster(
nrows = 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)
解决方法
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