ST_Clip
Signatures
GEOMETRY ST_Clip(GEOMETRY geomToClip, GEOMETRY geomForClip);
Description
Clip a geometry geomToClip with another a geometry geomForClip.
Warning
geomToClip and geomForClip have to be (MULTI)POLYGON or (MULTI)LINESTRING
Examples
POLYGON with POLYGON
SELECT ST_Clip('POLYGON((1 2, 5 2, 5 6, 1 6, 1 2))',
'POLYGON((3 3, 7 3, 7 7, 3 7, 3 3))');
-- Answer: MULTIPOLYGON (((1 2, 1 6, 3 6, 3 3, 5 3, 5 2, 1 2)),
-- ((3 6, 5 6, 5 3, 3 3, 3 6)))

MULTIPOLYGON with POLYGON
SELECT ST_Clip('MULTIPOLYGON(((1 2, 5 2, 5 6, 1 6, 1 2)),
((6 2, 7 2, 7 4, 6 4, 6 2)))',
'POLYGON((3 3, 7 3, 7 7, 3 7, 3 3))');
-- Answer: MULTIPOLYGON (((5 3, 5 2, 1 2, 1 6, 3 6, 3 3, 5 3)),
-- ((3 3, 3 6, 5 6, 5 3, 3 3)),
-- ((6 2, 6 3, 7 3, 7 2, 6 2)),
-- ((6 3, 6 4, 7 4, 7 3, 6 3)))

POLYGON with MULTIPOLYGON
SELECT ST_Clip('POLYGON((1 2, 5 2, 5 6, 1 6, 1 2))',
'MULTIPOLYGON(((3 3, 7 3, 7 7, 3 7, 3 3)),
((1 1, 2 1, 2 3, 1 3, 1 1)))');
-- Answer: MULTIPOLYGON (((1 3, 2 3, 2 2, 1 2, 1 3)),
-- ((5 3, 5 2, 2 2, 2 3, 1 3, 1 6, 3 6, 3 3, 5 3)),
-- ((3 6, 5 6, 5 3, 3 3, 3 6)))

MULTIPOLYGON with MULTIPOLYGON
SELECT ST_Clip('MULTIPOLYGON(((1 2, 5 2, 5 6, 1 6, 1 2)),
((6 2, 7 2, 7 4, 6 4, 6 2)))',
'MULTIPOLYGON(((3 3, 7 3, 7 7, 3 7, 3 3)),
((1 1, 2 1, 2 3, 1 3, 1 1)))');
-- Answer: MULTIPOLYGON (((2 2, 1 2, 1 3, 2 3, 2 2)),
-- ((2 2, 2 3, 1 3, 1 6, 3 6, 3 3, 5 3, 5 2, 2 2)),
-- ((5 3, 3 3, 3 6, 5 6, 5 3)),
-- ((7 3, 7 2, 6 2, 6 3, 7 3)),
-- ((6 3, 6 4, 7 4, 7 3, 6 3)))

LINESTRING with LINESTRING
SELECT ST_Clip('LINESTRING(1 1, 5 5)',
'LINESTRING(1 3, 4 3, 4 6)');
-- Answer: MULTILINESTRING ((1 1, 3 3), (3 3, 4 4), (4 4, 5 5))

MULTILINESTRING with LINESTRING
SELECT ST_Clip('MULTILINESTRING((1 1, 5 5), (1 2, 3 4))',
'LINESTRING(1 3, 4 3, 4 6)');
-- Answer: MULTILINESTRING ((1 1, 3 3), (3 3, 4 4), (4 4, 5 5),
-- (1 2, 2 3), (2 3, 3 4))

LINESTRING with MULTILINESTRING
SELECT ST_Clip('LINESTRING(1 1, 5 5)',
'MULTILINESTRING((1 3, 4 3), (2 4, 5 4))');
-- Answer: MULTILINESTRING ((1 1, 3 3), (3 3, 4 4), (4 4, 5 5))

POLYGON with LINESTRING
SELECT ST_Clip('POLYGON((1 2, 5 2, 5 6, 1 6, 1 2))',
'LINESTRING(4 1, 4 7)');
-- Answer: MULTIPOLYGON (((4 6, 4 2, 1 2, 1 6, 4 6)),
-- ((4 2, 4 6, 5 6, 5 2, 4 2)))

LINESTRING with POLYGON
SELECT ST_Clip('LINESTRING(1 1, 5 5)',
'POLYGON((1 2, 4 2, 4 6, 1 6, 1 2))');
-- Answer: MULTILINESTRING ((1 1, 2 2), (2 2, 4 4), (4 4, 5 5))

Cases where the result is the same as geomToClip
SELECT ST_Clip('POLYGON((1 2, 5 2, 5 6, 1 6, 1 2))',
'LINESTRING(4 4, 4 7)');
-- Answer: POLYGON ((1 2, 1 6, 4 6, 5 6, 5 2, 1 2))

SELECT ST_Clip('POLYGON((1 2, 5 2, 5 6, 1 6, 1 2))',
'POLYGON((6 3, 7 3, 7 7, 6 7, 6 3))');
-- Answer: POLYGON ((1 2, 1 6, 4 6, 5 6, 5 2, 1 2))
