如何基于现有5位邮编Shapefile聚合生成2位邮编边界并保留着色粒度?
解决方案:聚合5位邮编数据到2位级别并叠加边界
可以直接利用现有5位邮编Shapefile生成2位邮编级别的边界,具体步骤如下:
1. 添加2位邮编字段
先在你的germany数据框中提取邮编前两位,创建新字段:
germany <- germany %>% mutate(plz2 = substr(plz, 1, 2))
2. 聚合生成2位邮编边界
通过分组合并同一2位邮编下的所有5位邮编多边形,生成2位级别区域:
germany_plz2 <- germany %>% group_by(plz2) %>% summarise(geometry = st_union(geometry)) %>% # 合并同组内的所有多边形 ungroup()
这一步会得到一个新的sf对象,每行对应一个2位邮编区域,几何图形是该区域内所有5位邮编多边形的合并结果。如果合并后出现拓扑缝隙/重叠,可添加st_buffer(0)修复:
germany_plz2 <- germany %>% group_by(plz2) %>% summarise(geometry = st_union(geometry) %>% st_buffer(0)) %>% ungroup()
3. 叠加2位邮编边界到现有地图
在你原有着色地图的基础上,添加2位邮编的边界层(仅显示线条):
tm_shape(germany) + tm_fill(col = "plz_groups") + # 保留5位邮编的着色粒度 tm_shape(germany_plz2) + tm_borders(col = "black", lwd = 1.5) # 自定义边界颜色和粗细
你可以根据需求调整col(边界颜色)和lwd(线条粗细)参数,让边界更适配地图风格。
内容的提问来源于stack exchange,提问作者ulima2_
相关产品推荐
相关产品推荐

