Crea poligoni dell'estensione e del limite di un dato Raster in R


13

Voglio creare due poligoni.

  1. Uno è delle dimensioni rettangolari del mio quadro televisivo. So che posso ottenere l'estensione del raster usando r <- raster("band5.tif") e <- extent(r) plot(e)mi dà questo: inserisci qui la descrizione dell'immagine

  2. Come posso creare UN poligono del limite del raster come mostrato di seguito?

Ecco come appare il mio raster:raster ( "band5.tif")

Risposte:


22

Ecco un esempio

library(raster)
# example data
x <- raster(system.file("external/test.grd", package="raster"))

Per ottenere l'estensione rettangolare

e <- extent(x)
# coerce to a SpatialPolygons object
p <- as(e, 'SpatialPolygons')  

Per ottenere un poligono che circonda le celle che non sono NA

# make all values the same. Either do
r <- x > -Inf
# or alternatively
# r <- reclassify(x, cbind(-Inf, Inf, 1))

# convert to polygons (you need to have package 'rgeos' installed for this to work)
pp <- rasterToPolygons(r, dissolve=TRUE)

# look at the results
plot(x)
plot(p, lwd=5, border='red', add=TRUE)
plot(pp, lwd=3, border='blue', add=TRUE)

Non riesco a trovare documentazione sulla r <- r > -Infparte. Cosa sta facendo esattamente? E quanto è diverso da values(r)[!is.na(values(r))] <- 1(che imposta tutte le posizioni che non sono NA in r su 1).
csheth,

3
r > -Infè di base R. Fai c(1,NA,3,NA) > -Infper vedere come funziona. Ho aggiunto un'alternativa ( reclassify). La tua alternativa funziona ma non è buona per oggetti di grandi dimensioni.
Robert Hijmans,

Sto solo aspettando che il mio computer elabori la rasterToPolygons()parte e quindi valuterò la tua risposta. Grazie per il -Infbit sarà molto utile!
csheth,

Per un raster molto grande ciò richiederà un po 'di tempo o potrebbe persino fallire. In tal caso, potresti prendere in considerazione il primo utilizzo aggregatepoiché non vedresti comunque la differenza.
Robert Hijmans,

Anche con solo 100 celle dopo aver eseguito l' aggregate()on, non è stato elaborato (computer dotato di 16 GB di RAM). Il problema è che devo mantenere il confine il più nativo possibile, poiché un DEM deve essere estratto dal poligono risultante. Se campiono ulteriormente il mio raster perderò quel limite. Qualche soluzione?
csheth,
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.