如何使用 `terra` 在 R 中通过条件语句对栅格进行子集化?
How can I subset a raster by conditional statement in R using `terra`?
我正在尝试仅绘制我正在使用的分类土地覆盖栅格中的某些值。我已经使用 terra
包将它加载到 R 中,并且绘制得很好。但是,由于原始数据没有图例,我想找出哪个栅格值对应于地图上的内容。
类似于此处提供的答案:
我试过使用以下行:
> landcover
class : SpatRaster
dimensions : 20057, 63988, 1 (nrow, ncol, nlyr)
resolution : 0.0005253954, 0.0005253954 (x, y)
extent : -135.619, -102, 59.99989, 70.53775 (xmin, xmax, ymin, ymax)
coord. ref. : lon/lat WGS 84 (EPSG:4326)
source : spat_n5WpgzBuVAV3Ijm.tif
name : CAN_LC_2015_CAL_wgs
min value : 1
max value : 18
> plot(landcover[landcover == 18])
Error: cannot allocate vector of size 9.6 Gb
但是,此行需要很长时间才能 运行 并产生向量内存错误。该对象在全局环境中为1.3 kb,原始tif约为300 mb。
我想我找到了在绘图函数中编写条件的解决方案,如下所示:
plot(landcover == 18)
对于那些寻找可重现示例的人,只需加载 rlogo:
s <- rast(system.file("ex/logo.tif", package="terra"))
s <- s$red
plot(s == 255)
您可以使用 cats
找出哪些值对应于哪些类别。
library(terra)
set.seed(0)
r <- rast(nrows=10, ncols=10)
values(r) <- sample(3, ncell(r), replace=TRUE) - 1
cls <- c("forest", "water", "urban")
levels(r) <- cls
names(r) <- "land cover"
cats(r)[[1]]
# ID category
#1 0 forest
#2 1 water
#3 2 urban
要为一个类别绘制逻辑(布尔)图层,您可以执行
plot(r == "water")
从上面可以看出,在这种情况下,它等同于
plot(r == 1)
我正在尝试仅绘制我正在使用的分类土地覆盖栅格中的某些值。我已经使用 terra
包将它加载到 R 中,并且绘制得很好。但是,由于原始数据没有图例,我想找出哪个栅格值对应于地图上的内容。
类似于此处提供的答案:
我试过使用以下行:
> landcover
class : SpatRaster
dimensions : 20057, 63988, 1 (nrow, ncol, nlyr)
resolution : 0.0005253954, 0.0005253954 (x, y)
extent : -135.619, -102, 59.99989, 70.53775 (xmin, xmax, ymin, ymax)
coord. ref. : lon/lat WGS 84 (EPSG:4326)
source : spat_n5WpgzBuVAV3Ijm.tif
name : CAN_LC_2015_CAL_wgs
min value : 1
max value : 18
> plot(landcover[landcover == 18])
Error: cannot allocate vector of size 9.6 Gb
但是,此行需要很长时间才能 运行 并产生向量内存错误。该对象在全局环境中为1.3 kb,原始tif约为300 mb。
我想我找到了在绘图函数中编写条件的解决方案,如下所示:
plot(landcover == 18)
对于那些寻找可重现示例的人,只需加载 rlogo:
s <- rast(system.file("ex/logo.tif", package="terra"))
s <- s$red
plot(s == 255)
您可以使用 cats
找出哪些值对应于哪些类别。
library(terra)
set.seed(0)
r <- rast(nrows=10, ncols=10)
values(r) <- sample(3, ncell(r), replace=TRUE) - 1
cls <- c("forest", "water", "urban")
levels(r) <- cls
names(r) <- "land cover"
cats(r)[[1]]
# ID category
#1 0 forest
#2 1 water
#3 2 urban
要为一个类别绘制逻辑(布尔)图层,您可以执行
plot(r == "water")
从上面可以看出,在这种情况下,它等同于
plot(r == 1)