फीडर बस सेवा


9

सबसे पहले, थोड़ा पृष्ठभूमि।

मैं एक क्षेत्रीय पारगमन एजेंसी के लिए काम करता हूं। हम अपनी फीडर बस सेवा के बारे में एक "निदान" बना रहे हैं। हम जानना चाहेंगे कि हमारे उपयोगकर्ता अपनी कार लेने के बजाय ट्रेन स्टेशन जाने के लिए किस अनुपात में बस ले सकते हैं। यह पास में कई बार किया गया है, लेकिन हम अब हमारे मुख्य डेटा स्रोत के रूप में gtfs का उपयोग कर रहे हैं, इसलिए हमें अपनी कार्यप्रणाली पर पुनर्विचार करना होगा।

ठेठ फीडर बस सेवा

ट्रेन को "फीडिंग" माना जाता है, बस स्टेशन का ट्रेन स्टेशन (लाल बफ़र्स) से एक निश्चित दूरी के भीतर एक स्टॉप होना चाहिए। इसके अलावा, ट्रेन सेवा के साथ सिंक्रोनाइज़ेशन बहुत महत्वपूर्ण है क्योंकि अगर आपकी बस ट्रेन से आधे घंटे पहले ट्रेन स्टेशन पर आती है, तो प्रतीक्षा समय बहुत लंबा है और आप सुबह 20 मिनट और सोना चाहते हैं और अपनी कार ले सकते हैं।

मान लीजिए कि आप लाइन ए (ब्लू) को स्टॉप १२ पर ले जाते हैं। आप स्टॉप १३ पर बस से उतर जाते हैं। बस स्टॉप १३ पर आती है, जो ट्रेन से १/५ मिनट पहले ट्रेन स्टेशन पर जाने के लिए स्टॉप है। वह बहुत अच्छा है। इसका मतलब यह होगा कि 1 से 13 तक के स्टॉप पर उस बस रूट को ले जाने वाला हर व्यक्ति उस ट्रेन से 5 मिनट पहले पहुंचेगा।

फिर, बहुत सारे स्कूल और क्रॉसिंग के साथ बहुत घनी आबादी वाले क्षेत्र से गुजरने वाली ट्रेन अपनी गति को कम करने के लिए मजबूर है। इस दौरान, बस यात्रियों को 14 से 17 पर रोकती है और उस ट्रेन से # 2 10 मिनट पहले ट्रेन स्टेशन पर आती है। ऐसे में 14 से 17 बजे बस को ले जाने वाले यात्री को ट्रेन स्टेशन पर पहुंचने के बाद सभी को 10 मिनट तक इंतजार करना होगा। तो, उस बस लाइन के साथ, स्टॉप 1 से 13 पर ले जाने वाले यात्रियों के पास 5 मिनट का समय होता है जब 14 से 17 स्टॉप पर बस लेने वालों के लिए 10 मिनट का समय होता है।

लाइन बी, ट्रैक के दूसरी तरफ, ट्रेन स्टेशन # 1 के पास से गुजरती है, लेकिन इसके स्टॉप्स "फीडिंग" ट्रेन स्टेशन # 1 पर विचार करने के लिए बहुत दूर हैं। यह ट्रेन से # 2 7 मिनट पहले ट्रेन स्टेशन पर आता है (सुबह की भीड़ के दौरान हर ट्रेन के लिए इसे करना; यह बहुत अच्छी तरह से सिंक्रनाइज़ है)। इसलिए लाइन बी से जाने वाले यात्रियों को बस स्टॉप 1 से 59 तक हर जगह ले जाने के लिए 7 मिनट का समय होगा।

अब, मेरा सवाल। एक बार जब मैंने निर्धारित कर लिया है कि लाइनए .१३ और स्टॉप ए .१ are स्टॉप मेरी ट्रेन को खिला रहे हैं (यह स्थानिक रूप से, पोस्टजीआईएस में किया गया है), और यह कि # १३ मिनट से पहले एक स्टॉप पर बस लेते समय प्रतीक्षा समय ५ मिनट है, लेकिन बाद में 10 मिनट के प्रतीक्षा समय, मैं उनके सामने सभी स्टॉप के लिए प्रतीक्षा समय कैसे दे सकता हूं?

मैं इसे Postgres / PostGIS (pl / pgsql या pl / python) में करना चाहता हूं, लेकिन मैं शुद्ध python (OS या arcpy) का भी उपयोग कर सकता हूं।

मैं सोच सकता था, मैं पिछड़ गया। इसलिए, जब मुझे एक बार ऐसा स्टॉप मिल गया जो फिट बैठता है (यहाँ लाइनए .१,), १६ को रोकने के लिए एक ही वेटिंग टाइम असाइन करें, तब १५ ... जब तक मुझे एक और स्टॉप नहीं मिल जाता जो मेरे मापदंड (लाइनए १.३) पर फिट बैठता है और फिर बाकी को असाइन करें बंद हो जाता है, 13 के रूप में एक ही प्रतीक्षा समय।

हालांकि इस तरह के एक लूप बनाने का मुझे कोई पता नहीं है। मुझे नहीं लगता कि मैं इसे SQL में कर सकता हूं इसलिए मुझे PostgreSQL में एक प्रक्रियात्मक भाषा का उपयोग करना होगा।

