ST_SubDivide

Signatures

GEOMETRY ST_SubDivide(GEOMETRY geom);
GEOMETRY ST_SubDivide(GEOMETRY geom, INTEGER max_vertices);

Description

Divides geometry (geom) into parts using its internal envelope, until each part can be represented using no more than max_vertices.

Where:

  • max_vertices : maximum number of vertices in the resulting geometry

Examples

With a LINESTRING

SELECT ST_subdivide('LINESTRING (1 1, 5 5)');

-- Answer: GEOMETRYCOLLECTION (POINT (3 3), 
--                             LINESTRING (3 3, 5 5), 
--                             LINESTRING (1 1, 3 3), 
--                             POINT (3 3))

With a POLYGON

SELECT st_SubDivide('POLYGON((1 2, 1 6, 5 6, 5 5, 7 5, 7 1, 3 1, 3 2, 1 2))',6);

-- Answer: MULTIPOLYGON (((1 3.5, 1 6, 4 6, 4 3.5, 1 3.5)), 
--                       ((4 3.5, 4 6, 5 6, 5 5, 7 5, 7 3.5, 4 3.5)), 
--                       ((1 2, 1 3.5, 4 3.5, 4 1, 3 1, 3 2, 1 2)), 
--                       ((4 1, 4 3.5, 7 3.5, 7 1, 4 1)))

With a POLYGON having a hole

SELECT st_SubDivide('POLYGON((1 2, 1 6, 5 6, 5 5, 7 5, 7 1, 3 1, 3 2, 1 2), 
                             (3 3, 3 4, 4 4, 4 3, 3 3))',6);

-- Answer: GEOMETRYCOLLECTION (
--              LINESTRING (4 4, 4 3.5), 
--              POLYGON ((1 3.5, 1 6, 4 6, 4 4, 3 4, 3 3.5, 1 3.5)), 
--              LINESTRING (4 3.5, 4 3), 
--              POLYGON ((4 1, 4 3, 4 3.5, 7 3.5, 7 1, 4 1)), 
--              POLYGON ((1 2.25, 1 3.5, 2.5 3.5, 2.5 2.25, 1 2.25)), 
--              POLYGON ((2.5 2.25, 2.5 3.5, 3 3.5, 3 3, 4 3, 4 2.25, 2.5 2.25)), 
--              POLYGON ((1 2, 1 2.25, 2.5 2.25, 2.5 2, 1 2)), 
--              POLYGON ((2.5 2, 2.5 2.25, 4 2.25, 4 1, 3 1, 3 2, 2.5 2)), 
--              POLYGON ((4 4.75, 4 6, 5 6, 5 5, 5.5 5, 5.5 4.75, 4 4.75)), 
--              POLYGON ((5.5 4.75, 5.5 5, 7 5, 7 4.75, 5.5 4.75)), 
--              POLYGON ((4 3.5, 4 4, 4 4.75, 5.5 4.75, 5.5 3.5, 4 3.5)), 
--              POLYGON ((5.5 3.5, 5.5 4.75, 7 4.75, 7 3.5, 5.5 3.5)))

See also