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

时间:2016-11-19 22:57:32

标签: r raster r-raster

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

2 个答案:

答案 0 :(得分:3)

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

ras

这将返回包含0.1 - 0.2范围内的值的像素数。如果将其乘以平方单元格大小:

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

你得到的面积是平方米。

只需更改值即可调整范围,或编写迭代预定义值范围的函数/循环,甚至可以创建条形图。

类似:

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

答案 1 :(得分: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)
    }    
}