按分类栅格划分的地形掩模栅格

问题描述 投票:0回答:1

我有一个巨大的栅格 (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 的栅格

那么,我可以按分类栅格的因子级别进行屏蔽吗?或者有没有更快的方法来完成我最初想要的遮罩?

raster mask terra
1个回答
0
投票

这就是我的处理方法

示例数据

library(terra)
rB <- rA <- rast(nrows=100, ncols=100)
rA <- init(rA, "cell")
values(rB) <- 1

解决方案

rM <- mask(rB, rA > 1000, maskvalue=FALSE)
© www.soinside.com 2019 - 2024. All rights reserved.