首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >terra:分类保存切点,并在terra::as.polygon中将它们作为类名使用

terra:分类保存切点,并在terra::as.polygon中将它们作为类名使用
EN

Stack Overflow用户
提问于 2022-02-22 19:51:41
回答 1查看 152关注 0票数 0

下面是一些显示问题的代码:

1-重新分类光栅

建立类极限向量

代码语言:javascript
复制
class.limits

#[1] 45.16490 50.12986 51.40991 52.68021 54.00000 55.42731 57.71864 60.14900 69.57393

用这些来分类

代码语言:javascript
复制
class(sg.crop)
#[1] "SpatRaster"
#attr(,"package")
#[1] "terra"

sg.class <- terra::classify(sg.crop, rcl=class.limits)

请参阅重新分类的值:

代码语言:javascript
复制
table(values(sg.class))

#  0    1    2    3    4    5    6    7
#747 1164 1054  829  607  772  770  937

到目前为止,还不错..。但请注意:

代码语言:javascript
复制
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]"

类限制保留为引用。和试图通过为该向量赋值来更改名称的方法不起作用:

代码语言:javascript
复制
levels(sg.class$class)[[1]] <- 1:8
#Error: [subset] undefined layer(s) selected: deepcopy

我不知道这意味着什么。但问题来了:

2-将分类地图聚合

代码语言:javascript
复制
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]

因此,现在的多边形光栅有类限制的标签,而不是类,它是由

代码语言:javascript
复制
terra::classify.

我也想不出怎么改变这些。在我看来,类标签,而不是切点值,应该是多边形的值。我敢肯定,大约一年前,当我第一次做这个分析时,情况就是这样。

EN

回答 1

Stack Overflow用户

发布于 2022-02-23 09:28:03

下面是一些示例数据(来自?classify)

代码语言:javascript
复制
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)

您可以创建多边形并添加感兴趣的变量。

代码语言:javascript
复制
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中删除这些类别:

代码语言:javascript
复制
 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
 #                  2
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71227492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档