PostGIS का उपयोग करके बिंदुओं से रेखा बनाना?


10

मेरे पास कई वाहनों की स्थिति डेटा के साथ पोस्टजीआईएस तालिका है और इन बिंदुओं से लाइनें बनाना चाहते हैं।

डेटा को वाहन आईडी द्वारा चुना जा सकता है और टाइमस्टैम्प द्वारा आदेश दिया जा सकता है लेकिन परिणाम से लाइनें कैसे बनाई जाए?

मूल रूप से मुझे बिंदु 1 से बिंदु 2 तक एक पंक्ति खंड की आवश्यकता है, पंक्ति को अंतिम रूप दें और फिर बिंदु 2 से बिंदु 3 तक। निश्चित रूप से वाहन आईडी के विचार के तहत सभी।

उत्तरार्द्ध की आवश्यकता है क्योंकि मैं एक बिंदु से अगले बिंदु तक वाहन की क्रूज़ दिशा और गति की गणना करना चाहता हूं।


1
ST_MakeLine () फ़ंक्शन यह करेगा, एक बार जब आप अपना ग्रुप BY वाहन_आईडी और ORDER BY टाइमस्टैंड द्वारा काम कर लेते हैं। देखें: postgis.refractions.net/docs/ST_MakeLine.html
मीका

ठीक है, मैंने बस इसे एक कोशिश दी और निम्नलिखित बयान जारी किया: SELECT ais_data.mmsi, ST_MakeLine(ais_data.geom) AS newgeom INTO ais_lines FROM (SELECT * FROM ais_data ORDER BY ais_data.mmsi, ais_data.bs_ts ASC) AS ais_data GROUP BY ais_data.mmsi;जो मुझे हर वाहन का ट्रैक देगा, और वास्तव में मुझे इसकी आवश्यकता नहीं है। ST_MakeLine () को बिंदु 1 से बिंदु 2 तक एक पंक्ति बनाने के लिए कैसे कहें, पंक्ति को अंतिम रूप दें और बिंदु 2 से बिंदु 3 तक एक नई शुरुआत करें ...?
थॉमस बेकर

"बिंदु 1", "बिंदु 2", "बिंदु 3" क्या हैं? आप उन्हें कैसे पहचानते हैं?
मीका

मैंने टाइमस्टैम्प के आदेश के माध्यम से उन्हें पहचानने की सोची ... ORDER BY ais_data.bs_ts- क्या यह संभव है? इसलिए, बिंदु 1, बिंदु 2 और इसके बाद मूल रूप से चयन पंक्ति के परिणाम के रूप में प्रत्येक पंक्ति में दी गई बिंदु जानकारी है।
थॉमस बेकर

आप पहले चरण में प्रति वाहन एक लाइन उत्पन्न कर सकते हैं और मेलिंग सूची पोस्टगिस पोस्टगिस .17.x6.nabble.com/ ...
थॉमसजी 77

जवाबों:


12

यह कुछ तरीकों से किया जा सकता है, स्व-जॉइन या सहसंबद्ध उपश्रेणियों का उपयोग करके लेकिन विंडो फ़ंक्शन का उपयोग करना शायद सबसे आसान तरीका है।

फ़ंक्शन lead()एक मान देता है जो दिए गए विभाजन में आगे है और हमारा विभाजन है(PARTITION BY <vehicle_id> ORDER BY <timestamp>)

यह क्वेरी हमें वाहन संख्या, विभाजन में उस बिंदु की स्थिति (जो कि इसके साथ शुरू होने वाली रेखा की स्थिति के बराबर है) और दो ज्यामितीय जो लाइन बना देगी। बेशक यह अंतिम बिंदु के लिए NULL geom2 लौटाता है, इसलिए हमें बाहरी क्वेरी में इसके लिए जांच करनी होगी।

SELECT mmsi, num, ST_MAKELINE(geom,geom2) FROM (
  SELECT mmsi, row_number() OVER w AS num, geom, lead(geom) OVER w AS geom2
  FROM ais_data WINDOW w AS (PARTITION BY mmsi ORDER BY bs_ts) ) as q
WHERE geom2 IS NOT NULL;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.