You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询R terra包as.polygons处理分类栅格的异常溶解行为

terra包as.polygons溶解栅格类别异常的问题

我正在使用LANDFIRE BPS数据集,分析区域为北美西部,需要将BPS_CODE、ZONE和BPS_MODEL三类数据转换为多边形以简化后续计算。以下是针对ZONE类别的测试过程:

初始化与栅格预处理

pkgs <- c("sf", "tidyverse", "terra", "RColorBrewer")
invisible(lapply(pkgs, library, character.only = T))
bps <- rast("BPS/DIRECTORY")
bps_ext <- ext(bps)
bps_ext[2] <- 0 # 快速构建北美西部范围
bps_wna <- crop(bps,bps_ext)
activeCat(bps_wna) <- 2 # 切换到ZONE类别
bps_wna_1km <- aggregate(bps_wna, 33,fun = "modal") # 降为1km分辨率节省计算资源
plot(bps_wna_1km) # 注:默认配色方案颜色不足,会出现ZONE 10和20等类别颜色重复的情况

栅格图显示区域边界清晰,预处理逻辑合理。

terra包as.polygons转换异常

执行以下代码尝试直接转换并溶解:

bps_polygon_zone <- as.polygons(bps_wna_1km,dissolve =T,na.rm = T,trunc = F)
plot(bps_polygon_zone, col = RColorBrewer::brewer.pal(12,"Set3"), lwd = 0.01)

结果未正确围绕ZONE类别生成溶解后的多边形,行为异常。

SF包处理得到正常结果

改用SF包进行后处理:

bps_polygon_zone_sf <- st_as_sf(bps_polygon_zone) %>%
  group_by(ZONE) %>%
  summarize(geometry = st_union(geometry))
plot(vect(bps_polygon_zone_sf), col = RColorBrewer::brewer.pal(12,"Set3"), lwd = 0.01)

此结果符合预期,仅需移除图中深色小点对应的NA值即可。

疑问与诉求

我理解as.polygons的dissolve=T参数应当对相同类别(如ZONE)的要素进行溶解,但当前版本(terra 1.6-47)未正确执行该操作。由于现有大量代码依赖terra,我暂不敢更新版本,担心引发兼容问题。作为terra的主要维护者Robert,想请教你对该异常行为的看法,若我的示例或描述存在问题,请指出。

内容的提问来源于stack exchange,提问作者souma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 19:52:45