计算R中具有特定值的栅格区域

问题描述 投票:-1回答:2

我有一个raster图像(.tif),在0到1之间的每个像素中都有连续值。我想在这个raster中计算面积(也可以是像素数),它具有一组值间隔中的值:即0.1 - 0.2,0.3 - 0.4,0.7 - 0.8。最终目标是确定哪个区间占据更大的区域。在R尝试或如何处理它的任何想法?

r raster r-raster
2个回答
3
投票

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

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

这将返回包含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
投票

由于我找不到任何能够满足我需要的功能,我编写了这个简单的函数来计算光栅中某个像素值所覆盖的公顷面积。默认值设置为1,在使用二进制掩码时非常有用,但可以使用参数'clas'进行更改。它用西班牙语写成,但警告说“分类中没有类”(我使用有监督的分类)。

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)
    }    
}
© www.soinside.com 2019 - 2024. All rights reserved.