Conta il valore raster in un rettangolo di selezione (estensione spaziale)


11

Dato un rettangolo di selezione, come posso contare il numero di valori specifici (ad esempio, sono interessato al numero di value == 1) in un pacchetto raster in 1) arcpy o 2) in R?

Risposte:


10

In R, utilizzare cropper estrarre i valori e ( ad esempio ) tableper contarli.


Ad esempio, creiamo una griglia di 1 grado che copre il globo:

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

Il rettangolo di selezione viene convertito in un extentoggetto per utilizzare crop:

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

Fatto ciò, la tabulazione è semplice:

table(getValues(y.raster))

In questo output la prima riga elenca i valori e la seconda elenca i conteggi corrispondenti:

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

Come controllo possiamo tracciare il raster e l'estensione:

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

Carta geografica


3

Un'aggiunta minore: è possibile utilizzare anche la funzione (sicura per la memoria) "freq":

A seguito della risposta di 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)

Ma ora fai:

freq(y.raster)

È importante solo per oggetti molto grandi (raster su file). 'freq' restituisce una matrice a due colonne (valore / conteggio) mentre 'tabella' restituisce una tabella.


c'è comunque solo una query spaziale piuttosto che ritagliare l'immagine? Il ritaglio potrebbe essere molto lento per l'elaborazione.
Visto il

1
Il ritaglio dovrebbe essere molto veloce. Come test, ho cronometrato l' cropoperazione per una griglia di un minuto che copre la terra: ha 10800 file e 21600 colonne (233.280.000 celle). Il raccolto è stato eseguito nel tempo totale trascorso di 1,36 secondi.
whuber

Penso anche che dovrebbe essere veloce, ma potresti confrontare quanto sopra con questa domanda spaziale: v <- extract(x.raster, y.extent) seguito da table(v)
Robert Hijmans,

1
Robert, da quale biblioteca viene extract? Non fa parte di rastere il Rsistema di aiuto ( ??) non trova alcuna funzione con questo nome.
whuber

È una funzione nel pacchetto raster. L'estratto mostra che (almeno per me lo fa)
Robert Hijmans,
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.