Erstellen Sie Polygone mit der Ausdehnung und Begrenzung eines bestimmten Rasters in R

13

Ich möchte zwei Polygone erstellen.

  1. Eine davon ist die rechteckige Ausdehnung meines Rasters. Ich weiß, dass ich das Ausmaß des Rasters ermitteln kann, r <- raster("band5.tif") e <- extent(r) plot(e)wenn ich Folgendes verwende : Bildbeschreibung hier eingeben

  2. Wie kann ich EIN Polygon von der Grenze des Rasters wie unten gezeigt erstellen?

So sieht mein Raster aus:Raster ("band5.tif")

csheth
quelle

Antworten:

21

Hier ist ein Beispiel.

library(raster)
# example data
x <- raster(system.file("external/test.grd", package="raster"))

Um die rechteckige Ausdehnung zu erhalten

e <- extent(x)
# coerce to a SpatialPolygons object
p <- as(e, 'SpatialPolygons')  

Um ein Polygon zu erhalten, das Zellen umgibt, die nicht NA sind

# make all values the same. Either do
r <- x > -Inf
# or alternatively
# r <- reclassify(x, cbind(-Inf, Inf, 1))

# convert to polygons (you need to have package 'rgeos' installed for this to work)
pp <- rasterToPolygons(r, dissolve=TRUE)

# look at the results
plot(x)
plot(p, lwd=5, border='red', add=TRUE)
plot(pp, lwd=3, border='blue', add=TRUE)
Robert Hijmans
quelle
Ich kann anscheinend keine Dokumentation finden r <- r > -Inf. Was genau macht es? Und wie unterschiedlich ist es von values(r)[!is.na(values(r))] <- 1(wodurch alle Orte, die nicht NA sind, in r auf 1 gesetzt werden).
Csheth
3
r > -Infist einfach R. Tun Sie, um c(1,NA,3,NA) > -Infzu sehen, wie es funktioniert. Ich habe eine Alternative hinzugefügt ( reclassify). Ihre Alternative funktioniert, ist aber nicht für große Objekte geeignet.
Robert Hijmans
Ich warte nur darauf, dass mein Computer das rasterToPolygons()Teil verarbeitet, und daraufhin werde ich Ihre Antwort auswerten. Vielen Dank für das -Infbisschen, es wird sehr nützlich sein!
Csheth
Bei einem sehr großen Raster dauert dies eine Weile oder kann sogar fehlschlagen. In diesem Fall könnten Sie die erste Verwendung in Betracht ziehen, aggregateda Sie den Unterschied sowieso nicht sehen würden.
Robert Hijmans
Selbst mit nur 100 Zellen nach dem Ausführen des aggregate()on r hat es nicht verarbeitet (Computer mit 16 GB RAM ausgestattet). Das Problem ist, dass ich die Grenze so nativ wie möglich halten muss, da ein DEM aus dem resultierenden Polygon extrahiert werden muss. Wenn ich mein Raster weiter nach unten taste, verliere ich diese Grenze. Irgendwelche Abhilfe?
Csheth