R中的栅格:创建特定单元格值的区域计数,无需重新分类

时间:2017-12-07 09:01:19

标签: r geospatial raster

我想知道是否有办法为zonal statistics创建RasterLayerObjects,特别是R中给定单元格值(例如土地使用类)的count重新分类整个栅格。该解决方案应该具有内存效率,以便处理大型光栅文件,即不需要将值提取到R中的矩阵中。

以下是我如何处理它的例子。在这种情况下,我将原始栅格重新分类为仅保留1表示所有其他值的兴趣值和缺失值。

我提出的解决方案创建了冗余数据和其他处理步骤,以实现我的初始目标。我认为像zonal(r1[r1==6],r2,"count")这样的东西会起作用,但显然它不起作用(见下文)。

# generate reproducible Raster 
library("raster")

## RASTER 1 (e.g. land-use classes)
r1 <- raster( crs="+proj=utm +zone=31")
extent(r1) <- extent(0, 100, 0, 100)
res(r1) <- c(5, 5)
values(r1) <- sample(10, ncell(r1), replace=TRUE)
plot(r1)

## RASTER 2 (containing zones of interest)
r2 <- raster( crs="+proj=utm +zone=31")
extent(r2) <- extent(0, 100, 0, 100)
res(r2) <- c(5, 5)
values(r2) <- c(rep(1,100),rep(2,100),rep(3,100),rep(4,100))
plot(r2)

# (1) ZONAL STATISTICS
# a. how many cells per zone (independent of specific cell value)
zonal(r1,r2,"count")

# b. how many cells per zone of specific value 6
zonal(r1[r1==6],r2,"count")
# -> fails

# with reclassification
r1.reclass<-
  reclassify(r1,
             matrix(c(1,5,NA,
                    5.5,6.5,1, #class of interest 
                    6.5,10,NA),
                    ncol=3,
                    byrow = T),
             include.lowest=T # include the lowest value from the table.
           )
zonal(r1.reclass,r2,"count")

1 个答案:

答案 0 :(得分:1)

您可以使用raster::match

zonal(match(r1, 6),r2, "count")

plot(match(r1, 6))可以看出,它只返回包含所需值的栅格单元格。所有其他单元格均为NA

不幸的是,你的尝试中使用的

r1==6会返回一个向量,因此无法在焦点中使用。