下面是一些显示问题的代码:
1-重新分类光栅
建立类极限向量
class.limits
#[1] 45.16490 50.12986 51.40991 52.68021 54.00000 55.42731 57.71864 60.14900 69.57393用这些来分类
class(sg.crop)
#[1] "SpatRaster"
#attr(,"package")
#[1] "terra"
sg.class <- terra::classify(sg.crop, rcl=class.limits)请参阅重新分类的值:
table(values(sg.class))
# 0 1 2 3 4 5 6 7
#747 1164 1054 829 607 772 770 937到目前为止,还不错..。但请注意:
levels(sg.class$class)
#[[1]]
#[1] "(45.164902–50.12986]" "(50.12986–51.409912]" "(51.409912–52.68021]" "(52.68021–54]" "(54–55.427315]"
#[6] "(55.427315–57.718636]" "(57.718636–60.148998]" "(60.148998–69.573929]"类限制保留为引用。和试图通过为该向量赋值来更改名称的方法不起作用:
levels(sg.class$class)[[1]] <- 1:8
#Error: [subset] undefined layer(s) selected: deepcopy我不知道这意味着什么。但问题来了:
2-将分类地图聚合
sg.poly <- terra::as.polygons(sg.class, values = TRUE, dissolve=TRUE)
values(sg.poly)
# class
#1 (45.164902–50.12986]
#2 (50.12986–51.409912]
#3 (51.409912–52.68021]
#4 (52.68021–54]
#5 (54–55.427315]
#6 (55.427315–57.718636]
#7 (57.718636–60.148998]
#8 (60.148998–69.573929]因此,现在的多边形光栅有类限制的标签,而不是类,它是由
terra::classify.我也想不出怎么改变这些。在我看来,类标签,而不是切点值,应该是多边形的值。我敢肯定,大约一年前,当我第一次做这个分析时,情况就是这样。
发布于 2022-02-23 09:28:03
下面是一些示例数据(来自?classify)
library(terra)
r <- rast(ncols=10, nrows=10, names="test")
values(r) <- (0:99)/99
breaks <- c(0, 0.25, 0.5, 1)
x <- classify(r, breaks, include.lowest=TRUE)您可以创建多边形并添加感兴趣的变量。
p <- as.polygons(x)
p$breaks <- breaks[-1]
p$ID <- 1:nrow(p)
values(p)
# test breaks ID
#1 [0–0.25] 0.25 1
#2 (0.25–0.5] 0.50 2
#3 (0.5–1] 1.00 3您还可以像这样从SpatRaster中删除这些类别:
levels(x) <- NULL
as.polygons(x)
#class : SpatVector
#geometry : polygons
#dimensions : 3, 1 (geometries, attributes)
#extent : -180, 180, -90, 90 (xmin, xmax, ymin, ymax)
#coord. ref. : lon/lat WGS 84
#names : test
#type : <int>
#values : 0
# 1
# 2https://stackoverflow.com/questions/71227492
复制相似问题