Contar el valor ráster en un cuadro delimitador (extensión espacial)


11

Dado un cuadro delimitador, ¿cómo puedo contar el número de valores específicos (por ejemplo, estoy interesado en el número de value == 1) en un ráster en 1) arcpy, o 2) paquete ráster en R?

Respuestas:


10

En R, use croppara extraer los valores y ( por ejemplo ) tablepara contarlos.


Como ejemplo, creemos una cuadrícula de 1 grado que cubra el mundo:

library(raster)
x.raster <- raster(outer(179:0, 0:359, `+`), xmn=-180, xmx=180, ymn=-90, ymx=90)

El cuadro delimitador se convierte en un extentobjeto para usar crop:

y.extent <- extent(cbind(c(-125,20), c(-60,50)))
y.raster <- crop(x.raster, y.extent)

Una vez hecho esto, la tabulación es sencilla:

table(getValues(y.raster))

En esta salida, la primera fila enumera los valores y la segunda enumera sus conteos correspondientes:

165 166 167 ... 257 258
  1   2   3 ...   2   1

Como verificación podemos trazar el ráster y la extensión:

plot(x.raster)
plot(y.extent, add=T)

Mapa


3

Una adición menor: también podría usar la función "freq" (segura para la memoria):

Siguiendo la respuesta de whuber:

library(raster)
x.raster <- raster(outer(179:0, 0:359, '+'), xmn=-180, xmx=180, ymn=-90, ymx=90)
y.extent <- extent(cbind(c(-125,20), c(-60,50)))
y.raster <- crop(x.raster, y.extent)

Pero ahora hazlo:

freq(y.raster)

Solo importa para objetos muy grandes (ráster en archivo). 'freq' devuelve una matriz de dos columnas (valor / recuento) mientras que 'tabla' devuelve una tabla.


¿hay alguna forma de realizar una consulta espacial en lugar de recortar la imagen? El recorte puede ser muy lento para el procesamiento.
Visto el

1
El recorte debe ser muy rápido. Como prueba, cronometré la cropoperación para una cuadrícula de un minuto que cubre la tierra: tiene 10800 filas y 21600 columnas (233,280,000 celdas). El cultivo se ejecutó en 1.36 segundos de tiempo total transcurrido.
whuber

También creo que debería ser rápido, pero podría comparar lo anterior con esta consulta espacial: v <- extract(x.raster, y.extent) seguido por table(v)
Robert Hijmans

1
Robert, ¿de qué biblioteca es extract? No forma parte rastery el Rsistema de ayuda ( ??) tampoco encuentra ninguna función con este nombre.
whuber

Es una función en el paquete ráster. ? extracto muestra que (al menos para mí lo hace)
Robert Hijmans
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.