【问题标题】:Calculating area of raster with certain values in R用R中的某些值计算栅格的面积
【发布时间】:2016-11-19 22:57:32
【问题描述】:

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

【问题讨论】:

  • 光栅是什么意思?光栅包,或者只是一个矩阵,还是?
  • 好的,看raster包,你可以直接比较,试试table(values(cut(r,intervals)))但是如果你还没有使用raster,可以探索相关的功能。使用r= raster ("file.tif") 来读取你的文件

标签: r raster r-raster


【解决方案1】:

如果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])
})

【讨论】:

  • 非常感谢,这正好回答了我的问题!
【解决方案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)
    }    
}

【讨论】:

    猜你喜欢
    • 2018-05-13
    • 2017-09-23
    • 1970-01-01
    • 2022-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多