Sampel ini membuat dua poligon di kedua sisi linestring. Itu membutuhkan PostGIS 1.5 atau lebih tinggi. Saya tidak yakin seberapa baik itu akan mengatasi garis yang melintasi diri mereka sendiri.
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
));
Ini menghasilkan:
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)
Kode bekerja dengan cara berikut:
- Buffer linestring menggunakan ST_Buffer. Kami memanfaatkan fitur PostGIS 1.5 yang mendukung endcaps khusus untuk menentukan tanpa batas sama sekali. Lihat contoh di bawah ini.
- Split poligon buffered menjadi dua, menggunakan baris asli, menggunakan metode yang didokumentasikan dalam wiki .
Ini dapat ditingkatkan untuk mengatasi garis penyilangan diri di masa depan.