2017-07-10 2 views
1

Ich bin relativ neu zu verwenden R und arbeiten mit GIS-Daten.Overlay-Raster auf einen bestimmten Wert

Ich versuche, eine Funktion zu erstellen, um zwei Raster Ebenen zu überlagern, nur wenn eines der Raster (in diesem Fall raster1) auf einem bestimmten Wert (in diesem Fall 0) ist. Ich habe verschiedene Möglichkeiten ausprobiert, aber sie scheinen nicht zu funktionieren. Mein letzter Versuch ist unten zur Verfügung gestellt, und es läuft, aber die Ausgabe sagt nur NULL und es plottet nicht.

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

Also, wenn ich richtig verstanden, bei Wert '0' für' Raster1' möchten Sie die Werte von 'Raster2' hinzufügen? – Val

+0

ja, das ist richtig. – DFinch

Antwort

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) 

Dies wird den Trick. Die Funktion benötigt zwei Raster und einen Wert, der zur Bestimmung der von der Überlagerung betroffenen Zellen verwendet wird (Addition).

+0

Erstaunlich. Vielen Dank. – DFinch

+0

@DfFinch Hinweis: Sie sollten es jedoch nur für kleinere Raster verwenden. Ich bin froh, dass ich helfen konnte. Wenn Ihnen meine Antwort gefallen hat, würde ich mich über eine positive Bewertung freuen. – maRtin

Verwandte Themen