मैप-मैचिंग जीपीएस सड़क नेटवर्क की ओर इशारा करता है!


11

मैं Postgres और PostGIS के लिए काफी नया हूं।

मैं कुछ जीपीएस बिंदुओं का एक सरल मानचित्र-मिलान (या पथ-निष्कर्ष) करना चाहता हूं। मैं पोस्टग्रेज (पोस्टगिस) का उपयोग कर रहा हूं ।

मेरे डेटाबेस में एक टेबल है जिसमें मेरे GPS पॉइंट हैं: gpspoint (Lat, Long, time, speed, azimuth, ज्यामिति, ...)

मैंने अपने डेटाबेस में सड़क नेटवर्क के एक आकार-प्रकार को भी आयात किया है: मार्ग (gid, idrte, संस्करण, nomrte, norte, clsrte, geom, ...) - मैं लिंक के अज़िमथ नहीं है, और मैं हूँ निश्चित नहीं है कि मैं पोस्टगिस फ़ंक्शन ST_azimuth का उपयोग करके इसकी गणना कैसे कर सकता हूं। मेरे पास सभी सड़क नेटवर्क का एक आकार है जिसमें ऊपर कॉलम सम्‍मिलित हैं।

मैं प्रत्येक जीपीएस बिंदु को निकटतम लिंक (बिंदु के चारों ओर 20 मीटर के बफर में) से जोड़ना चाहता हूं, तभी लिंक की दिशा जीपीएस बिंदु (+ या -15 डिग्री) के अज़ीमथ से सहमत होती है और अनुमानित स्थिति को पुनः प्राप्त करती है। अन्यथा मैं चाहता हूं कि यह 20 मीटर बफर के भीतर NEXT निकटतम लिंक की खोज करे, जिसमें स्वीकार्य अज़ीमुथ हो! (तस्वीर की तरह!)

मैं चाहता हूं कि अनुमानित जीपीएस बिंदुओं के नए निर्देशांक "gpspoint" को "प्रोजेक्टेडलैट" और "प्रोजेक्टलॉन्ग" के रूप में जोड़ा जाए।

(नीचे दी गई तस्वीर में, वास्तविक बिंदुओं को एक दिशा का उपयोग करके दिखाया गया है जबकि प्रक्षेपित बिंदुओं पर कोई दिशा चिह्न नहीं है) यहाँ छवि विवरण दर्ज करें


यह एक दिलचस्प समस्या है। मुझे लगता है कि यदि 20 मी बफर के भीतर अगले बिंदु को भी अस्वीकार्य अज़ीमथ है, तो आप खोज जारी रखना चाहते हैं?
जॉन पॉवेल

हाँ जॉन, लेकिन सिर्फ सड़क खंडों के लिए जो 20 मीटर बफर के साथ हैं! वास्तव में, मैं उन सड़क खंडों की पहचान करना चाहता हूं जो 20 मीटर बफर में हैं, फिर निकटतम खंड ढूंढें जिसमें स्वीकार्य एज़िमथ है!
नादेर

"मुझे लिंक के बारे में जानकारी नहीं है, और मुझे यकीन नहीं है कि मैं इसे पोस्टगिस फ़ंक्शन ST_azimuth का उपयोग करके कैसे गणना कर सकता हूं। मेरे पास सभी सड़क नेटवर्क का एक आकार है जिसमें ऊपर कॉलम कॉलम हैं।" आप कर सकते हैं (और चाहिए) के साथ Postgres / PostGIS में अपने सड़कों लाने shp2pgsql । तब आप उपयोग कर सकते हैं ST_Azimuth, लेकिन ध्यान रखें कि यह डिजिटलीकरण की दिशा के संबंध में आपको अज़ीमथ बताएगा ।
अल्‍फाबेटासॉउप

जवाबों:


1

मेरे पास पूरी तरह से काम नहीं किया गया उत्तर है, लेकिन शायद आपको शुरू करने के लिए पर्याप्त है। ये कार्य मदद कर सकते हैं:

ST_Line_Locate_Point () एक पंक्ति के साथ बिंदु की कुल रेखा लंबाई के एक भाग के रूप में दूरी देता है। ST_Line_Interpolate_Point () एक पंक्ति के साथ एक निश्चित दूरी पर (फिर से कुल लंबाई के एक हिस्से के रूप में) बिंदु के लिए एक बिंदु ज्यामिति देता है।

मैं आपकी लाइन पर एक स्थान 'new_pts' के पॉइंट ज्योमेट्री को प्राप्त करने के लिए यह सुझाव देता हूं जो आपके gpspoint (नीचे एक सबक्वेरी में, क्लॉज़ के रूप में तैयार) के सबसे करीब हैं। फिर उस बिंदु का उपयोग निकटतम बिंदु को वास्तव में लाइन पर खोजने के लिए करें, लेकिन बहुत कम दूरी पर, इसलिए यह शुरुआत के करीब होगा। अगली बार इस पाया बिंदु का उपयोग करें, साथ में उन दोनों के बीच अज़ीमुथ पाने के लिए 'new_pt' के साथ। यह कमोबेश उस बिंदु पर रेखा के स्पर्शरेखा का प्रतिनिधित्व करता है।

फिर आप इस कोण की तुलना अपने gpspoints के azimuth से कर सकते हैं यह निर्धारित करने के लिए कि gpspoint जोड़ना है या नहीं।

with new_pts AS (
    SELECT ST_ClosestPoint(geom, gpspoints) AS geompt
    FROM routes JOIN gpspoints ON ST_Distance(routes.geom, gpspoints.geom)<20
    )


SELECT ST_Azimuth(new_pts.geompt, 
    ST_Line_Interpolate_Point(routes.geom, 
        ST_Line_Locate_Point(routes.geom, new_pts.geompt)*0.999))

FROM routes JOIN new_pts ON ST_Distance(routes.geom,new_pts.geompt)<20;

फिर से, परीक्षण नहीं किया गया है, लेकिन मुझे आशा है कि यह कुछ मदद करेगा।


0

कुछ इस तरह का प्रयास करें:

  1. डिग्री में अपने पॉलीइन्स के अभिविन्यास की गणना करें, उदाहरण: जैसे कि आर्कजीस फील्ड कैलकुलेटर में: 180 + math.at2 ((! Shape.firstpoint.X! -!! shape.lastpoint.X!), (! Shape.firstpoint.Y! -! Shape.lastpoint.Y!)) * (180 / math.pi)

  2. अपने सड़क नेटवर्क को सड़क के कोने (बिंदुओं) में परिवर्तित करें और PostGIS पर आयात करें।

  3. मिलान एल्गोरिथ्म लागू करें:

    मिलान में INSERT (gid, vehicle_id, खंड_id, दिनांक, समय, the_geom)

    DISTINCT ON (b.gid) b.gid, b.vehicle_id, a.segment_id, b.date, b.time, ST_Closestpoint (ST_Collect (a.t__geom), b.the_geom) the_geom FROM के रूप में चुनें

    सेगमेंट_वर्थेस_गेम से एक आंतरिक जुड़ाव

    ST_Transform (b.the_geom, 32632), 20) WHERE ((CAST (a.azimuth AS float8) - CAST (b.direction AS float8)) <180 OR (CAST (a.azimuth AS float8) - CAST (b.direction) AS फ्लोट 8)) -1 -1) ग्रुप बाय b.gid, b.vehicle_id, a.segment_id, b.date, b.time, a.the_geom, b.the_geom ORDER के लिए b.gid, ST_Distance (a.the_geom, b) .the_geom);

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.