R 栅格:以像元值为条件的范围



我想以某些像元值为条件获取栅格图层的范围。请考虑以下示例:

raster1 是一个大型栅格对象,填充的值介于 1 和 1000 之间。但是,我只想获取值为 100 的像素的extent。由于这部分像元应该挤在一个小区域内,因此extent应该相当窄。一旦我知道那个盒子的坐标,我就可以crop这个小区域。

到目前为止,我的方法是将所有值 != 100 替换为 NA - 如相关问题中所建议的那样。考虑到光栅对象的整体大小,此步骤需要花费大量时间,并在我想crop的区域投入大量计算能力。

有谁知道如何获得以某个像素值为条件的extent,而不需要事先对整个对象进行重新分类?

这是另一种方法。

示例数据:

library(raster)
r <- raster(ncol=18,nrow=18)
values(r) <- 1
r[39:45] <- 100
r[113:115] <- 100
r[200] <- 100

"标准"方式:

x <- r == 100
s <- trim(x, values=FALSE) 

通过创建范围来备用路径:

xy <- rasterToPoints(r, function(x){ x ==100 })  
e <- extent(xy[,1:2])
e <- alignExtent(e, r, snap='out')
v <- crop(r, e)

无论采用哪种方式,都需要查看所有像元,但至少不需要创建另一个大型栅格。

最新更新