2016-07-27 50 views
3

Um Rasterwerte unter SpatialPoints zu ändern, können Sie einfach [ verwenden. JetztÄndern von Rasterwerten mit räumlichen Polygonen

r <- raster(system.file("external/test.grd", package="raster")) 
rTp <- rasterToPoints(r, spatial = T) 

set.seed(666) 
rTpS <- rTp[sample(1:length(rTp), 500),] 
plot(r) 
plot(rTpS, add = TRUE, pch = ".") 

werden die Rasterwerte unter den räumlichen Punkten geändert wie folgt aus:

r1 <- r 
r1[rTpS] <- 99999 
plot(r1) 

Raster mit SpatialPoints (links) und Raster mit geänderten Werten (rechts): Raster with SpatialPoints (left) and raster with changed values (right)

Also nahm ich an, dass Polygone auf die gleiche Weise arbeiten. erzeugen daher einige Polygone aus diesem Raster Datensatz:

rst <- as.integer(stretch(r, 0, 10)) 
rTpol <- rasterToPolygons(rst, dissolve = T) 
rTpol <- rTpol[rTpol$layer > 3,] 

plot(r) 
plot(rTpol, add = T) 

rst[rTpol[,]] <- 100 
plot(rst) 

# also tried 
# rst[rTpol] <- 100 

Allerdings, wenn ich unten einige SpatialPolygons die Rasterwerte versuchen zu ändern, irgendwie die ID (oder etwas) der Polygone. Doch sollte es 100.

Raster mit SpatialPolygons sein (links) und Raster mit seltsam veränderten Werte (rechts): Raster with SpatialPolygons (left) and raster with strangely changed values (right)

Daher meine Frage, wie Raster-Werte innerhalb von Polygonen zu ändern.

Antwort

2

Endlich fand ich die Antwort selbst.

Die Funktion rasterize() hilft bei diesem Problem.

r <- raster(system.file("external/test.grd", package="raster")) 
rst <- as.integer(stretch(r, 0, 10)) 
plot(rst) 
rTpol <- rasterToPolygons(rst, dissolve = TRUE) 
rTpol <- rTpol[rTpol$layer > 3,] 
plot(rTpol) 

rpol <- rasterize(rTpol, rst, field = 100, update = TRUE) 
plot(rpol) 

rasterize() legt den field = Wert in dem rastercells aus den Polygonen erzeugt, während update = TRUE das Raster nimmt und aktualisiert alle Zellen auf die Polygone mit dem Feldwert entsprechen weichen.

Das Ergebnis sieht wie folgt aus: enter image description here

+0

Das ist eine gute Lösung, aber Ihre ursprüngliche Lösung war elegantere --- und sollte gearbeitet haben. Dieser Fehler wurde in der (kommenden) Raster-Version 2.5-16 behoben. – RobertH

+0

@RobertH: Weißt du, ob die Aktualisierung des Raster-Pakets bereits auf dem Weg ist? – loki