Name

ST_Snap — 将输入几何图形的线段和顶点捕捉到参考几何图形的顶点。

Synopsis

geometry ST_Snap(geometry input, geometry reference, float tolerance);

描述

将一个几何体的顶点和线段捕捉到另一个几何体的顶点。捕捉距离公差用于控制执行捕捉的位置。结果几何体是捕捉了顶点的输入几何体。如果没有发生捕捉,则返回的输入几何体不变。

将一个几何图形捕捉到另一个几何图形可以消除近乎重合的边(这会在节点和交点计算期间导致问题),从而提高覆盖操作的稳健性。

过多的捕捉可能会导致创建无效的拓扑,因此捕捉的顶点的数量和位置需要使用启发式算法来确定何时可以安全捕捉。但是,这可能会导致一些潜在的快照被省略。

[Note]

返回的几何可能会失去简单性(请参见 ST_IsSimple )和有效性(见 ST_IsValid )。

由GEOS模块执行。

可用性:2.0.0

示例

使用线串显示的多边形(在任何捕捉之前)

多边形捕捉到线串到公差:距离的1.01。新的多面显示为参考线串

SELECT ST_AsText(ST_Snap(poly,line, ST_Distance(poly,line)*1.01)) AS polysnapped
FROM (SELECT
   ST_GeomFromText('MULTIPOLYGON(
     ((26 125, 26 200, 126 200, 126 125, 26 125 ),
      ( 51 150, 101 150, 76 175, 51 150 )),
      (( 151 100, 151 200, 176 175, 151 100 )))') As poly,
       ST_GeomFromText('LINESTRING (5 107, 54 84, 101 100)') As line
        ) As foo;

                             polysnapped
---------------------------------------------------------------------
 MULTIPOLYGON(((26 125,26 200,126 200,126 125,101 100,26 125),
 (51 150,101 150,76 175,51 150)),((151 100,151 200,176 175,151 100)))
                                

多边形捕捉到线串到公差:距离的1.25。新的多面显示为参考线串

SELECT ST_AsText(
    ST_Snap(poly,line, ST_Distance(poly,line)*1.25)
  ) AS polysnapped
FROM (SELECT
  ST_GeomFromText('MULTIPOLYGON(
    (( 26 125, 26 200, 126 200, 126 125, 26 125 ),
      ( 51 150, 101 150, 76 175, 51 150 )),
      (( 151 100, 151 200, 176 175, 151 100 )))') As poly,
       ST_GeomFromText('LINESTRING (5 107, 54 84, 101 100)') As line
        ) As foo;

                             polysnapped
---------------------------------------------------------------------
MULTIPOLYGON(((5 107,26 200,126 200,126 125,101 100,54 84,5 107),
(51 150,101 150,76 175,51 150)),((151 100,151 200,176 175,151 100)))
                                

线串在距离公差1.01处捕捉到原始多边形。显示的新线串带有参考多面

SELECT ST_AsText(
   ST_Snap(line, poly, ST_Distance(poly,line)*1.01)
  ) AS linesnapped
FROM (SELECT
  ST_GeomFromText('MULTIPOLYGON(
     ((26 125, 26 200, 126 200, 126 125, 26 125),
      (51 150, 101 150, 76 175, 51 150 )),
      ((151 100, 151 200, 176 175, 151 100)))') As poly,
       ST_GeomFromText('LINESTRING (5 107, 54 84, 101 100)') As line
        ) As foo;

              linesnapped
----------------------------------------
 LINESTRING(5 107,26 125,54 84,101 100)
                                

线串在距离公差1.25处捕捉到原始多边形。显示的新线串带有参考多面

SELECT ST_AsText(
 ST_Snap(line, poly, ST_Distance(poly,line)*1.25)
  ) AS linesnapped
FROM (SELECT
  ST_GeomFromText('MULTIPOLYGON(
     (( 26 125, 26 200, 126 200, 126 125, 26 125 ),
      (51 150, 101 150, 76 175, 51 150 )),
      ((151 100, 151 200, 176 175, 151 100 )))') As poly,
       ST_GeomFromText('LINESTRING (5 107, 54 84, 101 100)') As line
        ) As foo;
              linesnapped
---------------------------------------
LINESTRING(26 125,54 84,101 100)
                                

另请参阅

ST_SnapToGrid