Name

ST_BuildArea — Erzeugt eine polygonale Geometrie, die aus dem Linienwerk einer Geometrie gebildet wird.

Übersicht

geometry ST_BuildArea(geometry geom);

Beschreibung

Erzeugt eine flächige Geometrie, die aus den konstituierenden Linienzügen der Eingabegeometrie gebildet wird. Die Eingabe kann ein LineString, MultiLineString, Polygon, MultiPolygon oder eine GeometryCollection sein. Das Ergebnis ist ein Polygon oder MultiPolygon, je nach Eingabe. Wenn das eingegebene Liniengerüst keine Polygone bildet, wird NULL zurückgegeben.

Im Gegensatz zu ST_MakePolygon akzeptiert diese Funktion Ringe, die aus mehreren Linien bestehen, und kann eine beliebige Anzahl von Polygonen bilden.

Diese Funktion wandelt innere Ringe in Löcher um. Um auch innere Ringe in Polygone zu verwandeln, verwenden Sie ST_Polygonize.

[Anmerkung]

Damit diese Funktion ordnungsgemäß funktioniert, muss das eingegebene Linienwerk korrekt genodet sein. ST_Node kann zum Knoten von Linien verwendet werden.

Wenn sich das eingegebene Linienwerk kreuzt, erzeugt diese Funktion ungültige Polygone. ST_MakeValid kann verwendet werden, um sicherzustellen, dass die Ausgabe gültig ist.

Verfügbarkeit: 1.1.0

Beispiele

Building an area from five input lines.

Code
WITH data(geom) AS (VALUES
   ('LINESTRING (180 40,30 20,20 90)'::geometry),
  ('LINESTRING (180 40,160 160)'::geometry),
  ('LINESTRING (160 160,80 190,80 120,20 90)'::geometry),
  ('LINESTRING (80 60,120 130,150 80)'::geometry),
  ('LINESTRING (80 60,150 80)'::geometry)
)
SELECT ST_BuildArea(ST_Collect(geom )) AS wkt
    FROM data;
Ausgabe von Rastern
POLYGON((180 40,30 20,20 90,80 120,80 190,160 160,180 40),(150 80,120 130,80 60,150 80))
Figure
Geometry figure for visual-st-buildarea-01

Create a donut from two circular polygons.

Code
WITH input AS (
  SELECT 'POINT(100 90)'::geometry AS geom
),
rings AS (
  SELECT ST_Buffer(geom, 25, 'quad_segs=1') AS inring,
         ST_Buffer(geom, 50, 'quad_segs=1') AS outring
  FROM input
)
SELECT inring AS inner_ring,
       outring AS outer_ring,
       ST_BuildArea(ST_Collect(inring, outring)) AS area
FROM rings;
Ausgabe von Rastern
-[ RECORD 1 ]-----
inner_ring | POLYGON((125 90,100 65,75 90,100 115,125 90))
outer_ring | POLYGON((150 90,100 40,50 90,100 140,150 90))
area       | POLYGON((150 90,100 40,50 90,100 140,150 90),(125 90,100 115,75 90,100 65,125 90))
Figure
Geometry figure for visual-st-buildarea-02

Input linework that crosses at non-endpoint intersections must be noded before building areas:

Code
WITH lines(geom) AS (VALUES
  ('LINESTRING(36 35,45 307)'::geometry),
  ('LINESTRING(30 290,390 280)'::geometry),
  ('LINESTRING(320 60,300 310)'::geometry),
  ('LINESTRING(20 60,320 60)'::geometry),
  ('LINESTRING(120 140,168 225)'::geometry),
  ('LINESTRING(140 220,220 150,120 170)'::geometry)
),
noded AS (
  SELECT ST_Node(ST_UnaryUnion(ST_Collect(geom))) AS geom FROM lines
)
SELECT ST_BuildArea(geom) AS area
FROM noded;
Ausgabe von Rastern
POLYGON((320 60,36.8 60,44.4 289.6,302.2 282.4,320 60),(156.9 205.3,135.2 167,220 150,156.9 205.3))
Figure
Geometry figure for visual-st-buildarea-03

Siehe auch

ST_Collect, ST_MakePolygon, ST_MakeValid, ST_Node, ST_Polygonize, ST_BdPolyFromText, ST_BdMPolyFromText (Wrapper zu dieser Funktion mit Standard OGC Schnittstelle)