2017-07-10 6 views
1

Je suis relativement nouveau à l'utilisation de R et de travailler avec des données SIG.rasters de superposition à une valeur donnée

J'essaye de créer une fonction pour superposer deux couches Raster, seulement quand un des rasters (dans ce cas raster1) est à une certaine valeur (dans ce cas 0). J'ai essayé de nombreuses options en faisant cela, mais ils ne semblent pas fonctionner. Ma dernière tentative est fournie ci-dessous, et elle fonctionne mais la sortie indique simplement NULL et elle ne trace pas.

library(raster) 

raster1 <- raster(ncols=10,nrows=10) 
raster2 <- raster(ncols=10,nrows=10) 

values(raster1) <- round(runif(ncell(raster1))) 
values(raster2) <- round(runif(ncell(raster2))) 

plot(raster1) 
plot(raster2) 

overlay_zero <- function (x, y) { 
if (isTRUE(x == 0)) { 
    overlay(x, y, fun=function(x,y) {return(x+y)})} 
} 


z <- overlay_zero(raster1, raster2) 
z 
plot(z) 
+0

Donc, si j'ai bien compris, à la valeur '0' fo' raster1' vous voulez ajouter les valeurs de 'raster2'? – Val

+0

oui, c'est correct. – DFinch

Répondre

0
overlay_ras <- function(ras1,ras2,value=0){ 

    result    <- ras1 
    result[ras1==value] <- ras1[ras1==value] + ras2[ras1==value] 
    return(result) 

} 

overlaid <- overlay_ras(raster1,raster2,0) 

Cela fera l'affaire. La fonction prend deux rasters et une valeur qui sera utilisée pour déterminer les cellules affectées par l'overlay (addition).

+0

Incroyable. Merci beaucoup. – DFinch

+0

@DfFinch Remarque: Vous ne devez cependant l'utiliser que pour les rasters plus petits. Content de pouvoir aider. Si vous avez aimé ma réponse, j'apprécierais un upvote. – maRtin