名称

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

大纲

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

描述

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

将一个几何体捕捉到另一个几何体可以通过消除几何重合的边(这会在节点和相交计算期间引起问题)来提高叠加操作的可靠性。

过多的捕捉可能会导致创建无效的拓扑,因此使用启发式方法确定捕捉顶点的数量和位置,以确定何时可以安全捕捉。 然而,这可能会导致一些潜在的捕捉被忽略。

[注意]

返回的几何图形可能已失去其简单性(请参阅ST_IsSimple)或可能无效(请参阅ST_IsValid)。

这个函数是由 GEOS 模块执行的。

可用性: 2.0.0

示例

A MultiPolygon snapped to a LineString at 1.01 times their distance.

Code
SELECT 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;
栅格输出
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)))
Figure
Geometry figure for visual-st-snap-01

A MultiPolygon snapped to a LineString at 1.25 times their distance.

Code
SELECT 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;
栅格输出
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)))
Figure
Geometry figure for visual-st-snap-02

The LineString snapped to the original MultiPolygon at 1.01 times their distance.

Code
SELECT 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;
栅格输出
LINESTRING(5 107,26 125,54 84,101 100)
Figure
Geometry figure for visual-st-snap-03

The LineString snapped to the original MultiPolygon at 1.25 times their distance.

Code
SELECT 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;
栅格输出
LINESTRING(26 125,54 84,101 100)
Figure
Geometry figure for visual-st-snap-04

相关信息

ST_SnapToGrid