Name

ST_Polygonize — Berechnet eine Sammlung von Polygonen, die aus dem Linienwerk einer Reihe von Geometrien gebildet werden.

Synopsis

geometry ST_Polygonize(geometry set geomfield);

geometry ST_Polygonize(geometry[] geom_array);

Beschreibung

Erzeugt eine GeometryCollection, die die Polygone enthält, die durch das Liniengerüst einer Menge von Geometrien gebildet werden. Wenn das eingegebene Linienwerk keine Polygone bildet, wird eine leere GeometryCollection zurückgegeben.

Diese Funktion erzeugt Polygone, die alle abgegrenzten Bereiche abdecken. Wenn das Ergebnis eine gültige polygonale Geometrie bilden soll, verwenden Sie ST_BuildArea, um zu verhindern, dass Löcher gefüllt werden.

[Note]

Die Eingabelinie muss korrekt genodet sein, damit diese Funktion ordnungsgemäß funktioniert. Um sicherzustellen, dass die Eingabe nodiert ist, verwenden Sie ST_Node für die Eingabegeometrie vor der Polygonisierung.

[Note]

GeometryCollections können mit externen Werkzeugen schwer zu handhaben sein. Verwenden Sie ST_Dump, um das polygonisierte Ergebnis in separate Polygone umzuwandeln.

Wird vom GEOS Modul ausgeführt

Verfügbarkeit: 1.0.0RC1

Beispiele

Eingabezeilen

Polygonisiertes Ergebnis

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)))

Polygonisierung einer Tabelle mit Linienzügen:

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))