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.