Umwandeln eines Polygons in ein Raster mit R

15

Ich versuche, ein Shapefile innerhalb von R in ein Raster zu konvertieren. Mein Ansatz ist es, das Raster wie folgt einzulesen:

library(rgdal) # Loads SP package by default
demo <- readOGR('F:/data/', 'shapefile') # Creates a SpatialPolygonsDataFrame class (sp)

Das funktioniert gut und ich kann es plotten. Es ist jedoch ein großes Shapefile und ich möchte es in ein Raster konvertieren. Ich habe Folgendes versucht:

r <- raster(ncol=180, nrow=180)
Demo_ras = rasterize(r, demo, 'pop')  # pop is an integer here

Fehlermeldung:

Error in function (classes, fdef, mtable)  : 
  unable to find an inherited method for function "rasterize", for signature "RasterLayer", "SpatialPolygonsDataFrame"

Ich bin etwas verwirrt, was die richtige Reihenfolge der Argumente ist. Ich habe es auch versucht:

Demo_ras = rasterize(demo, r, 'pop')

Was zu folgendem Fehler führt:

Error in .polygonsToRaster(x, y, ...) : 
  polygon and raster have no overlapping areas

Obwohl es sinnvoll ist, kein Raster für einen Bereich zu generieren, der das nicht abdeckt SpatialPolygonsDataFrame, bin ich mir nicht sicher, welche Informationen ich angeben muss, damit das Raster den SpatialPolygonsDataFrameBereich enthält.

djq
quelle

Antworten:

23

Die Funktion rasterize () möchte standardmäßig zuerst die Form (das Polygon) und dann das Raster haben, daher Ihr erster Fehler. Der zweite Befehl, den Sie gezeigt haben, Demo_ras = rasterize(demo, r, 'pop')ist der richtige, aber wie Sie festgestellt haben, müssen die Ausmaße übereinstimmen!

Sie können die Ausmaße des Rasters so zuweisen, dass dieselben Ausmaße des Polygons abgedeckt werden:

extent(r) <- extent(demo)

... dies sollte für das von Ihnen angegebene Beispiel funktionieren, solange 'pop' der korrekte Name einer Variablen in 'demo' ist. Das Folgende funktionierte gerade (R 2.14 / OSX), wobei AREA eine reelle Zahlenspalte in border.shp ist:

poly <- readOGR("/workingdirectory", "boundary") # does not work  with final slash '/' 
r <- raster(ncol=180, nrow=180)
extent(r) <- extent(poly)
rp <- rasterize(poly, r, 'AREA')
Simbamangu
quelle
Hab deine Bearbeitung gesehen und nochmal überprüft - der letzte Schrägstrich ist unter OSX anscheinend optional, nehme ich es nicht mit Windows? Wissenswert!
Simbamangu
hmmm, ich hatte ein Problem mit dem Schrägstrich unter OSX und Windows. Ich bin nicht sicher, ob wir dieselbe Version verwenden oder nicht.
12.
OSX 10.7.2 / R 2.14 auf meinem; auf jeden Fall funktioniert so oder so. Was benutzt du?
Simbamangu
Um die Konvertierung zu automatisieren, schrieb ich Folgendes
Berry