แบบสอบถามนี้ควรทำเคล็ดลับ:
WITH line AS
(SELECT
your_polylinestring_id,
(ST_Dump(geom)).geom AS geom
FROM your_polylinestring_table),
linemeasure AS
(SELECT
ST_AddMeasure(line.geom, 0, ST_Length(line.geom)) AS linem,
generate_series(0, ST_Length(line.geom)::int, 10) AS i
FROM line),
geometries AS (
SELECT
i,
(ST_Dump(ST_GeometryN(ST_LocateAlong(linem, i), 1))).geom AS geom
FROM linemeasure)
SELECT
i,
ST_SetSRID(ST_MakePoint(ST_X(geom), ST_Y(geom)), 31468) AS geom
FROM geometries
ในตอนแรกคุณเลือก linestrings ที่แตกต่างจากคอลัมน์ polylinestring ของคุณด้วย ST_Dump
จากนั้นคุณต้องกำหนดองค์ประกอบการวัดด้วยST_AddMeasure
เริ่มต้นด้วย 0 (เริ่มต้นจากการ linestring) และสิ้นสุดการ linestring (เช่นเดียวกับความยาวของ linestring) Generate_series
สร้างชุดข้อมูลบนการวัดนี้โดยขั้นตอนที่ 10 ที่นี่คุณสามารถกำหนด"n metres"
(ในตัวอย่างนี้ 10 เมตร) i
ค่าเริ่มต้นใหม่อีกครั้งสำหรับทุก LineString
ด้วยST_LocateAlong
และST_GeometryN
คุณสร้างเรขาคณิตจุดหลายมิติ
ในที่สุดคุณต้องแยกค่า X และ Y ของรูปทรงเรขาคณิตนี้และสร้างจุดจากมัน
ผลลัพธ์อาจมีลักษณะเช่นนี้:
แก้ไข
เพื่อความเป็นธรรมฉันต้องการเพิ่มข้อมูลนี้: ความคิดและแบบสอบถามในคำตอบนี้ถูกแยกออกจากแบบสอบถามที่ฉันใช้เพื่อสร้างเส้นผ้าม่านจาก DEMs ใน PostGIS การใช้งานที่ยอดเยี่ยมของสิ่งนี้ได้อธิบายไว้ในบทความนี้จาก Mathieu Leplatre