【发布时间】:2010-11-24 14:38:29
【问题描述】:
有没有办法使用 GEOS 从多边形中移除自相交?
【问题讨论】:
标签: geometry intersection geos
有没有办法使用 GEOS 从多边形中移除自相交?
【问题讨论】:
标签: geometry intersection geos
所以,我必须自己回答这个问题。也许它会帮助某人。
您可以使用 geos::operation::buffer::BufferOp 类修复多边形。例如
geos::geom::Geometry * result =
geos::operation::buffer::BufferOp::bufferOp(polygon, 1.0);
你可以在Secrets of the JTS Topology Suite.找到更多好的食谱
【讨论】:
通常允许点交叉,因此您可以更改
1 2 4
*--* *
| \ /|
| X |
| / \|
*--* *
6 5 3
到
1 2 4
*--* *
| \ /|
| 3*6|
| / \|
*--* *
8 7 5
第 3 点和第 6 点相同。如果不允许点交叉,则将其中一个移动少量。
根据我的经验,大多数这样的交叉点都来自于错误的多边形简化,所以如果可能的话最好回到源头。
【讨论】:
自相交多边形无效。因此 BufferOp 可能会给出无效的结果。 我没有找到任何方法来修复 geos 中的自相交多边形。 PostGIS 中的 st_makevalid 函数使用 geos。所以有可能调查源代码。
【讨论】: