【发布时间】:2019-12-18 22:06:24
【问题描述】:
我正在尝试使用 sf 包中的 sf_intersection() 函数来识别两个不同多边形的公共边界。
我在我的数据中尝试了这个 simple approach,它来自一个 shapefile,但它并没有完全按照我的预期工作。
我的数据是来自this repository 的 shapefile 名称“区域”,这是我尝试过的:
library(sf)
library(ggplot2)
zones <- st_read('./Data/zones.shp')
zones$id <- seq(nrow(zones))
borders <- st_intersection(zones, zones)
borders <- borders[borders$id != borders$id.1, ]
ggplot() +
geom_sf(data = zones, color='red', fill=NA) +
geom_sf(data = borders, color = 'navy')
最终的情节产生了这个结果:
如果您仔细观察,您会注意到多边形内线的某些部分不是borders 中的线的一部分(它们是红色而不是蓝色)。
我不知道为什么会这样。任何提示或建议将不胜感激。谢谢!
【问题讨论】:
-
正如@David_O 提到的,边界实际上并没有共享,因此不会相交。试试,例如:
ggplot(data = zones) +geom_sf() + xlim(c(768824.7, 770092.5)) + ylim(c(2944198.6, 2944940.3))你会看到两个线串分叉的部分。 -
您可以在相交之前尝试
st_buffer您的区域对象。 -
我用来修复多边形格子以修复非重叠边界或重叠条的最好方法是:github.com/tudelft3d/pprepair - 需要一些组装。