ตัวอย่างนี้สร้างรูปหลายเหลี่ยมสองรูปที่ด้านใดด้านหนึ่งของ linestring ต้องใช้ PostGIS 1.5 หรือสูงกว่า ฉันไม่แน่ใจว่ามันจะรับมือกับเส้นที่ข้ามตัวเองได้ดีแค่ไหน
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
));
มันเอาท์พุท:
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)
รหัสทำงานด้วยวิธีต่อไปนี้:
- บัฟเฟอร์การคืนค่าโดยใช้ ST_Buffer เราใช้ประโยชน์จากคุณลักษณะ PostGIS 1.5 ที่สนับสนุน endcaps ที่กำหนดเองเพื่อระบุไม่มีการปิดท้ายทั้งหมด ดูตัวอย่างด้านล่าง
- แบ่งรูปหลายเหลี่ยมบัฟเฟอร์ในสองโดยใช้สายเดิมโดยใช้วิธีการบันทึกไว้ในวิกิพีเดีย
สิ่งนี้อาจได้รับการปรับปรุงเพื่อรับมือกับเส้นทางการข้ามตนเองในอนาคต