ST_Snap — Fäst segment och vertikaler i indatageometrin till vertikaler i en referensgeometri.
geometry ST_Snap(geometry input, geometry reference, float tolerance);
Snappar en geometris hörn och segment till en annan geometris hörn. En tolerans för snäppavstånd används för att styra var snäppningen utförs. Resultatgeometrin är indatageometrin med de snäppta topparna. Om ingen snäppning sker returneras indatageometrin oförändrad.
Att snäppa en geometri till en annan kan förbättra robustheten för överlagringsoperationer genom att eliminera nästan sammanfallande kanter (som orsakar problem under nodning och intersektionsberäkning).
För mycket snäppning kan leda till att en ogiltig topologi skapas, så antalet och placeringen av de snäppta topparna bestäms med hjälp av heuristik för att avgöra när det är säkert att snäppa. Detta kan dock leda till att vissa potentiella snäppningar utelämnas.
|
|
|
Den återlämnade geometrin kan förlora sin enkelhet (se ST_IsSimple) och giltighet (se ST_IsValid). |
Utförs av GEOS-modulen.
Tillgänglighet: 2.0.0
A MultiPolygon snapped to a LineString at 1.01 times their distance.
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)))
A MultiPolygon snapped to a LineString at 1.25 times their distance.
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)))
The LineString snapped to the original MultiPolygon at 1.01 times their distance.
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)
The LineString snapped to the original MultiPolygon at 1.25 times their distance.
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)