我有一个整齐的SF格式(setores_sp_ok.rda)的人口普查数据集,其中包含两个不同领土模型的多边形,用变量modelo
表示。我想按modelo
和cnes
汇总人口普查部门,以创建具有新边界的另一个数据集。
我可以使用group_by()
+ summarise()
技术来执行此操作,该技术会自动使用st_union()
来聚合多边形。但是结果很差,内部边界很多。
# load packages
library(dplyr)
library(ggplot2)
library(sf)
library(lwgeom)
# import data
load(url("https://github.com/bruno-pinheiro/app_acesso_saude/raw/master/data/setores_sp_ok.rda"))
# combine polygons
ubs_malhas <- setores_sp %>%
st_make_valid() %>%
group_by(cnes, modelo) %>%
summarise(area = sum(area)) %>%
ungroup()
# plot
ggplot(ubs_malhas[ubs_malhas$modelo == "vigente", ]) +
geom_sf(lwd = .2)
我知道可以结合使用st_combine
,st_union
和st_intersect
这种操作,但是我没有意识到如何实现。
如何通过modelo
和cnes
合并多边形并获得没有内部边界的干净的聚合多边形?
有人有小费吗?
非常感谢!
答案 0 :(得分:1)
从某种意义上讲,您的数据可能很整洁,但是几何形状却并非如此。在许多情况下,“ vigente”模型单元之间的边界并不完全对齐,因此,您会得到由单元之间的间隙引起的这些小的“剩余”。我会将它们捕捉到1cm的网格中,然后调用st_union
。
# load packages
library(dplyr)
library(ggplot2)
library(sf)
library(lwgeom)
# import data
load(url("https://github.com/bruno-pinheiro/app_acesso_saude/raw/master/data/setores_sp_ok.rda"))
# combine polygons
ubs_malhas <- setores_sp %>%
st_snap_to_grid(size = 0.01) %>%
st_make_valid() %>%
group_by(cnes, modelo) %>%
summarise(area = sum(area)) %>%
ungroup()
# plot
ggplot(ubs_malhas[ubs_malhas$modelo == "vigente", ]) +
geom_sf(lwd = .2)
如果仍然有多余的多边形,则可能需要增大网格大小或手动删除这些多边形,例如在QGIS之类的系统中。