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?

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


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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.