我有一个巨大的栅格 (rasterA),其值范围为 1:928863,并且我希望将另一个栅格 rasterB 中的值设置为 NA,其中值(rasterA) > 300。
光栅很大:
library(terra)
set.seed(0)
rasterA <- rast(nrows=42893, ncols=52031)
rasterB <- rasterA
values(rasterA) <- sample(1:928563, ncell(rasterA), replace=TRUE))
values(rasterB) <- 1
我当前的方法(已经运行了几个小时并且没有完成的迹象)是:
rasterA <- subst(rasterA, 300:928863, NA)
然后我要遵循:
rasterB <- mask(rasterB, rasterA)
当该代码运行时,我想:如果我可以将 rasterA 分类(非常快的操作),并按类别屏蔽 rasterB 会怎样?像这样:
leveller <- data.frame(id = 1:928863, dist= c(rep("good", 300), rep(NA, 928563)))
levels(rasterA) <- leveller
rasterB <- mask(rasterB, rasterA)
似乎可以运行,但没有产生我所希望的结果。
这是一个足够小可以运行的示例: 我想用分类栅格 (rf) 掩盖我的栅格 (r),其中 rf == NA
library(terra)
set.seed(0)
rf <- rast(nrows=10, ncols=10)
values(rf) <- sample(3, ncell(rf), replace=TRUE)
cls <- data.frame(id=1:3, cover=c("forest", "water", NA))
levels(rf) <- cls
r <- rast(nrows=10, ncols=10)
values(r) <- 1
r <- mask(r, rf)
r 仍然是一个所有值为 1 的栅格
那么,我可以按分类栅格的因子级别进行屏蔽吗?或者有没有更快的方法来完成我最初想要的遮罩?
这就是我的处理方法
示例数据
library(terra)
rB <- rA <- rast(nrows=100, ncols=100)
rA <- init(rA, "cell")
values(rB) <- 1
解决方案
rM <- mask(rB, rA > 1000, maskvalue=FALSE)