2013-02-20 18 views
8

Ho uno shapefile scaricato da worldwildlife.org per le ecoregioni terrestri del mondo. Il file può essere caricato qui: http://worldwildlife.org/publications/terrestrial-ecoregions-of-the-world.File di forma per la conversione raster in R?

Viene come un file di forma standard e vorrei fare due cose con esso. Primo: prendere la shapefile dalla mia directory locale e agganciarlo in misura di orientale del Nord America (ext = misura (-95, -50, 24, 63))

# 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) 

Sono sicuro che devo usare la funzione rasterize nel pacchetto "raster", ma non riesco ancora a farlo funzionare correttamente. Gradirei qualche suggerimento su come farlo.

+0

Avete bisogno di essere resterizzata? Sarebbe sufficiente ritagliare lo shapefile con un poligono? – mnel

+0

Mnel: ho bisogno di essere rasterizzato in un file .asc per abbinarlo con i miei altri strati ambientali. –

+0

La prima operazione di ritaglio da parte di uno shapfile sarebbe utile, quindi quel nuovo oggetto potrebbe essere rasterizzato e potrebbe essere meno intenso. –

risposta

11

Avete ragione di pensare che dovreste utilizzare raster (anziché le classi spaziali raster sp) per dati raster spaziali. È inoltre necessario utilizzare rgdal (anziché maptools) per leggere, scrivere e manipolare in altro modo i dati vettoriali spaziali.

Questo dovrebbe iniziare:

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

Grazie Josh O'Brien, il codice sembra funzionare molto bene! :) –

+1

Felice di sentirlo. Nota che, in pratica, probabilmente vorrai usare uno dei tuoi livelli raster come template raster ('r' in' rasterize (teow, r) '), e potrebbe essere necessario fare un po 'di manipolazione per ottenere le proj4strings abbinato (anche se sia ** raster ** che ** rgdal ** sono veramente buoni per gestire i metadati di proiezione.). –

+1

Va notato che rasterize() sembra essere incredibilmente instabile e inefficiente con dataset di grandi dimensioni. Recentemente ho provato a rasterizzare una copertura della città di Seattle con una risoluzione di 6 piedi (l'output è un file GeoTIFF da 14 MB, 8095 x 14819) e R ha trascorso circa tre ore con 7 thread prima di "finire" senza output e nessun messaggio di errore . Usare R per generare un raster GeoTIFF vuoto con l'estensione e la risoluzione desiderate, quindi eseguire l'operazione di rasterizzazione tramite gdal (con l'aiuto di QGIS) ha richiesto meno di mezz'ora in un singolo thread. –

Problemi correlati