如何合并接收2个单个多边形的2个相交多边形

时间:2019-03-27 16:21:44

标签: r polygon spatial sf rgeo-shapefile

如何结合相交的多边形(完美的圆),如下图所示:enter image description here

到目前为止,我使用过rgeos和sf,但还无法确定一种简单的方法。

library(rgeos)
library(sp)
pts <- SpatialPoints(cbind(c(2,3), c(1,1)))
plot(pts)
pol <- gBuffer(pts, width=0.6, byid=TRUE)
plot(pol)

@ Ege Rubak提供了围绕圆形差异创建凸包的提示。使用rgeos,解决方案看起来像是下面的代码。 但是,我很难一步一步得到解决方案。

gSym1 <- gDifference(pol[1,],pol[2,])
gch1 <- gConvexHull(gSym1)
gSym2 <- gDifference(pol[2,],pol[1,])
gch2 <- gConvexHull(gSym2)
plot(gch1)
plot(gch2, add=TRUE)

1 个答案:

答案 0 :(得分:2)

我必须同意@Spacedman,您的问题可能会使用更多 有关该问题的详细信息。以下是两个圈子的快速解决方法 使用spatstatsfsp等软件包肯定具有相同的功能。

一个盒子中有两个重叠的光盘(多边形近似):

library(spatstat)
A <- disc()
B <- shift(A, vec = c(1.6,0))
box <- boundingbox(union.owin(A,B))
plot(box, main = "")
B <- shift(A, vec = c(1.6,0))
colA <- rgb(1,0,0,.5)
colB <- rgb(0,1,0,.5)
plot(A, col = colA, add = TRUE, border = colA)
plot(B, col = colB, add = TRUE, border = colB)

设置差异:

AnotB <- setminus.owin(A, B)
BnotA <- setminus.owin(B, A)
plot(box, main = "")
plot(AnotB, col = colA, add = TRUE, border = colA)
plot(BnotA, col = colB, add = TRUE, border = colB)

集合差异的凸包:

AA <- convexhull(AnotB)
BB <- convexhull(BnotA)
plot(box, main = "")
plot(AA, col = colA, add = TRUE, border = colA)
plot(BB, col = colB, add = TRUE, border = colB)

如果要找到相交点:

edgesA <- edges(A)
edgesB <- edges(B)
x <- crossing.psp(edgesA,edgesB)
plot(box, main = "")
plot(A, col = colA, add = TRUE, border = colA)
plot(B, col = colB, add = TRUE, border = colB)
plot(x, add = TRUE, pch = 20, col = "blue", cex = 3)