Contar o valor da varredura em uma caixa delimitadora (extensão espacial)

11

Dada uma caixa delimitadora, como posso contar o número de valores específicos (por exemplo, estou interessado no número de value == 1) em uma varredura em 1) arcpy ou 2) pacote raster em R?

Visto
fonte

Respostas:

10

Em R, use croppara extrair os valores e ( por exemplo ) tablepara contá-los.


Como exemplo, vamos criar uma grade de 1 grau cobrindo o globo:

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

A caixa delimitadora é convertida em um extentobjeto para usar crop:

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

Feito isso, a tabulação é direta:

table(getValues(y.raster))

Nesta saída, a primeira linha lista os valores e a segunda lista suas contagens correspondentes:

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

Como verificação, podemos traçar a varredura e a extensão:

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

Mapa

whuber
fonte
3

Uma pequena adição: você também pode usar a função (segura para a memória) "freq":

Seguindo a resposta do 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)

Mas agora faça:

freq(y.raster)

É importante apenas para objetos muito grandes (varredura em arquivo). 'freq' retorna uma matriz de duas colunas (valor / contagem) enquanto 'tabela' retorna uma tabela.

Robert Hijmans
fonte
existe alguma maneira apenas executar consulta espacial em vez de cortar a imagem? O corte pode ser muito lento para o processamento.
Visto
1
O corte deve ser muito rápido. Como teste, cronometrei a cropoperação para uma grade de um minuto cobrindo a terra: possui 10800 linhas e 21600 colunas (233.280.000 células). A colheita foi executada em 1,36 segundos no tempo total decorrido.
whuber
Eu também acho que deve ser rápido, mas você pode comparar o acima com esta consulta espacial: v <- extract(x.raster, y.extent) seguido por table(v)
Robert Hijmans 24/12
1
Robert, de que biblioteca é extract? Isso não faz parte rastere o Rsistema de ajuda ( ??) também não encontra nenhuma função com esse nome.
whuber
É uma função no pacote raster. ? extrato mostra que (pelo menos para mim ele faz)
Robert Hijmans