In diesem Beispiel werden zwei Polygone auf beiden Seiten einer Linienfolge erstellt. Es erfordert PostGIS 1.5 oder höher. Ich bin mir nicht sicher, wie gut es mit sich kreuzenden Linien umgehen wird.
SELECT ST_AsText(geom)
FROM ST_Dump ((
SELECT
ST_Polygonize(GEOMUNION(ST_Boundary(ST_Buffer(the_geom, 0.5, 'endcap=flat join=round')), the_geom)) AS buffer_sides
FROM
(SELECT ST_GeomFromText('LINESTRING(1 1, 1 5, 5 5)') AS the_geom) AS table1
));
Es gibt aus:
st_astext
------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------
POLYGON((0.5 5,0.509607359798385 5.09754516100806,0.538060233744357 5.19134171618254,0.584265193848727 5.2777851165098,
0.646446609406726 5.35355339059327,0.722214883490199 5.41573480615127,0.808658283817455 5.46193976625564,0.9024548389919
36 5.49039264020162,1 5.5,5 5.5,5 5,1 5,1 1,0.5 1,0.5 5))
POLYGON((5 5,5 4.5,1.5 4.5,1.5 1,1 1,1 5,5 5))
(2 rows)
Der Code funktioniert folgendermaßen:
- Puffern Sie die Linienfolge mit ST_Buffer. Wir nutzen die PostGIS 1.5-Funktion, die benutzerdefinierte Endkappen unterstützt, um überhaupt keine Endkappe festzulegen. Siehe folgendes Beispiel.
- Teilen Sie das gepufferte Polygon mithilfe der im Wiki dokumentierten Methode in zwei Teile, wobei Sie die ursprüngliche Linie verwenden .
Dies könnte verbessert werden, um künftig mit sich selbst kreuzenden Leitungen fertig zu werden.