在r中添加多波段栅格

时间:2016-07-07 13:26:33

标签: r sum raster

我正在处理使用Hantson& Sons提出的方法进行地形修正的地形数据。 Chuvieco(2010)涉及基于特定NDVI值的覆盖分离方法,以告知植被和非植被区域。

所以,我从一个多波段光栅对象变为两个,它们被单独处理并随后组合以形成原始的,地形校正的场景。

问题是我在场景中有一些NA值,所以如果我没有摆脱它们,我会得到一张空白图像。我使用sum函数并将na.rm选项定义为TRUE来解决此问题,但结果是单波段栅格对象而不是堆栈或栅格砖对象。

这是我的代码:

#topographic correction
VEGB1TC<- topocorr(VEGB1,slopeG,aspectG,sunelev,sunazimuth,method="ccorrection",na.value=NA)
VEGB2TC<- topocorr(VEGB2,slopeG,aspectG,sunelev,sunazimuth,method="ccorrection",na.value=NA)
....        
SDB1TC<- topocorr(SDB1,slopeG,aspectG,sunelev,sunazimuth,method="ccorrection",na.value=NA)
SDB2TC<- topocorr(SDB2,slopeG,aspectG,sunelev,sunazimuth,method="ccorrection",na.value=NA)
...

#rasterize corrected band and stack them 
VB1<-raster(VEGB1TC)
VB2<-raster(VEGB2TC)
....

ADEVEG<-stack(VB1, VB2,...)

SB1<-raster(SDB1TC)
SB2<-raster(SDB2TC)
....

ADESD<-stack(SB1, SB2,...)

#-----------combine images-------

ADE<-sum(stack(ADEVEG,ADESD),na.rm=T)

是否有可以添加带na.rm标签的多波段栅格的功能?我找到了do.call函数,但在我看来它将几个栅格相加成一个单波段对象。

感谢您的帮助。

ps:Hantson,S。Chuvieco,E。2010.评估Landsat图像的不同地形校正方法。国际应用地球观测与地理信息杂志13(2011):691-700p。

1 个答案:

答案 0 :(得分:3)

请提供可重复的示例

library(raster)
s1 <- stack(system.file("external/rlogo.grd", package="raster")) 
s2 <- flip(s1, 'x')
s2[1000:4000] <- NA    

现在你可以做到

r1 <- s1 + s2

但是这并没有考虑NA值。所以你需要诉诸

之类的东西
r2 <- overlay(s1, s2, fun=function(x) sum(x, na.rm=TRUE))

或者

 s2r <- reclassify(s2, cbind(NA, 0))
 r3 <- s1 + s2r

PS。我理解预期sum(s1, s2)会返回一个多层对象,但我认为返回一个图层与base::sum一致:

sum(1:4, 1:4)
# [1] 20