德国GADM数据处理:sf包下Multipolygon转Polygon方法求助
快速解决sf包处理德国GADM州地图的类型兼容问题
核心结论
sf包天然支持同一图层中同时存在Polygon和Multipolygon类型,你原本的代码其实已经可以直接用于绘制组合地图,不需要额外转换。如果追求类型统一,以下是几种实用方案:
方案1:直接用原始混合类型绘图
你的basicmap对象可以直接调用绘图函数,完全不影响结果:
plot(basicmap$geometry)
方案2:统一转换为Multipolygon类型
如果需要让两个州的geometry类型完全一致,只需在处理流程中加入st_cast("MULTIPOLYGON"),一次性统一所有要素类型:
library(sf) basicmap <- geodata::gadm("Germany", level = 1, path = "gadm_dl") %>% st_as_sf() %>% filter(NAME_1 %in% c("Bayern", "Baden-Württemberg")) %>% st_transform(crs = 25832) %>% st_cast("MULTIPOLYGON") # 统一转换为多面类型
方案3:拆分巴符州Polygon后合并图层
如果你确实需要把巴符州的飞地拆成单独的Polygon要素,再和巴伐利亚合并,用dplyr::bind_rows()即可完成:
library(sf) library(dplyr) # 提取并处理巴伐利亚数据 bayern <- geodata::gadm("Germany", level = 1, path = "gadm_dl") %>% st_as_sf() %>% filter(NAME_1 == "Bayern") %>% st_transform(crs = 25832) # 提取巴符州并拆分为单个Polygon baden_wuertt <- geodata::gadm("Germany", level = 1, path = "gadm_dl") %>% st_as_sf() %>% filter(NAME_1 == "Baden-Württemberg") %>% st_transform(crs = 25832) %>% st_cast("POLYGON") # 合并两个数据集 combined_map <- bind_rows(bayern, baden_wuertt) # 验证绘图 plot(combined_map$geometry)
内容的提问来源于stack exchange,提问作者Oliver Schallert
相关产品推荐
相关产品推荐

