Questo esempio crea due poligoni su entrambi i lati di una stringa lineare. Richiede PostGIS 1.5 o versione successiva. Non sono sicuro di come riuscirà a far fronte alle linee che si incrociano.
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
));
Emette:
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)
Il codice funziona nel modo seguente:
- Buffer il linestring usando ST_Buffer. Approfittiamo della funzione PostGIS 1.5 che supporta endcaps personalizzati per non specificare alcun limite. Vedi esempio sotto.
- Dividi il poligono bufferizzato in due, usando la linea originale, usando il metodo documentato nel wiki .
Ciò potrebbe essere migliorato per far fronte alle linee auto-attraversanti in futuro.