ST_Simplify
Signature
GEOMETRY ST_Simplify(GEOMETRY geom, DOUBLE distance);
Description
Simplifies geom using the Douglas-Peuker algorithm with a distance tolerance of distance.
Ensures that resulting polygonal geometries are valid.
Note
The Douglas-Peucker algorithm does not preserve topology.
To preserve the topology, use ST_SimplifyPreserveTopology.
But note that ST_Simplify is significantly faster.
Examples
SELECT ST_Simplify('POLYGON((2 1, 1 2, 2 2, 2 3, 3 3, 3 2,
4 2, 4 1, 3 0, 2 0, 2 1))',
0.5);
-- Answer: POLYGON((2 1, 1 2, 3 3, 4 1, 3 0, 2 0, 2 1))

SELECT ST_Simplify('POLYGON((2 1, 1 2, 2 2, 2 3, 3 3, 3 2,
4 2, 4 1, 3 0, 2 0, 2 1))',
1);
-- Answer:POLYGON((2 1, 1 2, 3 3, 4 1, 2 1))

If the distance tolerance is too large, the Geometry may be oversimplified:
SELECT ST_Simplify('POLYGON((2 1, 1 2, 2 2, 2 3, 3 3, 3 2,
4 2, 4 1, 3 0, 2 0, 2 1))',
2);
-- Answer: POLYGON EMPTY
POINTs and MULTIPOINTs cannot be further simplified:
SELECT ST_Simplify('MULTIPOINT((190 300), (10 11))',
4);
-- Answer: MULTIPOINT((190 300), (10 11))
Simplify a LINESTRING:
SELECT ST_Simplify('LINESTRING(250 250, 280 290, 300 230, 340 300,
360 260, 440 310, 470 360, 604 286)',
40);
-- Answer: LINESTRING(250 250, 280 290, 300 230, 470 360, 604 286)
Comparison with ST_SimplifyPreserveTopology
CREATE TABLE INPUT_TABLE(geom GEOMETRY);
INSERT INTO INPUT_TABLE VALUES (
'POLYGON((8 25, 28 22, 28 20, 15 11, 33 3, 56 30,
46 33, 46 34, 47 44, 35 36, 45 33, 43 19,
29 21, 29 22, 35 26, 24 39, 8 25))');
Notice that the result of ST_SimplifyPreserveTopology contains more vertices than the result of ST_Simplify. In general, it will contain enough to ensure validity.
SELECT ST_SimplifyPreserveTopology(geom, 20) SPT,
ST_Simplify(geom, 20) S FROM INPUT_TABLE;
Answer:
SPT |
S |
|---|---|
POLYGON((8 25, 33 3, 56 30, 47 44, 43 19, 8 25)) |
POLYGON((8 25, 56 30, 33 3, 8 25)) |

CREATE TABLE INPUT_TABLE(geom GEOMETRY);
INSERT INTO INPUT_TABLE VALUES (
'POLYGON((5 7, 2 5, 5 4, 13 4, 18 7, 16 11, 7 9, 11 7, 5 7),
(13 8, 13 6, 14 6, 15 9, 13 8))');
Here ST_SimplifyPreserveTopology keeps the hole whereas ST_Simplify removes it:
SELECT ST_SimplifyPreserveTopology(geom, 3) SPT,
ST_Simplify(geom, 3) S FROM INPUT_TABLE;
Answer:
SPT |
S |
|---|---|
POLYGON((5 7, 2 5, 13 4, 18 7, 16 11, 5 7), |
POLYGON((5 7, 16 11, 18 7, 2 5, 5 7)) |
