首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用一组栅格中的最高像素值覆盖栅格值

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

Stack Overflow用户
提问于 2020-10-10 23:11:35
回答 1查看 84关注 0票数 0

下面描述了我正在尝试做的事情的一个缩小的示例。

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

我最初试着使用raster::overlayraster::update函数,但没能让它们正常工作。但是,经过一些试验,我成功地使用了stack()stackApply()calc()函数。虽然我已经设法让它工作,但我想知道是否有更好的替代方案,因为最终,我将对20个范围更大的栅格执行此过程。

下面是我对前面描述的可重现代码的尝试。

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2020-10-10 23:59:05

max应该同时在几个不同的光栅上工作。

代码语言:javascript
复制
max_raster <- max(raster1, raster2, raster3)

plot(max_raster)

看起来和你堆叠的栅格一样。

代码语言:javascript
复制
stack2 <- stack(maximum, max_raster)
plot(stack2)

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64294955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档