用R中的某些值计算栅格面积

Calculating area of raster with certain values in R

我有一个 raster 图像 (.tif),每个像素的值都在 0 和 1 之间。 我想计算这个 raster 中的面积(也可以是多个像素),它的值在一组值区间内:即 0.1 - 0.2、0.3 - 0.4、0.7 - 0.8。 最终目的是看哪个区间占据的面积更大。 在 R?

中可以尝试哪些功能或如何实现它的任何想法

如果 ras 是您的光栅图像,您可以执行以下操作:

sum(ras[] >= 0.1 & ras[] <= 0.2)

此 returns 包含 0.1 - 0.2 范围内值的像素数。如果将其乘以平方像元大小:

sum(ras[] >= 0.1 & ras[] <= 0.2) * res(ras)[1]^2

你得到了以平方米为单位的面积。

只需更改值来调整范围,或者编写一个函数/循环来遍历预定义的值范围,甚至可以创建条形图。

类似于:

intervals <- list(c(0.1,0.2), 
                  c(0.2,0.3),
                  c(0.3,0.4))

sapply(intervals, function(x) { 
  sum(ras[] > x[1] & ras[] <= x[2])
})

由于找不到任何函数满足我的需要,我编写了这个简单的函数来计算栅格中特定像素值覆盖的面积(以公顷为单位)。默认值设置为 1,在使用二进制掩码时非常有用,但可以使用参数 'clas' 进行更改。它是用西班牙语写的,但警告说 "class not present in the classification"(我使用监督分类)。

area.r<-function(x,clas=1){

  '%ni%'<-Negate('%in%')
  if(clas%ni%unique(x)){return(print("clase no presente en la clasificación"))} else 
    {
      area<-length(x[x%in%clas])*(res(x)[1]^2/10000)
      return(area)
    }    
}