咨询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
相关产品推荐
相关产品推荐

