ST_Polygonize — Computes a collection of polygons formed from the linework of a set of geometries.
geometry ST_Polygonize(
geometry set geomfield)
;
geometry ST_Polygonize(
geometry[] geom_array)
;
Creates a GeometryCollection containing the polygons formed by the linework of a set of geometries. If the input linework does not form any polygons, an empty GeometryCollection is returned.
This function creates polygons covering all delimited areas. If the result is intended to form a valid polygonal geometry, use ST_BuildArea to prevent holes being filled.
The input linework must be correctly noded for this function to work properly. To ensure input is noded use ST_Node on the input geometry before polygonizing. |
GeometryCollections can be difficult to handle with external tools. Use ST_Dump to convert the polygonized result into separate polygons. |
Performed by the GEOS module.
Availability: 1.0.0RC1
|
|
WITH data(geom) AS (VALUES ('LINESTRING (180 40, 30 20, 20 90)'::geometry) ,('LINESTRING (180 40, 160 160)'::geometry) ,('LINESTRING (80 60, 120 130, 150 80)'::geometry) ,('LINESTRING (80 60, 150 80)'::geometry) ,('LINESTRING (20 90, 70 70, 80 130)'::geometry) ,('LINESTRING (80 130, 160 160)'::geometry) ,('LINESTRING (20 90, 20 160, 70 190)'::geometry) ,('LINESTRING (70 190, 80 130)'::geometry) ,('LINESTRING (70 190, 160 160)'::geometry) ) SELECT ST_AsText( ST_Polygonize( geom )) FROM data; ------------------------------------------------------------------------------------------ GEOMETRYCOLLECTION (POLYGON ((180 40, 30 20, 20 90, 70 70, 80 130, 160 160, 180 40), (150 80, 120 130, 80 60, 150 80)), POLYGON ((20 90, 20 160, 70 190, 80 130, 70 70, 20 90)), POLYGON ((160 160, 80 130, 70 190, 160 160)), POLYGON ((80 60, 120 130, 150 80, 80 60)))
Polygonizing a table of linestrings:
SELECT ST_AsEWKT(ST_Polygonize(geom_4269)) As geomtextrep FROM (SELECT geom_4269 FROM ma.suffolk_edges) As foo; ------------------------------------- SRID=4269;GEOMETRYCOLLECTION(POLYGON((-71.040878 42.285678,-71.040943 42.2856,-71.04096 42.285752,-71.040878 42.285678)), POLYGON((-71.17166 42.353675,-71.172026 42.354044,-71.17239 42.354358,-71.171794 42.354971,-71.170511 42.354855, -71.17112 42.354238,-71.17166 42.353675))) --Use ST_Dump to dump out the polygonize geoms into individual polygons SELECT ST_AsEWKT((ST_Dump(t.polycoll)).geom) AS geomtextrep FROM (SELECT ST_Polygonize(geom_4269) AS polycoll FROM (SELECT geom_4269 FROM ma.suffolk_edges) As foo) AS t; ------------------------ SRID=4269;POLYGON((-71.040878 42.285678,-71.040943 42.2856,-71.04096 42.285752, -71.040878 42.285678)) SRID=4269;POLYGON((-71.17166 42.353675,-71.172026 42.354044,-71.17239 42.354358 ,-71.171794 42.354971,-71.170511 42.354855,-71.17112 42.354238,-71.17166 42.353675))