如何使用R语言sf包读取并绘制LINESTRING类型的.shp文件
报错原因
这个错误不是LINESTRING类型的shp需要特殊处理,核心原因是你读取的shp文件的几何列存在几何类型混合/无效几何的问题:元数据标注整体是LINESTRING,但部分行的几何实际是无效的POINT对象、空几何,导致geom_sf()做类型统一转换时失败。
解决步骤
- 第一步:先过滤无效/异常几何
先筛掉所有无效、空、类型不符合的几何行:# 筛选几何有效、且类型为LINESTRING/MULTILINESTRING的行 ind_global_clean <- ind_global %>% filter(st_is_valid(.), st_geometry_type(.) %in% c("LINESTRING", "MULTILINESTRING")) - 第二步:统一几何类型(可选,避免偶发转换错误)
把所有LINESTRING统一转成MULTILINESTRING,保证整列几何类型一致:ind_global_clean <- ind_global_clean %>% st_cast("MULTILINESTRING") - 第三步:绘图
直接用清理后的数据绘图即可:ggplot(ind_global_clean) + geom_sf()
补充说明
如果你需要的是带填充的国家面图层,你需要找对应POLYGON/MULTIPOLYGON类型的国界shp文件,当前的LINESTRING类型文件只能绘制国界线轮廓。
内容的提问来源于stack exchange,提问作者ViSa
相关产品推荐
相关产品推荐