मेरे पास प्रत्येक फीडर स्टॉप के बीच मार्ग को खोजने के लिए pgRout का उपयोग करने का विचार था ताकि लाइन ए को दो में विभाजित किया जा सके (1 से 13 तक और फिर 13 से 17 तक रुक जाता है)। क्या यह आसान होगा?

अगला कदम, सभी स्टॉप से ​​ड्राइविंग समय की गणना करने के लिए pgRout का उपयोग करना होगा, जिसमें प्रतीक्षा समय (LineA.18 और उससे अधिक खेद है!) और तुलनात्मकता की गणना करने के लिए बस के शेड्यूल के साथ तुलना करें (क्या यह 5 ले रहा है) कार में बस में मिनट अधिक?)

कोई विचार? अब तक मैंने जो प्रयास किया है, उसे दिखाने के लिए मैं सामान्य रूप से एक लंबी कार्य-प्रगति स्क्रिप्ट पोस्ट करता हूं, लेकिन मैं अटक गया हूं!


अन्य अजीब मामलों के कारण, अब मैं उन मार्गों को काटने पर विचार करता हूं जहां यात्री बस से उतर सकते हैं। तो, प्रत्येक मार्ग "खंड" स्वतंत्र होगा। मुझे अभी भी यह पता लगाने की आवश्यकता है कि पोस्टगिस में मैं अपने आकृतियों को कैसे काट सकता हूं जब मेरे स्टॉप टॉपोलॉजिकल रूप से सही नहीं हैं (आकार सड़क पर हैं और स्टॉप्स पोल पर हैं ...);)
fgcartographix

जवाबों:


3

वास्तव में आप जो लूप चाहते हैं वह SQL के साथ वास्तव में आसान है:

SELECT DISTINCT ON (b1.line, b1.number) b1.line,b1.number,b2.waiting
FROM busstops AS b1
  LEFT JOIN busstops AS b2
    ON b1.line = b2.line
      AND b1.number<=b2.number
      AND b2.waiting IS NOT NULL
ORDER BY b1.line,b1.number,b2.number;

फील करना

यह कहना भी आसान होगा, मान लीजिए, स्टॉप से ​​स्टॉप ट्रांसफर बार राशि।

और आप नियमित pgRout का उपयोग कर सकते हैं यदि केवल आप मार्गों को लौकिक ग्राफ में परिवर्तित करने का प्रबंधन करते हैं (मार्ग की लागत के लिए प्रस्थान और समय का प्रतिनिधित्व करने वाले नोड्स के साथ)।


यहाँ प्रारंभ करें यह काम करता है ... अभी भी ऐसे हिस्से हैं जो मुझे समझ में नहीं आते हैं, लेकिन मुझे यह विचार मिलता है ... क्या मैं इतना बोल्ड हो सकता हूं कि आप पूछ सकते हैं कि क्या आप प्रतीक्षा समय को ओवरराइड कर सकते हैं अगर बाद में रुकने का समय कम हो? सिद्धांत यह है कि आप पहले ट्रेन स्टेशन को छोड़ सकते हैं यदि आपको प्लेटफ़ॉर्म पर 20 मिनट तक इंतजार करना है और ट्रेन स्टेशन 2 तक बस में रहना है अगर प्रतीक्षा केवल 4 मिनट है ...;) धन्यवाद एक लाख बार !!!
fgcartographix

1
बस ORDER BYक्लॉज बदल दो । पहले दो कॉलम रहने चाहिए क्योंकि वे DISTINCT ONक्लॉज में हैं, लेकिन इसके अलावा सभी की अनुमति है: sqlfield.com/## .1
जैकब

आप एक जादूगर हैं !! :) धन्यवाद! मैं बहुत लंबे समय से इससे जूझ रहा हूँ !!
fgcartographix

बस यह सुनिश्चित कर लें कि एक मिनट के बाद ट्रेन के लिए 4 मिनट का समय नहीं है :)
जैकब कानिया

नाह! अधिकतम प्रतीक्षित समय 30 मिनट है और यहां तक ​​कि एक बड़ा लाल प्रतीक है, यह कहते हुए कि यह वास्तव में अच्छा नहीं है! ;) एक बार फिर धन्यवाद! इसके अलावा, मैंने अपने बॉस के साथ अपनी बात को जीत लिया है कि कोई भी वास्तव में बस पर रुकने वाला नहीं है, शायद पहले वाले की तुलना में ट्रेन स्टेशन पर जाने के लिए 20 मिनट अधिक लंबा समय हो, भले ही प्रतीक्षा समय वास्तव में लंबा हो। ;)
fgcartographix

5

पिछले साल के Google समर ऑफ कोड कार्यक्रम में एक छात्र ने बहु-मोडल रूटिंग के लिए एक pgRout फ़ंक्शन लागू किया था। इसने इसे नए 2.0 रिलीज में नहीं बनाया, इसलिए यह अभी काम नहीं करता है, लेकिन आप उपलब्ध संसाधनों पर एक नज़र रखना चाहते हैं कि यह मददगार है या नहीं:

इस फ़ंक्शन को अगली रिलीज़ में प्राप्त करना अच्छा होगा, इसलिए कृपया अपनी रुचि के मामले में आवश्यक कार्य को समन्वित करने के लिए डेवलपर मेलिंग सूची से संपर्क करें: http://pgrout.org/support.html

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