使用一组栅格中的最高像素值覆盖栅格值

时间:2020-10-10 15:11:34

标签: r gis raster r-raster

以下描述了我正在尝试做的缩小示例。

我有3个栅格,它们共享相同的范围和分辨率。第一栅格由“ 0”和“ 1”像素组成,第二栅格由“ 0”和“ 2”像素组成,第三栅格由“ 0”和“ 3”像素组成。我想将它们全部叠加在一起,以便在每个像素处保留三个栅格中的最大值。例如,如果一个像素的第一,第二和第三栅格的值分别为'1','2'和'0',则最终的叠加后输出的像素值将为'2'。

我最初尝试使用raster::overlayraster::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)

1 个答案:

答案 0 :(得分:1)

max应该同时处理多个不同的栅格。

max_raster <- max(raster1, raster2, raster3)

plot(max_raster)

enter image description here

看起来就像栅格堆叠一样。

stack2 <- stack(maximum, max_raster)
plot(stack2)

enter image description here

这里有一些功能的帮助页面:http://finzi.psych.upenn.edu/library/raster/html/raster-package.html