使用多边形裁剪多边形(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
相关产品推荐
相关产品推荐

