10 votos

¿Cálculo de áreas de diferentes clases de raster en R?

He generado un raster como archivo *.tiff en R, con cuatro clases. Me gustaría calcular el área ocupada por cada clase raster. Cada clase tiene un valor (-5, -4, -3, -2) - Supongo que también podría contar el número de píxeles en cada clase raster y multiplicarlo por el tamaño de celda (0,23, creo).

¿Cómo puedo calcular la superficie por clase?

7voto

Jay Bazuzi Puntos 194

Incluso si su raster es lat-largo y por lo tanto variar el área de la celda, usted puede hacer esto en R mediante la adición de las áreas que corresponden a las células con sus valores utilizando la base tapply función:

Primero configure algunos datos ficticios:

> r = raster()
> r[] = sample(-5:-2, ncell(r), replace=TRUE)

Entonces haz esto:

> tapply(area(r), r[], sum)
       -5        -4        -3        -2 
126376977 126301228 125943687 129736879 

area(r) crea una trama en la que cada celda tiene como valor su área. tapply a continuación, suma esto sobre las áreas agrupadas por el valor en r .

4voto

Michal Stefanow Puntos 106

Esto puede hacerse utilizando dplyr con algo como lo siguiente:

library(dplyr)
library(raster)

r = raster()
r[] = sample(-5:-2, ncell(r), replace=TRUE)

as.data.frame(r) %>%
  group_by(layer) %>%
  tally() %>%
  mutate(area = n * res(r)[1] * res(r)[2])

# A tibble: 4 x 3
  layer     n  area
  <int> <int> <dbl>
1    -5 16260 16260
2    -4 16285 16285
3    -3 16203 16203
4    -2 16052 16052

2voto

Dan Puntos 16

También puedes obtener las frecuencias celulares y las proporciones. Si está en un sistema de coordenadas proyectadas, puede obtener las áreas de clase multiplicando la resolución por el número de células.

library(raster)
r <- raster(matrix(round(runif(25*25, 1, 4)),25,25))
  ( f <- freq(r) )
    ( p <- data.frame(f, p=f[,2] / sum(f[,2])) )

1voto

rafek Puntos 126

Aquí hay otra opción que debería funcionar. Sustituya -5 con el valor de cada clase. Determina el número de píxeles de cada clase y, a continuación, lo multiplica por el área de cada píxel (es decir, la resolución al cuadrado).

vals <- getValues(myraster) length(subset(vals, vals == -5)) * res(myraster)^2

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X