[英]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.