ทดสอบบน QGIS 2.18 และ QGIS 3.4
"lines"
สมมติว่ามีชั้นเส้นที่เรียกว่า
ฉันสามารถแนะนำให้ใช้ "Virtual Layer" ผ่าน Layer > Add Layer > Add/Edit Virtual Layer...
มีหลายกรณีที่เป็นไปได้:
กรณีที่ 1. การแบ่งบรรทัดออกเป็นเซ็กเมนต์ที่เท่ากันโดยทั่วไปความยาวเท่ากันซึ่งผู้ใช้กำหนด
ด้วย Query ต่อไปนี้เป็นไปได้ที่จะบรรลุผล เพื่อเพิ่ม / ลดความยาวส่วนโปรดปรับใน1000 AS step_length
-- configurations
-- generate series
WITH RECURSIVE generate_sections(id, sec) AS (
SELECT conf.start + 1, conf.start
FROM conf
UNION ALL
SELECT id + conf.step, sec + conf.step_length/conf.length_line
FROM generate_sections, conf
WHERE sec + conf.step_length/conf.length_line <= 1
),
-- configurations
conf AS (
SELECT
0.0 AS start,
1.0 AS step,
1000 AS step_length,
ST_Length(l.geometry) AS length_line
FROM lines AS l
)
-- query
SELECT gs.id AS id,
ROUND(ST_Length(ST_Line_Substring(l.geometry, start + sec, sec + conf.step_length/conf.length_line)),0) AS seg_length,
ST_Line_Substring(l.geometry, start + sec, sec + conf.step_length/conf.length_line) AS geom
FROM generate_sections AS gs, lines AS l, conf
GROUP BY gs.id
เลเยอร์เสมือนเอาต์พุตจะมีลักษณะดังต่อไปนี้
หมายเหตุ:หาก 'เดลต้า' (เช่นส่วนที่สั้นที่สุดที่ผ่านมา) ไม่ควรรวมแล้วใส่WHERE sec_length >= step_length
ใน-- query
ดูด้านล่าง
-- query
SELECT gs.id AS id,
ROUND(ST_Length(ST_Line_Substring(l.geometry, start + sec, sec + conf.step_length/conf.length_line)),0) AS seg_length,
ST_Line_Substring(l.geometry, start + sec, sec + conf.step_length/conf.length_line) AS geom
FROM generate_sections AS gs, lines AS l, conf
WHERE seg_length >= step_length
GROUP BY gs.id
กรณีที่ 2.แยกบรรทัดออกเป็นเซ็กเมนต์จำนวนหนึ่ง
ด้วย Query ต่อไปนี้เป็นไปได้ที่จะบรรลุผล เพื่อเพิ่ม / ลดจำนวนของกลุ่มโปรดปรับใน8 AS sections
-- configurations
-- generate series
WITH RECURSIVE generate_sections(id, sec) AS (
SELECT conf.start + 1, conf.start
FROM conf
UNION ALL
SELECT id + conf.step, sec + conf.step
FROM generate_sections, conf
WHERE sec + conf.step < conf.sections
),
-- configurations
conf AS (
SELECT
8 AS sections,
0.0 AS start,
1.0 AS step
)
-- query
SELECT gs.id AS id,
ST_Line_Substring(l.geometry, conf.start + sec/conf.sections, sec/conf.sections + step/conf.sections) AS geom,
ROUND(ST_Length(ST_Line_Substring(l.geometry, conf.start + sec/conf.sections, sec/conf.sections + step/conf.sections)),2) AS seg_length
FROM generate_sections AS gs, lines AS l, conf
WHERE start + step < sections
GROUP BY gs.id
เลเยอร์เสมือนเอาต์พุตจะมีลักษณะดังต่อไปนี้