如何在R中合并Shapefile中同ID的多个多边形要素?
解决Shapefile重复ID多边形合并问题
嘿,我来帮你搞定这个多边形合并的难题!你说得对,rbind和普通的union只能堆叠要素行或者把所有多边形合并成一个,根本没法按重复的ID_2来分组合并对应的多边形。针对埃塞俄比亚GADM Level2数据的这个情况,咱们用sf包(现在处理空间数据的主流工具)的分组融合操作就能轻松解决,最终得到79个要素的sptemp。
具体步骤如下:
1. 加载必要的R包
首先确保你安装了sf(处理空间数据)和dplyr(数据分组聚合),然后加载它们:
library(sf) library(dplyr)
2. 读取GADM Level2的Shapefile
用st_read读取你的Shapefile文件,替换成你本地的文件路径:
# 读取埃塞俄比亚GADM Level2数据 eth_gadm <- st_read("你的文件路径/gadm36_ETH_2.shp")
3. 按ID_2分组合并多边形
核心操作是按ID_2分组,然后用st_union合并每组内的所有多边形,同时可以保留你需要的属性字段(比如NAME_2):
# 按ID_2分组,合并对应多边形并整理属性 sptemp <- eth_gadm %>% # 按ID_2分组 group_by(ID_2) %>% # 聚合操作:合并几何图形,保留其他属性(这里用first()取每组第一个NAME_2,你可以根据需求调整) summarise( geometry = st_union(geometry), NAME_2 = first(NAME_2) ) %>% # 取消分组 ungroup()
4. 验证结果
最后检查一下要素数量是不是79:
# 查看合并后的要素数量 nrow(sptemp)
额外提示:处理拓扑错误
如果合并过程中出现拓扑相关的报错,可以先修复数据的拓扑问题再合并:
# 先修复可能的拓扑无效问题 eth_gadm <- eth_gadm %>% st_make_valid() # 再执行上面的分组合并操作 sptemp <- eth_gadm %>% group_by(ID_2) %>% summarise( geometry = st_union(geometry), NAME_2 = first(NAME_2) ) %>% ungroup()
这样操作后,你就能得到每个ID_2对应单个多边形的sptemp啦!
内容的提问来源于stack exchange,提问作者Neal Barsch
相关产品推荐
相关产品推荐

