繁体   English   中英

计算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)

这将返回包含值在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'进行更改。 它用西班牙语写,但是警告说“分类中不存在类”(我在监督分类下工作)。

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)
    }    
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM