6

有没有办法使用 GEOS 从多边形中删除自相交?

4

3 回答 3

7

所以,我必须自己回答这个问题。也许它会帮助某人。

您可以使用 geos::operation::buffer::BufferOp 类修复多边形。例如

geos::geom::Geometry * result = 
                       geos::operation::buffer::BufferOp::bufferOp(polygon, 1.0);

您可以在 JTS 拓扑套件的秘密中找到更多好的秘籍。

于 2010-12-08T16:56:59.570 回答
1

通常允许点交叉点,因此您可以更改

1  2   4
*--*   *       
|   \ /|
|    X |
|   / \|
*--*   *
6  5   3

1  2   4
*--*   *       
|   \ /|
|   3*6|
|   / \|
*--*   *
8  7   5

其中第 3 点和第 6 点相同。如果不允许点交叉点,则将其中一个点移动少量。

以我的经验,大多数这样的交叉点都来自错误的多边形简化,所以如果可能的话,最好回到源头。

于 2010-11-24T16:33:39.653 回答
1

自相交多边形无效。因此 BufferOp 可能会给出无效的结果。我没有找到任何方法来修复 geos 中的自相交多边形。PostGIS 中的 st_makevalid 函数使用 geos。因此可以调查源代码。

于 2011-11-07T11:58:56.763 回答