2013-02-20 12 views
8

Ich habe ein Shapefile von worldwildlife.org heruntergeladen für die irdischen Ökoregionen der Welt. Die Datei kann hier geladen werden: http://worldwildlife.org/publications/terrestrial-ecoregions-of-the-world.Shapefile zu Raster-Konvertierung in R?

Es kommt als Standard-Shape-Datei und ich möchte zwei Dinge damit machen. Erstens: die Shape-Datei von meinem lokalen Verzeichnis nehmen und es in einem Ausmaß des östlichen Nordamerika (ext = Umfang (-95, -50, 24, 63)) clip

# Read shapefile using package "maptools" 
eco_shp <- readShapeLines("F:/01_2013/Ecoregions/Global/wwf_terr_ecos.shp", 
          proj4string=CRS("+proj=utm +zone=33 +datum=WGS84")) 


# Set the desired extent for the final raster using package "raster" 
ext <- extent(-95, -50, 24, 63) 

Ich bin sicher, dass ich verwenden müssen die Rasterize-Funktion im Paket "Raster", aber ich bin immer noch nicht in der Lage, es richtig funktionieren zu lassen. Ich würde mich über Vorschläge freuen, wie dies zu tun ist.

+0

Brauchen Sie es gerastert werden? Würden das Shapefile durch ein Polygon abgeschnitten werden? – mnel

+0

Mnel: Ich brauche es, um in eine .asc-Datei gerastert zu werden, um mit meinen anderen Umgebungs-Layern übereinzustimmen. –

+0

Der erste Schritt des Clippings durch ein Shapfile wäre hilfreich, dann könnte das neue Objekt gerastert werden und könnte weniger intensiv sein. –

Antwort

11

Sie haben recht, wenn Sie denken, dass Sie die räumlichen Raster-Daten raster (statt der sp Raster-Spatial-Klassen) verwenden sollten. Sie sollten auch rgdal (statt maptools) zum Lesen, Schreiben und sonstigen Manipulieren von räumlichen Vektordaten verwenden.

Dies sollte Ihnen den Einstieg:

library(rgdal) 
library(raster) 

## Read in the ecoregion shapefile (located in R's current working directory) 
teow <- readOGR(dsn = "official_teow/official", layer = "wwf_terr_ecos") 

## Set up a raster "template" to use in rasterize() 
ext <- extent (-95, -50, 24, 63) 
xy <- abs(apply(as.matrix(bbox(ext)), 1, diff)) 
n <- 5 
r <- raster(ext, ncol=xy[1]*n, nrow=xy[2]*n) 

## Rasterize the shapefile 
rr <-rasterize(teow, r) 

## A couple of outputs 
writeRaster(rr, "teow.asc") 
plot(rr) 

enter image description here

+0

Danke Josh O'Brien, der Code scheint sehr gut zu funktionieren! :) –

+1

Froh, das zu hören. Beachten Sie, dass Sie in der Praxis wahrscheinlich einen eigenen Raster-Layer als Vorlagenraster verwenden möchten ("r" in "rasterize (teow, r)"), und Sie müssen eventuell etwas fiedeln, um die proj4-Strings zu erhalten abgestimmt (obwohl sowohl ** raster ** als auch ** rgdal ** wirklich gut sind im Umgang mit Projektionsmetadaten). –

+1

Es sollte angemerkt werden, dass Rasterize() mit großen Datenmengen unmöglich instabil und ineffizient zu sein scheint. Ich habe kürzlich versucht, eine Abdeckung der Stadt Seattle mit einer Auflösung von 6 Fuß zu rastern (die Ausgabe ist eine 14 MB GeoTIFF Datei, 8095 x 14819) und R hat ungefähr drei Stunden damit verbracht, 7 Fäden zu laufen, ohne "fertig" zu sein und keine Fehlermeldung . Die Verwendung von R zum Erzeugen eines leeren GeoTIFF-Rasters mit der gewünschten Ausdehnung und Auflösung und das anschließende Ausführen der Rasterisierungsoperation über gdal (mit Hilfe von QGIS) dauerte weniger als eine halbe Stunde in einem einzelnen Thread. –

Verwandte Themen