【发布时间】:2021-01-25 09:57:58
【问题描述】:
以下描述了我正在尝试做的一个按比例缩小的示例。
我有 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)
【问题讨论】: