名稱

ST_Snap — 將輸入幾何圖形的線段和頂點貼齊到參考幾何圖形的頂點。

概要

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