Mẫu này tạo ra hai đa giác ở hai bên của một dòng. Nó đòi hỏi PostGIS 1.5 trở lên. Tôi không chắc nó sẽ đối phó tốt như thế nào với các đường tự vượt qua.
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
));
Nó xuất ra:
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)
Mã này hoạt động theo cách sau:
- Bộ đệm linestring bằng ST_Buffer. Chúng tôi tận dụng tính năng PostGIS 1.5 hỗ trợ các endcaps tùy chỉnh để chỉ định không có giới hạn cuối nào cả. Xem ví dụ dưới đây.
- Chia đa giác đệm thành hai, sử dụng dòng gốc, sử dụng phương thức được ghi lại trong wiki .
Điều này có thể được cải thiện để đối phó với các đường tự vượt trong tương lai.