QGIS 2.18 और QGIS 3.4 पर परीक्षण किया गया
मान लेते हैं कि एक पॉलीलाइन परत है जिसे कहा जाता है "lines"
।
मैं "वर्चुअल लेयर" का उपयोग करके सुझाव दे सकता हूं Layer > Add Layer > Add/Edit Virtual Layer...
कई मामले संभव हैं:
केस 1. लाइन को समान खंडों में विभाजित करना, मूल रूप से समान लंबाई जो उपयोगकर्ता द्वारा परिभाषित की गई है।
निम्नलिखित क्वेरी के साथ, परिणाम प्राप्त करना संभव है। वृद्धि / खंड की लंबाई कम करने के लिए, कृपया समायोजित 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. एक निश्चित संख्या में खंडों में रेखा को विभाजित करना
निम्नलिखित क्वेरी के साथ, परिणाम प्राप्त करना संभव है। बढ़ाने के लिए / क्षेत्रों की संख्या में कमी, कृपया समायोजित 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
आउटपुट वर्चुअल लेयर निम्नलिखित के रूप में दिखेगा