Compter la valeur raster dans une boîte englobante (étendue spatiale)

11

Étant donné une boîte englobante, comment puis-je compter le nombre de valeurs spécifiques (disons, je suis intéressé par le nombre de value == 1) dans un raster dans 1) arcpy, ou 2) un package raster dans R?

Vu
la source

Réponses:

10

Dans R, utilisez croppour extraire les valeurs et ( par exemple ) tablepour les compter.


À titre d'exemple, créons une grille de 1 degré couvrant le globe:

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

La boîte englobante est convertie en extentobjet afin d'utiliser crop:

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

Cela fait, la tabulation est simple:

table(getValues(y.raster))

Dans cette sortie, la première ligne répertorie les valeurs et la seconde répertorie leurs nombres correspondants:

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

Pour vérifier, nous pouvons tracer le raster et l'étendue:

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

Carte

whuber
la source
3

Un ajout mineur: vous pouvez également utiliser la fonction (sans danger pour la mémoire) "freq":

Suite à la réponse 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)

Mais maintenant:

freq(y.raster)

Cela ne concerne que les très gros objets (raster sur fichier). 'freq' renvoie une matrice à deux colonnes (valeur / nombre) tandis que 'table' renvoie une table.

Robert Hijmans
la source
y a-t-il de toute façon simplement effectuer une requête spatiale plutôt que de recadrer l'image? Le recadrage peut être très lent pour le traitement.
Vu le
1
Le recadrage doit être très rapide. À titre de test, j'ai chronométré l' cropopération pour une grille d'une minute couvrant la terre: elle a 10800 lignes et 21600 colonnes (233 280 000 cellules). Le recadrage a été exécuté en 1,36 secondes de temps total écoulé.
whuber
Je pense aussi que cela devrait être rapide, mais vous pouvez comparer ce qui précède avec cette requête spatiale: v <- extract(x.raster, y.extent) suivi de table(v)
Robert Hijmans
1
Robert, de quelle bibliothèque vient-il extract? Cela ne fait pas partie rasteret le Rsystème d'aide ( ??) ne trouve pas non plus de fonction avec ce nom.
whuber
Il s'agit d'une fonction du package raster. ? extrait montre que (au moins pour moi, il le fait)
Robert Hijmans