我想知道是否有办法为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")
答案 0 :(得分:1)
您可以使用raster::match
。
zonal(match(r1, 6),r2, "count")
从plot(match(r1, 6))
可以看出,它只返回包含所需值的栅格单元格。所有其他单元格均为NA
。
r1==6
会返回一个向量,因此无法在焦点中使用。