在使用sf包进行st_combine / st_union之后,能在R中获得干净的多边形吗?

时间:2018-11-29 22:07:34

标签: r sf

我有一个整齐的SF格式(setores_sp_ok.rda)的人口普查数据集,其中包含两个不同领土模型的多边形,用变量modelo表示。我想按modelocnes汇总人口普查部门,以创建具有新边界的另一个数据集。

我可以使用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)

result have many internal boundaries

我知道可以结合使用st_combinest_unionst_intersect这种操作,但是我没有意识到如何实现。

如何通过modelocnes合并多边形并获得没有内部边界的干净的聚合多边形?

有人有小费吗?

非常感谢!

1 个答案:

答案 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之类的系统中。