Come rasterizzare i poligoni spaziali in R?


10

Sto cercando di estrarre i valori batimetrici della mia area di interesse da un livello raster batimetrico mondiale usando la funzione 'rasterize' nel pacchetto {sp}.

* Modifiche: ho trovato la funzione 'Estrai' che sembra essere più ciò che sto cercando.

Questo è quello che ho fatto finora:

> class(subarea0) #This is my area of interest (Eastern Canadian Arctic Sea)
[1] "SpatialPolygons"
attr(,"package")
[1] "sp"

> extent(subarea0)
class       : Extent 
xmin        : -82.21997 
xmax        : -57.21667 
ymin        : 60.2 
ymax        : 78.16666

library(marelac)
data("Bathymetry")#World bathymetric data in library (marelac)
names(Bathymetry);class(Bathymetry);str(Bathymetry)
[1] "x" "y" "z"
[1] "list"
List of 3
 $ x: num [1:359] -180 -179 -178 -177 -176 ...
 $ y: num [1:180] -89.5 -88.5 -87.5 -86.5 -85.5 ...
 $ z: num [1:359, 1:180] 2853 2873 2873 2873 2873 ...

  raster_bath<-raster(Bathymetry)#Transformed into a raster layer
    extent(raster_bath) <- extent(subarea0)#Transform the extend of my raster to the extend of my SpatialPolygons

>ras_sub0<-rasterize(subarea0,raster_bath)#rasterize my SpatialPolygons (*Edits: not the function that I need here, but I am still interested to learn what results mean)
Found 2 region(s) and 10 polygon(s)
> plot(ras_sub0)
> plot(subarea0, add=TRUE)

inserisci qui la descrizione dell'immagine

> ras_sub0
class       : RasterLayer 
dimensions  : 180, 359, 64620  (nrow, ncol, ncell)
resolution  : 0.06964709, 0.0998148  (x, y)
extent      : -82.21997, -57.21667, 60.2, 78.16666  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +ellps=WGS84 
values      : in memory
min value   : 1 
max value   : 2 
layer name  : layer 

Non capisco il risultato. Perché ricevo 2 colori per ciascuno dei miei poligoni? Cosa vogliono dire?

Come posso infine ottenere il profilo di profondità della batimetria? È qualcosa a che fare con la mia risoluzione o cambiare le dimensioni?

* Modifiche: ok, ora ho fatto quanto segue:

v <- extract(raster_bath, subarea0)#Extract data from my Raster Layer for the locations of my SpatialPolygons

v è un elenco e non sono sicuro di come / sotto quale forma per ricollegare queste informazioni con il mio poligono spaziale ...

Grazie!


Quando dici "ottieni il contorno della profondità della batimetria" vuoi dire che vuoi anche generare contorni?
Simbamangu,

Risposte:


6

La tua linea ras_sub0<-rasterize(subarea0,raster_bath)sta semplicemente prendendo il numero indice dei poligoni e assegnandolo ai valori del raster.

Se vuoi solo l'intersezione tra il poligono e il raster:

subarea0_bathy <- intersect(raster_bath, subarea0)

Aggiornamento : Come osserva @GodinA, sembra che intersechi () a volte non restituisca un raster che ha l'estensione completa del poligono! Per ovviare a questo, puoi intersecare un raster leggermente più grande del tuo originale:

r2 <- raster() # create a generic raster
extent(r2) <- extent(subarea0) + 1 # add 1 degree of extent (0.5 each side)
r3 <- intersect(raster_bath, r2) 

Grazie @Simbamangu, ho provato il comando "intersect", tuttavia quando tracciamo la subarea0_bathy e il mio poligono spaziale (subarea0), non si sovrappongono completamente, perché? Per rispondere alla tua domanda precedente, sì, vorrei eventualmente avere anche il mio profilo batimetrico. Eventuali suggerimenti?
GodinA

Sì, ho guardato l'output dai dati batimetrici e un poligono della Tanzania e vedo lo stesso effetto. Vedi il mio aggiornamento sopra. Per i contorni, è facile come cont <- contour(r3)allora lines(cont)Is not R great?
Simbamangu

Fantastico, sì, R può essere fantastico! Grazie @Simbamangu, funziona! Tuttavia, vorrei tracciare solo i miei poligoni spaziali con il mio contorno di profondità. Forse creare uno SpatialPolygonsDataframe? Usando intersect, ottengo le informazioni per l'intero quadrato che comprende i miei poligoni spaziali. Devo in qualche modo combinare i miei poligoni spaziali con il mio contorno di profondità, ma non sono sicuro di come farlo. Questo è il motivo per cui ho pensato che la funzione "estrai" fosse un buon inizio, ma finisco con un elenco di profondità che non sono sicuro di come poter ricollegare con i miei Poligoni spaziali ... Qualche idea? Grazie ancora!
GodinA,

Con cosa vuoi finire? Contorni (SpatialLines) che si sovrappongono alla sottoarea0? Potresti voler iniziare una nuova domanda poiché ora sta andando oltre l'originale.
Simbamangu,

Sì, vorrei ottenere la mia sottoarea0 solo con il contorno di profondità per questa area definita: gis.stackexchange.com/questions/25112/…
GodinA

1

Ecco un'altra soluzione, utilizzando una funzione di sottoinsieme di base in raster.

# create a raster with the dimensions that you are interested in.
r <- raster(extent(subarea0)+1) # +1 to increase the area
res(r) <- 0.1 # you can change the resolution here. 0.1 can be about 10x10 km if you are close to the equator.
crs(r) <- projection(subarea0) # transfer the coordinate system to the raster

# Now you can add data to the cells in your raster to mark the ones that fall within your polygon.
r[subarea0,] <- 1 # this an easy way to subset a raster using a SpatialPolygons object

# check your raster
plot(r)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.