किसी वाहन के रास्ते को समय के हिसाब से इस तरह से बांटा जा सकता है (हम मानते हैं कि n बार यात्रा की गई है):
| | | | | T[2], | | |
| Transition | Visit #0 | | | V[2], | | |
| #0 | aka | T[1] | V[1] | ... | V[n-1] | T[n] |
| aka T[0] | V[0] | | | V[n-2],| | |
| | | | | T[n-1] | | |
^ ^ ^ ^ ^ ^ ^ ^
vehicle V[0].start V[0].end V[1]. V[1]. V[n]. V[n]. vehicle
start (arrival) (departure) start end start end end
ध्यान दें कि हम इन दोनों के बीच अंतर करते हैं:
- "समय पर होने वाले इवेंट", जैसे कि वाहन के शुरू और बंद होने का समय, हर यात्रा के शुरू और खत्म होने का समय (यानी कि पहुंचने और निकलने का समय). ये इवेंट, किसी तय समय पर होते हैं.
- "समय के अंतराल" के बारे में जानकारी मिलती है. जैसे, विज़िट और विज़िट के बीच का ट्रांज़िशन. हालांकि, समय के अंतराल की अवधि कभी-कभी शून्य हो सकती है.इसका मतलब है कि यह एक ही सेकंड में शुरू और खत्म हो सकता है. हालांकि, अक्सर इसकी अवधि कुछ न कुछ होती है.
इनवेरिएंट:
- अगर n विज़िट हैं, तो n+1 ट्रांज़िशन होंगे.
- विज़िट से पहले हमेशा ट्रांज़िशन (उसी इंडेक्स का) होता है और विज़िट के बाद ट्रांज़िशन (इंडेक्स + 1) होता है.
- वाहन के चालू होने के बाद, हमेशा ट्रांज़िशन #0 होता है.
- वाहन के खत्म होने से पहले हमेशा ट्रांज़िशन #n होता है.
ज़ूम इन करने पर, यहां बताया गया है कि Transition और Visit के दौरान क्या होता है:
---+-------------------------------------+-----------------------------+-->
| TRANSITION[i] | VISIT[i] |
| | |
| * TRAVEL: the vehicle moves from | PERFORM the visit: |
| VISIT[i-1].departure_location to | |
| VISIT[i].arrival_location, which | * Spend some time: |
| takes a given travel duration | the "visit duration". |
| and distance | |
| | * Load or unload |
| * BREAKS: the driver may have | some quantities from the |
| breaks (e.g. lunch break). | vehicle: the "demand". |
| | |
| * WAIT: the driver/vehicle does | |
| nothing. This can happen for | |
| many reasons, for example when | |
| the vehicle reaches the next | |
| event's destination before the | |
| start of its time window | |
| | |
| * DELAY: *right before* the next | |
| arrival. E.g. the vehicle and/or | |
| driver spends time unloading. | |
| | |
---+-------------------------------------+-----------------------------+-->
^ ^ ^
V[i-1].end V[i].start V[i].end
आखिर में, यहां बताया गया है कि ट्रांज़िशन के दौरान TRAVEL, BREAKS, DELAY, और WAIT को कैसे व्यवस्थित किया जा सकता है.
- ये ओवरलैप नहीं होते.
- DELAY यूनीक होता है और यह ज़रूरी है कि यह अगले स्टॉप (या वाहन के खत्म होने) से ठीक पहले का समय हो. इसलिए, इसके शुरू और खत्म होने का समय जानने के लिए, देरी की अवधि जानना काफ़ी है.
- ब्रेक, समय की ऐसी अवधि होती है जो एक के बाद एक होती है और एक-दूसरे से ओवरलैप नहीं होती. जवाब में, हर ब्रेक के शुरू होने का समय और अवधि बताई जाती है.
- यात्रा और इंतज़ार "प्रीएम्प्टेबल" होते हैं: इस ट्रांज़िशन के दौरान, इन्हें कई बार रोका जा सकता है. क्लाइंट यह मान सकते हैं कि यात्रा "जितनी जल्दी हो सके" शुरू हो जाती है और "इंतज़ार" में बाकी समय लगता है.
एक (जटिल) उदाहरण:
TRANSITION[i]
--++-----+-----------------------------------------------------------++-->
|| | | | | | | ||
|| T | B | T | | B | | D ||
|| r | r | r | W | r | W | e ||
|| a | e | a | a | e | a | l ||
|| v | a | v | i | a | i | a ||
|| e | k | e | t | k | t | y ||
|| l | | l | | | | ||
|| | | | | | | ||
--++-----------------------------------------------------------------++-->
| JSON के काेड में दिखाना |
|---|
{ "vehicleIndex": integer, "vehicleLabel": string, "vehicleStartTime": string, "vehicleEndTime": string, "visits": [ { object ( |
| फ़ील्ड | |
|---|---|
vehicleIndex |
रूट पर चलने वाले वाहन की पहचान, सोर्स |
vehicleLabel |
इस रास्ते पर चलने वाले वाहन का लेबल, अगर बताया गया है, तो |
vehicleStartTime |
वह समय जब वाहन अपना रास्ता शुरू करता है. यह आरएफ़सी 3339 का इस्तेमाल करता है. इसमें जनरेट किया गया आउटपुट हमेशा Z-नॉर्मलाइज़ किया जाएगा और इसमें 0, 3, 6 या 9 फ़्रैक्शनल अंक इस्तेमाल किए जाएंगे. "Z" के अलावा, अन्य ऑफ़सेट भी स्वीकार किए जाते हैं. उदाहरण: |
vehicleEndTime |
वह समय जब वाहन अपने रास्ते पर चलना बंद कर देता है. यह आरएफ़सी 3339 का इस्तेमाल करता है. इसमें जनरेट किया गया आउटपुट हमेशा Z-नॉर्मलाइज़ किया जाएगा और इसमें 0, 3, 6 या 9 फ़्रैक्शनल अंक इस्तेमाल किए जाएंगे. "Z" के अलावा, अन्य ऑफ़सेट भी स्वीकार किए जाते हैं. उदाहरण: |
visits[] |
विज़िट का क्रम, जो किसी रास्ते को दिखाता है. visits[i] रास्ते में i-th विज़िट है. अगर यह फ़ील्ड खाली है, तो वाहन को इस्तेमाल नहीं किया गया माना जाता है. |
transitions[] |
रास्ते के लिए ट्रांज़िशन की क्रम से लगाई गई सूची. |
hasTrafficInfeasibilities |
ट्रैफ़िक की वजह से, यात्रा में लगने वाले समय का अनुमान |
routePolyline |
रास्ते की एन्कोड की गई पॉलीलाइन. यह फ़ील्ड सिर्फ़ तब भरा जाता है, जब |
breaks[] |
इस रूट पर चलने वाले वाहन के लिए तय किए गए ब्रेक. |
metrics |
इस रास्ते के लिए, अवधि, दूरी, और लोड मेट्रिक. कॉन्टेक्स्ट के हिसाब से, |
vehicleFullness |
एक्सपेरिमेंट के तौर पर उपलब्ध: इस फ़ील्ड के काम करने के तरीके या इसकी उपलब्धता में आने वाले समय में बदलाव हो सकता है. |
routeCosts |
रास्ते की लागत, जिसे लागत से जुड़े अनुरोध फ़ील्ड के हिसाब से बांटा गया है. कुंजियां, OptimizeToursRequest के इनपुट के हिसाब से प्रोटो पाथ होती हैं. उदाहरण के लिए, "model.shipments.pickups.cost". वैल्यू, लागत वाले फ़ील्ड से जनरेट की गई कुल लागत होती है. इसे पूरे रास्ते के हिसाब से एग्रीगेट किया जाता है. दूसरे शब्दों में, costs["model.shipments.pickups.cost"] का मतलब है कि रास्ते में पिकअप करने की सभी लागतों का योग. मॉडल में तय की गई सभी लागतों की जानकारी यहां दी गई है. हालांकि, TransitionAttributes से जुड़ी लागतों की जानकारी सिर्फ़ एग्रीगेट किए गए तरीके से दी जाती है. यह जानकारी 2022/01 से दी जा रही है. |
routeTotalCost |
रास्ते की कुल लागत. यह लागत के मैप में मौजूद सभी लागतों का योग होती है. |
यहां जाएं
रास्ते में की गई विज़िट. यह विज़िट, Shipment को पिकअप करने या डिलीवर करने से जुड़ी होती है.
| JSON के काेड में दिखाना |
|---|
{ "shipmentIndex": integer, "isPickup": boolean, "visitRequestIndex": integer, "startTime": string, "loadDemands": { string: { object ( |
| फ़ील्ड | |
|---|---|
shipmentIndex |
सोर्स |
isPickup |
अगर वैल्यू सही है, तो इसका मतलब है कि विज़िट, |
visitRequestIndex |
|
startTime |
विज़िट शुरू होने का समय. ध्यान दें कि वाहन, विज़िट की जगह पर इस समय से पहले भी पहुंच सकता है. समय, यह आरएफ़सी 3339 का इस्तेमाल करता है. इसमें जनरेट किया गया आउटपुट हमेशा Z-नॉर्मलाइज़ किया जाएगा और इसमें 0, 3, 6 या 9 फ़्रैक्शनल अंक इस्तेमाल किए जाएंगे. "Z" के अलावा, अन्य ऑफ़सेट भी स्वीकार किए जाते हैं. उदाहरण: |
loadDemands |
शिपमेंट और विज़िट के अनुरोध |
detour |
यात्रा से पहले रास्ते में आने वाले शिपमेंट की वजह से, यात्रा में लगने वाला अतिरिक्त समय. साथ ही, समयसीमा की वजह से इंतज़ार में लगने वाला संभावित समय. अगर यात्रा डिलीवरी के लिए है, तो यात्रा में लगने वाले अतिरिक्त समय का हिसाब, पिकअप की यात्रा के हिसाब से लगाया जाता है. यह इस तरह से लगाया जाता है: अगर ऐसा नहीं है, तो इसका हिसाब वाहन के यह सेकंड में अवधि होती है. इसमें नौ दशमलव अंकों तक हो सकते हैं. यह ' |
shipmentLabel |
अगर |
visitLabel |
अगर |
visitType |
ज़रूरी नहीं. इससे विज़िट का टाइप पता चलता है. |
injectedSolutionLocationToken |
यह एक अपारदर्शी टोकन होता है. इससे किसी जगह पर जाने की जानकारी मिलती है. इस फ़ील्ड में, नतीजे के रास्तों की विज़िट की जानकारी अपने-आप भर सकती है. ऐसा तब होता है, जब इस विज़िट के लिए एक्सपेरिमेंट के तौर पर उपलब्ध: ज़्यादा जानकारी के लिए, https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request पर जाएं. |
VisitType
इससे पता चलता है कि विज़िट, पिकअप, डिलीवरी या Stop के लिए है. Stop पर आने वाले लोगों की जानकारी का इस्तेमाल सिर्फ़ तब किया जाता है, जब मल्टीमॉडल ऑप्टिमाइज़ेशन की सुविधा चालू हो.
| Enums | |
|---|---|
VISIT_TYPE_UNSPECIFIED |
विज़िट के टाइप की जानकारी नहीं दी गई है. |
PICKUP_SHIPMENT |
विज़िट, शिपमेंट पिकअप से जुड़ी होती है. |
DELIVER_SHIPMENT |
यह विज़िट, शिपमेंट की डिलीवरी से जुड़ी होती है. |
ट्रांज़िशन
रास्ते में मौजूद दो इवेंट के बीच ट्रांज़िशन. ShipmentRoute के बारे में जानकारी देखें.
अगर वाहन में startLocation और/या endLocation नहीं है, तो यात्रा से जुड़ी मेट्रिक की वैल्यू 0 होती है.
| JSON के काेड में दिखाना |
|---|
{ "travelDuration": string, "travelDistanceMeters": number, "trafficInfoUnavailable": boolean, "delayDuration": string, "breakDuration": string, "waitDuration": string, "totalDuration": string, "startTime": string, "routePolyline": { object ( |
| फ़ील्ड | |
|---|---|
travelDuration |
इस ट्रांज़िशन के दौरान यात्रा की अवधि. यह सेकंड में अवधि होती है. इसमें नौ दशमलव अंकों तक हो सकते हैं. यह ' |
travelDistanceMeters |
ट्रांज़िशन के दौरान तय की गई दूरी. |
trafficInfoUnavailable |
जब |
delayDuration |
इस ट्रांज़िशन पर लागू किए गए डिले की अवधि का योग. अगर कोई देरी होती है, तो वह अगले इवेंट (विज़िट या वाहन के रुकने) से ठीक यह सेकंड में अवधि होती है. इसमें नौ दशमलव अंकों तक हो सकते हैं. यह ' |
breakDuration |
इस ट्रांज़िशन के दौरान होने वाले ब्रेक की कुल अवधि. अगर कोई ब्रेक नहीं होता है, तो इसकी वैल्यू 0 होती है. हर ब्रेक के शुरू होने के समय और अवधि की जानकारी, यह सेकंड में अवधि होती है. इसमें नौ दशमलव अंकों तक हो सकते हैं. यह ' |
waitDuration |
इस बदलाव के दौरान इंतज़ार करने में लगा समय. इंतज़ार की अवधि, काम न करने के समय के बराबर होती है. इसमें ब्रेक का समय शामिल नहीं होता. यह भी ध्यान दें कि इंतज़ार करने का यह समय, कई अलग-अलग समय अंतराल में बंटा हो सकता है. यह सेकंड में अवधि होती है. इसमें नौ दशमलव अंकों तक हो सकते हैं. यह ' |
totalDuration |
ट्रांज़िशन की कुल अवधि. यह जानकारी आपकी सुविधा के लिए दी गई है. यह अवधि इस तरह तय होती है:
यह सेकंड में अवधि होती है. इसमें नौ दशमलव अंकों तक हो सकते हैं. यह ' |
startTime |
इस ट्रांज़िशन के शुरू होने का समय. यह आरएफ़सी 3339 का इस्तेमाल करता है. इसमें जनरेट किया गया आउटपुट हमेशा Z-नॉर्मलाइज़ किया जाएगा और इसमें 0, 3, 6 या 9 फ़्रैक्शनल अंक इस्तेमाल किए जाएंगे. "Z" के अलावा, अन्य ऑफ़सेट भी स्वीकार किए जाते हैं. उदाहरण: |
routePolyline |
ट्रांज़िशन के दौरान फ़ॉलो किए गए रूट का कोड में बदला गया पॉलीलाइन प्रज़ेंटेशन. यह फ़ील्ड सिर्फ़ तब दिखता है, जब |
routeToken |
सिर्फ़ आउटपुट. यह एक ओपेक टोकन है. इसे Navigation SDK को पास किया जा सकता है, ताकि नेविगेशन के दौरान रास्ते को फिर से बनाया जा सके. साथ ही, रास्ता बदलने की स्थिति में, जब रास्ता बनाया गया था, तब के मूल मकसद को पूरा किया जा सके. इस टोकन को ओपेक ब्लॉब के तौर पर इस्तेमाल करें. अलग-अलग अनुरोधों के लिए इसकी वैल्यू की तुलना न करें, क्योंकि सेवा से एक ही रास्ता मिलने पर भी इसकी वैल्यू बदल सकती है. यह फ़ील्ड सिर्फ़ तब भरा जाता है, जब |
vehicleLoads |
इस ट्रांज़िशन के दौरान वाहन में मौजूद सामान. यह सामान, हर उस टाइप का होता है जो इस वाहन के पहले ट्रांज़िशन के दौरान लोड किए गए सामान को, वाहन के रूट के शुरुआती लोड माना जाता है. इसके बाद, हर बार आने वाले व्यक्ति के हिसाब से, |
EncodedPolyline
यह पॉलीलाइन का एन्कोड किया गया वर्शन होता है. पॉलीलाइन एन्कोडिंग के बारे में ज़्यादा जानकारी यहां मिल सकती है: https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding.
| JSON के काेड में दिखाना |
|---|
{ "points": string } |
| फ़ील्ड | |
|---|---|
points |
पॉलीलाइन के कोड में बदले गए पॉइंट दिखाने वाली स्ट्रिंग. |
ब्रेक
ब्रेक के लागू होने की जानकारी देने वाला डेटा.
| JSON के काेड में दिखाना |
|---|
{ "startTime": string, "duration": string } |
| फ़ील्ड | |
|---|---|
startTime |
ब्रेक शुरू होने का समय. यह आरएफ़सी 3339 का इस्तेमाल करता है. इसमें जनरेट किया गया आउटपुट हमेशा Z-नॉर्मलाइज़ किया जाएगा और इसमें 0, 3, 6 या 9 फ़्रैक्शनल अंक इस्तेमाल किए जाएंगे. "Z" के अलावा, अन्य ऑफ़सेट भी स्वीकार किए जाते हैं. उदाहरण: |
duration |
ब्रेक की अवधि. यह सेकंड में अवधि होती है. इसमें नौ दशमलव अंकों तक हो सकते हैं. यह ' |
VehicleFullness
VehicleFullness एक मेट्रिक है. इससे यह पता चलता है कि वाहन में कितनी जगह खाली है. हर VehicleFullness फ़ील्ड की वैल्यू 0 से 1 के बीच होती है. इसकी गिनती, कैप की गई मेट्रिक फ़ील्ड (जैसे, AggregatedMetrics.travel_distance_meters) और उससे जुड़ी वाहन की सीमा (जैसे, Vehicle.route_distance_limit) के अनुपात के तौर पर की जाती है. हालांकि, ऐसा तब होता है, जब वाहन की सीमा मौजूद हो. ऐसा न करने पर, फ़ुलनेस रेशियो सेट नहीं होता. अगर सीमा 0 है, तो फ़ील्ड को 1 पर सेट किया जाता है. ध्यान दें: जब किसी रास्ते पर ट्रैफ़िक की वजह से यात्रा करना मुश्किल हो जाता है, तो कुछ मामलों में, बस में यात्रियों की संख्या का अनुपात 1.0 से ज़्यादा हो सकता है. उदाहरण के लिए, बस तय की गई दूरी से ज़्यादा चल सकती है. ऐसे मामलों में, हम फ़ुलनेस वैल्यू को 1.0 पर सीमित कर देते हैं.
| JSON के काेड में दिखाना |
|---|
{ "maxFullness": number, "distance": number, "travelDuration": number, "activeDuration": number, "maxLoad": number, "activeSpan": number } |
| फ़ील्ड | |
|---|---|
maxFullness |
इस मैसेज में मौजूद अन्य सभी फ़ील्ड की ज़्यादा से ज़्यादा वैल्यू. |
distance |
|
travelDuration |
[AggregatedMetrics.travel_duration_seconds][] और |
activeDuration |
[AggregatedMetrics.total_duration_seconds][] और |
maxLoad |
सभी तरह के [AggregatedMetrics.max_load][] और उनके |
activeSpan |
किसी वाहन के लिए, (vehicleEndTime - vehicleStartTime) / (latestVehicleEndTime - earliestVehicleStartTime) का अनुपात. अगर डिनॉमिनेटर मौजूद नहीं है, तो इसके बजाय ( |