代码之家  ›  专栏  ›  技术社区  ›  Pablo Cabrera

在JTS中,当我执行geometry.buffer(1).buffer(-1)时,生成的几何体是否与原始几何体等效?

  •  1
  • Pablo Cabrera  · 技术社区  · 16 年前

    我在交叉两个几何图形时遇到问题,可能是由于操作过程中的舍入错误导致了拓扑异常,然后我读到 this fix 尝试了一个 buffer(0) 在两个输入几何图形上,但仍然没有成功。然后我尝试 geo.buffer(1).buffer(-1) 而且成功了。

    这些几何图形是否与原始几何图形相同?

    2 回复  |  直到 9 年前
        1
  •  4
  •   Joachim Sauer    16 年前

    我对JTS一无所知,但总的来说不可能是真的。

    假设你有两个形状:

     XXX      XXX
     X X      XXX
     XXX      XXX
    

    据我所知 buffer(1) 两者的结果大致如下:

    XXXXX    XXXXX
    XXXXX    XXXXX
    XXXXX    XXXXX
    XXXXX    XXXXX
    XXXXX    XXXXX
    

    现在 buffer(-1) 无法从这两个形状生成两个不同的结果。

    有效地 buffer() 操作会丢失信息,因此如果不从其他地方重新添加该信息,则无法撤消操作。

        2
  •  3
  •   George Silva    16 年前

    我不认为这些几何会是一样的。默认情况下,缓冲特性的行为会将顶点添加到其原始配置中,并且不能保证相同的顶点会被移除。

    尝试使用非常小的缓冲区a.buffer(0.00001),例如(1/1000毫米,如果坐标是公制的话)。

    在postgis中,通过这样做可以纠正一些问题。

    推荐文章