इस क्वेरी को चाल करना चाहिए:
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
सबसे पहले आप अपने पॉलीइंस्ट्रिंजर कॉलम से अलग-अलग लिनेस्ट्रिंग्स का चयन करें ST_Dump
फिर आपको माप तत्वों को परिभाषित करना होगा ST_AddMeasure
, 0 से शुरू (लिनेस्ट्रिंग की शुरुआत) और लिनेस्ट्रिंग के अंत में (लिनेस्ट्रिंग की लंबाई के समान)। Generate_series
इस माप पर एक श्रृंखला बनाता है। 10. यहाँ आप परिभाषित कर सकते हैं "n metres"
(इस उदाहरण में 10 मीटर)। i
मूल्य हर linestring के लिए नए सिरे से शुरू होता है।
के साथ ST_LocateAlong
और ST_GeometryN
आप एक बहुआयामी बिंदु ज्यामिति बनाते हैं।
अंत में आपको इस ज्यामिति के X और Y मानों को निकालना होगा और उससे एक बिंदु बनाना होगा।
परिणाम इस तरह दिख सकता है:
संपादित करें
निष्पक्ष होने के लिए, मैं इस जानकारी को जोड़ना चाहता हूं: इस उत्तर में विचार और क्वेरी को उस क्वेरी से निकाला जाता है जिसका उपयोग मैं पोस्ट जीआईएस में डीईएम से ड्रैप लाइनें बनाने के लिए कर रहा हूं। इसका उत्कृष्ट कार्यान्वयन इस लेख में मैथ्यू लीप्लाट्रे से समझाया गया है ।