【问题标题】:How to repair a polygon with self-intersection?如何修复自相交的多边形?
【发布时间】:2010-11-24 14:38:29
【问题描述】:

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

【问题讨论】:

    标签: geometry intersection geos


    【解决方案1】:

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

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

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

    你可以在Secrets of the JTS Topology Suite.找到更多好的食谱

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 值得澄清的是,“自相交多边形无效”但根据 OGC SFS。它是几何世界中有效的复多边形。
        猜你喜欢
        • 2016-11-18
        • 2010-12-31
        • 1970-01-01
        • 2014-07-28
        • 2012-03-13
        • 2014-01-24
        • 2012-01-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多