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

使用多边形裁剪多边形(R语言sf对象):筛选生态区火灾多边形遇错

解决方法:处理WKB类型12错误及筛选生态区内火灾多边形

错误原因分析

ParseException: Unknown WKB type 12 报错通常源于空间数据包含带Z坐标的几何对象(WKB类型12对应MultiPolygon Z),这类带三维信息的几何在st_crop/st_intersection处理时易出现兼容性问题;另外,数据中存在无效几何(如自相交多边形)也可能触发该错误。

具体修复步骤

1. 移除几何的Z坐标,转换为2D对象

先确认几何类型,再剥离Z维度:

# 查看两个对象的几何类型
st_geometry_type(Dplus_size)
st_geometry_type(snevada)

# 移除Z坐标,转为纯2D几何
Dplus_size_2d <- st_zm(Dplus_size, drop = TRUE, what = "ZM")
snevada_2d <- st_zm(snevada, drop = TRUE, what = "ZM")

2. 检查并修复无效几何

无效几何会干扰空间运算,需先修复:

# 检测无效几何
invalid_fire <- which(!st_is_valid(Dplus_size_2d))
invalid_eco <- which(!st_is_valid(snevada_2d))

# 修复无效几何
if(length(invalid_fire) > 0){
  Dplus_size_2d <- st_make_valid(Dplus_size_2d)
}
if(length(invalid_eco) > 0){
  snevada_2d <- st_make_valid(snevada_2d)
}

3. 重新执行生态区筛选操作

使用处理后的2D有效几何执行空间运算:

# 方法1:保留所有与内华达山脉有交集的火灾多边形(含部分重叠)
snv_fire <- st_intersection(Dplus_size_2d, snevada_2d)

# 方法2:仅保留完全包含在内华达山脉内的火灾多边形
snv_fire_full <- Dplus_size_2d[st_within(Dplus_size_2d, snevada_2d, sparse = FALSE), ]

4. 验证坐标系一致性

再次确认两个对象坐标系匹配:

st_crs(Dplus_size_2d) == st_crs(snevada_2d)

返回TRUE则说明坐标系一致,可正常运算。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:02:12