Crear polígonos de la extensión y el límite de un Ráster dado en R

13

Quiero crear dos polígonos.

  1. Uno es de las extensiones rectangulares de mi trama. Sé que puedo obtener la extensión de la trama usando r <- raster("band5.tif") e <- extent(r) plot(e)me da esto: ingrese la descripción de la imagen aquí

  2. ¿Cómo puedo crear UN polígono del límite del ráster como se muestra a continuación?

Así es como se ve mi trama:ráster ("band5.tif")

csheth
fuente

Respuestas:

22

Aquí hay un ejemplo.

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

Para obtener la extensión rectangular

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

Para obtener un polígono que rodea las celdas que no son 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)
Robert Hijmans
fuente
Parece que no puedo encontrar la documentación de la r <- r > -Infparte. ¿Qué está haciendo exactamente? Y qué tan diferente es values(r)[!is.na(values(r))] <- 1(que establece todas las ubicaciones que no son NA en r en 1).
csheth
3
r > -Infes básico R. Haz c(1,NA,3,NA) > -Infpara ver cómo funciona. He agregado una alternativa ( reclassify). Su alternativa funciona, pero no es buena para objetos grandes.
Robert Hijmans
Solo estoy esperando que mi computadora procese la rasterToPolygons()parte, y luego evaluaré su respuesta. ¡Gracias por el -Infbit, será muy útil!
csheth
Para una trama muy grande, esto llevará un tiempo o incluso puede fallar. En ese caso, podría considerar primero usarlo, aggregateya que de todos modos no vería la diferencia.
Robert Hijmans
Incluso con solo 100 celdas después de ejecutar el aggregate()on r, no se ha procesado (computadora equipada con 16 GB de RAM). El problema es que necesito mantener el límite lo más nativo posible, ya que es necesario extraer un DEM del polígono resultante. Si sigo bajando la muestra de mi trama, perderé ese límite. Cualquier trabajo alrededor?
csheth