ST_SNAP
📄字数 1.7K
👁️阅读量 加载中...
功能描述
将一个几何体的顶点和边捕捉到另一个几何体的顶点。
语法格式
sql
GEOMETRY ST_SNAP(GEOMETRY input, GEOMETRY reference, DOUBLE tolerance);参数说明
- input:目标 GEOMETRY 对象。
- reference:被捕捉的 GEOMETRY 对象。
- tolerance:距离公差,用于控制执行捕捉的位置。
函数返回类型
GEOMETRY 类型
使用说明
- 结果几何体是顶点被捕捉的输入几何体。 如果没有发生捕捉,则输入几何体将原样返回。
- 将一个几何体捕捉到另一个几何体可以通过消除几何重合的边来提高叠加操作的可靠性。
- 过多的捕捉可能会导致创建无效的拓扑,因此使用启发式方法确定捕捉顶点的数量和位置,以确定何时可以安全捕捉。
- 返回的几何图形可能已失去其简单性(请参阅ST_IsSimple)或可能无效(请参阅ST_IsValid)。
- 这个函数是由 GEOS 模块执行的。
示例
将多边形捕捉到线串,公差距离为 1.01。 新的多边形连接到线串:
sql
SQL> SELECT TO_CHAR(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 的多线串。 新的多边形连接到线串:
sql
SQL> SELECT TO_CHAR(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。 新线串将连接到多边形:
sql
SQL> SELECT TO_CHAR(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。 新线串将连接到多边形:
sql
SQL> SELECT TO_CHAR(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) |
+----------------------------------+