将sf Multipolygon对象转换为sp对象时遇空几何错误的解决方法
解决sf转sp时的空几何错误
问题原因
报错提示“empty geometries are not supported by sp classes”,说明你的vic_sa4对象中存在隐形的空几何要素——即使你认为几何信息存在,部分行的几何数据实际上是空的,而sp类不支持包含空几何的对象。
解决方案步骤
检测空几何
先定位数据中的空几何行:library(absmapsdata) library(sp) library(sf) vic_sa4 <- sa42021 # 标记所有空几何行 empty_rows <- st_is_empty(vic_sa4) # 查看空几何的数量分布 table(empty_rows)清理空几何
移除包含空几何的行(这是最直接的解决方式,因为sp原生不支持空几何):vic_sa4_clean <- vic_sa4[!empty_rows, ] # 确认清理后无空几何 any(st_is_empty(vic_sa4_clean)) # 返回FALSE则说明清理完成附加:修复无效几何(可选)
如果数据中存在无效几何(可能间接导致转换失败),可以先修复再清理:# 修复所有无效几何 vic_sa4_clean <- st_make_valid(vic_sa4) # 再次过滤空几何(修复过程可能产生空几何) vic_sa4_clean <- vic_sa4_clean[!st_is_empty(vic_sa4_clean), ]转换为sp对象
清理完成后即可正常转换:# 方法1:使用as_Spatial函数 vic_sa4_sp <- as_Spatial(vic_sa4_clean) # 方法2:使用as()强制类型转换 vic_sa4_sp <- as(vic_sa4_clean, "Spatial")
内容的提问来源于stack exchange,提问作者m45ha
相关产品推荐
相关产品推荐

