用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)
}
}
我有一个 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)
}
}