मैं पोस्टगिस में हर एन मीटर में पॉलीलाइन को बिंदुओं में कैसे बदल सकता हूं?


14

काफी के रूप में ही में सवाल यह है, लेकिन मैं PostGIS प्रयोग करना होगा।

मेरे पास कई पॉलीलाइन हैं, और इन पंक्तियों के साथ हर एन मीटर में उन्हें ट्रेसफॉर्म करना चाहते हैं।

संपादित करें: स्टीफन को बहुत धन्यवाद। मेरी अंतिम क्वेरी थोड़ी भिन्न थी, शायद पोस्टजीआईएस (1.5) के पुराने संस्करण के कारण, लेकिन अंत में मुझे वह मिल गया जिसकी आवश्यकता थी। पॉइंट्स को सड़कों के घनत्व के हीटमैप में जोड़ा गया। यहाँ छवि विवरण दर्ज करें


जवाबों:


17

इस क्वेरी को चाल करना चाहिए:

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
  1. सबसे पहले आप अपने पॉलीइंस्ट्रिंजर कॉलम से अलग-अलग लिनेस्ट्रिंग्स का चयन करें ST_Dump

  2. फिर आपको माप तत्वों को परिभाषित करना होगा ST_AddMeasure, 0 से शुरू (लिनेस्ट्रिंग की शुरुआत) और लिनेस्ट्रिंग के अंत में (लिनेस्ट्रिंग की लंबाई के समान)। Generate_seriesइस माप पर एक श्रृंखला बनाता है। 10. यहाँ आप परिभाषित कर सकते हैं "n metres"(इस उदाहरण में 10 मीटर)। iमूल्य हर linestring के लिए नए सिरे से शुरू होता है।

  3. के साथ ST_LocateAlongऔर ST_GeometryNआप एक बहुआयामी बिंदु ज्यामिति बनाते हैं।

  4. अंत में आपको इस ज्यामिति के X और Y मानों को निकालना होगा और उससे एक बिंदु बनाना होगा।

परिणाम इस तरह दिख सकता है: यहाँ छवि विवरण दर्ज करें

संपादित करें

निष्पक्ष होने के लिए, मैं इस जानकारी को जोड़ना चाहता हूं: इस उत्तर में विचार और क्वेरी को उस क्वेरी से निकाला जाता है जिसका उपयोग मैं पोस्ट जीआईएस में डीईएम से ड्रैप लाइनें बनाने के लिए कर रहा हूं। इसका उत्कृष्ट कार्यान्वयन इस लेख में मैथ्यू लीप्लाट्रे से समझाया गया है ।


क्या आप स्पष्ट कर सकते हैं, b / c मैं इन SQL निर्माणों से परिचित नहीं हूँ: जहाँ WITH line ASउपयोग किया जाता है? मैं कहीं और 'लाइन' नहीं देखता।
culbrón

2
@ culebrón WITH Queryबड़े प्रश्नों के लिए अस्थायी तालिकाओं का उपयोग प्रदान करता है। यहाँ कुछ जानकारी दी गई है: postgresql.org/docs/8.4/static/queries-with.htmllineअगले उप-क्षेत्र में उपयोग किया जाता है linemeasure। इस उपश्रेणी में चयनित डेटा उपश्रेणी में किए गए चयनों पर आधारित है line। वे एक दूसरे पर निर्माण कर रहे हैं। उम्मीद है कि मदद की!
स्टीफन

2.0 से अधिक पुराने PostGIS में फ़ंक्शन होता है st_locate_along_measure
culebrón
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.