ShipmentRoute

समय अक्ष के साथ, वाहन के रास्ते को इस तरह से अलग-अलग किया जा सकता है (हम मानते हैं कि 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 यूनीक होता है और अगली विज़िट (या वाहन के खत्म होने) से ठीक पहले, यह लगातार एक समयावधि होनी चाहिए. इसलिए, डिलीवरी में लगने वाले समय की शुरुआत और खत्म होने का समय जानने के लिए, डिलीवरी में लगने वाले समय की जानकारी ही काफ़ी है.
  • ब्रेक, एक-दूसरे से जुड़ी अवधियां होती हैं, जो ओवरलैप नहीं होतीं. जवाब में, हर ब्रेक के शुरू होने का समय और उसकी अवधि की जानकारी दी जाती है.
  • TRAVEL और WAIT "प्रीएमप्ट किए जा सकते हैं": इस ट्रांज़िशन के दौरान, इनमें कई बार रुकावट आ सकती है. क्लाइंट यह मान सकते हैं कि यात्रा "जितनी जल्दी हो सके" पूरी हो जाएगी और बाकी समय "इंतज़ार" में बीत जाएगा.

एक (जटिल) उदाहरण:

                               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 (Visit)
    }
  ],
  "transitions": [
    {
      object (Transition)
    }
  ],
  "hasTrafficInfeasibilities": boolean,
  "routePolyline": {
    object (EncodedPolyline)
  },
  "breaks": [
    {
      object (Break)
    }
  ],
  "metrics": {
    object (AggregatedMetrics)
  },
  "routeCosts": {
    string: number,
    ...
  },
  "routeTotalCost": number
}
फ़ील्ड
vehicleIndex

integer

रूट पर चलने वाला वाहन, जिसकी पहचान सोर्स ShipmentModel में उसके इंडेक्स से की जाती है.

vehicleLabel

string

इस रास्ते पर चलने वाले वाहन का लेबल. अगर यह जानकारी दी गई है, तो यह ShipmentModel.vehicles(vehicleIndex).label के बराबर होना चाहिए.

vehicleStartTime

string (Timestamp format)

वाहन के रूट शुरू होने का समय.

आरएफ़सी3339 यूटीसी के "Zulu" फ़ॉर्मैट में एक टाइमस्टैंप, नैनोसेकंड रिज़ॉल्यूशन और नौ दशमलव अंकों के साथ. उदाहरण के लिए: "2014-10-02T15:01:23Z" और "2014-10-02T15:01:23.045123456Z".

vehicleEndTime

string (Timestamp format)

वह समय जब गाड़ी अपना रास्ता पूरा कर लेती है.

आरएफ़सी3339 यूटीसी के "Zulu" फ़ॉर्मैट में एक टाइमस्टैंप, नैनोसेकंड रिज़ॉल्यूशन और नौ दशमलव अंकों के साथ. उदाहरण के लिए: "2014-10-02T15:01:23Z" और "2014-10-02T15:01:23.045123456Z".

visits[]

object (Visit)

किसी रास्ते को दिखाने वाली विज़िट का क्रम. visits[i] रास्ते में i-वी विज़िट है. अगर यह फ़ील्ड खाली है, तो वाहन को इस्तेमाल न किए जाने वाला माना जाता है.

transitions[]

object (Transition)

रास्ते के लिए ट्रांज़िशन की क्रम से लगाई गई सूची.

hasTrafficInfeasibilities

boolean

जब OptimizeToursRequest.consider_road_traffic को 'सही' पर सेट किया जाता है, तो यह फ़ील्ड बताता है कि ट्रैफ़िक के आधार पर यात्रा की अनुमानित अवधि का इस्तेमाल करके, रास्ते के समय में होने वाली गड़बड़ियों का अनुमान लगाया जाता है. ट्रैफ़िक के हिसाब से यात्रा में लगने वाले समय, देरी, और विज़िट के बीच के ब्रेक को पूरा करने के लिए, शायद समय कम हो. ऐसा पहली विज़िट से पहले या आखिरी विज़िट के बाद हो सकता है. हालांकि, विज़िट और वाहन के लिए तय की गई समयसीमा पूरी हो सकती है. उदाहरण के लिए,

  startTime(previous_visit) + duration(previous_visit) +
  travelDuration(previous_visit, next_visit) > startTime(next_visit)

ट्रैफ़िक की वजह से, यात्रा में लगने वाले समय travelDuration(previous_visit, next_visit) का अनुमान बढ़ने की वजह से, next_visit पर पहुंचने में, मौजूदा समय अवधि से ज़्यादा समय लग सकता है. साथ ही, यात्रा के अनुमानित समय में बढ़ोतरी और विज़िट या ब्रेक के समय की विंडो से जुड़ी पाबंदियों की वजह से, ब्रेक और विज़िट ओवरलैप हो सकती है.

routePolyline

object (EncodedPolyline)

रूट की कोड में बदली गई पॉलीलाइन. यह फ़ील्ड सिर्फ़ तब पॉप्युलेट होता है, जब OptimizeToursRequest.populate_polylines को 'सही है' पर सेट किया गया हो.

breaks[]

object (Break)

इस रास्ते पर चलने वाले वाहन के लिए ब्रेक का शेड्यूल. breaks क्रम, समय के अंतराल दिखाता है. हर अंतराल, startTime से शुरू होता है और duration सेकंड तक चलता है.

metrics

object (AggregatedMetrics)

इस रास्ते के लिए, कुल समय, दूरी, और लोड की मेट्रिक. कॉन्टेक्स्ट के हिसाब से, AggregatedMetrics के फ़ील्ड को सभी ShipmentRoute.transitions या ShipmentRoute.visits के लिए जोड़ा जाता है.

routeCosts

map (key: string, value: number)

रास्ते की कीमत, जिसे कीमत से जुड़े अनुरोध फ़ील्ड के हिसाब से बांटा गया है. इनपुट OptimizeToursRequest के हिसाब से, कुंजियां प्रोटो पाथ होती हैं, जैसे कि "model.shipments.pickups.cost". साथ ही, वैल्यू, उससे जुड़े लागत फ़ील्ड से जनरेट की गई कुल लागत होती हैं, जो पूरे रूट में एग्रीगेट की जाती हैं. दूसरे शब्दों में, costs["model.shipments.pickups.cost"] का मतलब है, रास्ते पर पिकअप करने की सभी लागतों का कुल योग. मॉडल में तय की गई सभी लागतों की जानकारी यहां दी गई है. हालांकि, TransitionAttributes से जुड़ी लागतों की जानकारी 01/2022 से सिर्फ़ एग्रीगेट तरीके से दी गई है.

routeTotalCost

number

रास्ते की कुल कीमत. लागत के मैप में मौजूद सभी लागतों का कुल योग.

यहां जाएं

किसी रूट के दौरान की गई विज़िट. यह विज़िट, Shipment के पिकअप या डिलीवरी से जुड़ी है.

JSON के काेड में दिखाना
{
  "shipmentIndex": integer,
  "isPickup": boolean,
  "visitRequestIndex": integer,
  "startTime": string,
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "detour": string,
  "shipmentLabel": string,
  "visitLabel": string
}
फ़ील्ड
shipmentIndex

integer

सोर्स ShipmentModel में shipments फ़ील्ड का इंडेक्स.

isPickup

boolean

अगर यह वैल्यू 'सही' है, तो इसका मतलब है कि विज़िट, Shipment के पिकअप से जुड़ी है. अगर ऐसा नहीं है, तो यह डिलीवरी से जुड़ा होता है.

visitRequestIndex

integer

Shipment के पिकअप या डिलीवरी फ़ील्ड में VisitRequest का इंडेक्स (isPickup देखें).

startTime

string (Timestamp format)

विज़िट शुरू होने का समय. ध्यान दें कि हो सकता है कि वाहन, विज़िट की जगह पर इससे पहले पहुंच जाए. समय, ShipmentModel के हिसाब से सही हों.

आरएफ़सी3339 यूटीसी के "Zulu" फ़ॉर्मैट में एक टाइमस्टैंप, नैनोसेकंड रिज़ॉल्यूशन और नौ दशमलव अंकों के साथ. उदाहरण के लिए: "2014-10-02T15:01:23Z" और "2014-10-02T15:01:23.045123456Z".

loadDemands

map (key: string, value: object (Load))

शिपमेंट और विज़िट के अनुरोध loadDemands के योग के तौर पर, विज़िट लोड की कुल मांग. अगर विज़िट डिलीवरी है, तो वैल्यू नेगेटिव होती हैं. मांगों की रिपोर्ट, Transition.loads (यह फ़ील्ड देखें) के टाइप के हिसाब से की जाती है.

detour

string (Duration format)

आपके डिलीवरी पते पर पहुंचने से पहले, रास्ते में जिन शिपमेंट को डिलीवर किया गया है उनकी वजह से, डिलीवरी में लगने वाला अतिरिक्त समय. साथ ही, समयसीमा की वजह से इंतज़ार करने में लगने वाला समय. अगर विज़िट डिलीवरी के लिए है, तो डेलिवरी के लिए किए गए सफ़र का हिसाब, पिकअप के लिए किए गए सफ़र से लगाया जाता है. यह हिसाब इस तरह लगाया जाता है:

startTime(delivery) - startTime(pickup)
- (duration(pickup) + travel duration from the pickup location
to the delivery location).

अगर ऐसा नहीं है, तो इसका हिसाब वाहन startLocation से लगाया जाता है और यह इसकी बराबर होता है:

startTime - vehicleStartTime - travel duration from
the vehicle's `startLocation` to the visit.

सेकंड में कुल अवधि, जिसमें दशमलव के बाद नौ अंक हो सकते हैं. यह अवधि 's' पर खत्म होती है. उदाहरण: "3.5s".

shipmentLabel

string

अगर Shipment में बताया गया है, तो उससे जुड़े Shipment.label की कॉपी.

visitLabel

string

अगर VisitRequest में बताया गया है, तो उससे जुड़े VisitRequest.label की कॉपी.

ट्रांज़िशन

रास्ते पर दो इवेंट के बीच ट्रांज़िशन. ShipmentRoute की जानकारी देखें.

अगर वाहन में startLocation और/या endLocation नहीं है, तो यात्रा से जुड़ी मेट्रिक की वैल्यू 0 होगी.

JSON के काेड में दिखाना
{
  "travelDuration": string,
  "travelDistanceMeters": number,
  "trafficInfoUnavailable": boolean,
  "delayDuration": string,
  "breakDuration": string,
  "waitDuration": string,
  "totalDuration": string,
  "startTime": string,
  "routePolyline": {
    object (EncodedPolyline)
  },
  "routeToken": string,
  "vehicleLoads": {
    string: {
      object (VehicleLoad)
    },
    ...
  }
}
फ़ील्ड
travelDuration

string (Duration format)

इस ट्रांज़िशन के दौरान यात्रा की अवधि.

सेकंड में कुल अवधि, जिसमें दशमलव के बाद नौ अंक हो सकते हैं. यह अवधि 's' पर खत्म होती है. उदाहरण: "3.5s".

travelDistanceMeters

number

ट्रांज़िशन के दौरान तय की गई दूरी.

trafficInfoUnavailable

boolean

जब OptimizeToursRequest.consider_road_traffic के ज़रिए ट्रैफ़िक का अनुरोध किया जाता है और Transition के लिए ट्रैफ़िक की जानकारी नहीं मिल पाती, तो यह बूलियन 'सही है' पर सेट हो जाता है. ऐसा कुछ समय के लिए हो सकता है (रीयल टाइम ट्रैफ़िक सर्वर में कभी-कभी रुकावट आ सकती है) या हमेशा के लिए हो सकता है (इस जगह के लिए कोई डेटा नहीं है).

delayDuration

string (Duration format)

इस ट्रांज़िशन पर लागू होने वाली देरी की कुल अवधि. अगर कोई देरी है, तो यह अगले इवेंट (विज़िट या वाहन के खत्म होने) से ठीक delayDuration सेकंड पहले शुरू होती है. TransitionAttributes.delay देखें.

सेकंड में कुल अवधि, जिसमें दशमलव के बाद नौ अंक हो सकते हैं. यह अवधि 's' पर खत्म होती है. उदाहरण: "3.5s".

breakDuration

string (Duration format)

अगर इस ट्रांज़िशन के दौरान कोई ब्रेक हुआ है, तो उसकी कुल अवधि. हर ब्रेक के शुरू होने के समय और उसकी अवधि की जानकारी, ShipmentRoute.breaks में सेव की जाती है.

सेकंड में कुल अवधि, जिसमें दशमलव के बाद नौ अंक हो सकते हैं. यह अवधि 's' पर खत्म होती है. उदाहरण: "3.5s".

waitDuration

string (Duration format)

इस ट्रांज़िशन के दौरान इंतज़ार करने में लगने वाला समय. इंतज़ार का समय, इंतज़ार में बिताए गए समय से जुड़ा होता है. इसमें ब्रेक का समय शामिल नहीं होता. यह भी ध्यान दें कि इंतज़ार का यह समय, एक-दूसरे से अलग-अलग इंटरवल में हो सकता है.

सेकंड में कुल अवधि, जिसमें दशमलव के बाद नौ अंक हो सकते हैं. यह अवधि 's' पर खत्म होती है. उदाहरण: "3.5s".

totalDuration

string (Duration format)

ट्रांज़िशन की कुल अवधि, जो आपकी सुविधा के लिए दी गई है. यह बराबर है:

  • अगली विज़िट startTime (या अगर यह आखिरी ट्रांज़िशन है, तो vehicleEndTime) - इस ट्रांज़िशन का startTime;
  • अगर ShipmentRoute.has_traffic_infeasibilities गलत है, तो यह भी लागू होता है: `totalDuration = travelDuration + delayDuration
  • breakDuration + waitDuration`.

सेकंड में कुल अवधि, जिसमें दशमलव के बाद नौ अंक हो सकते हैं. यह अवधि 's' पर खत्म होती है. उदाहरण: "3.5s".

startTime

string (Timestamp format)

इस ट्रांज़िशन का शुरू होने का समय.

आरएफ़सी3339 यूटीसी के "Zulu" फ़ॉर्मैट में एक टाइमस्टैंप, नैनोसेकंड रिज़ॉल्यूशन और नौ दशमलव अंकों के साथ. उदाहरण के लिए: "2014-10-02T15:01:23Z" और "2014-10-02T15:01:23.045123456Z".

routePolyline

object (EncodedPolyline)

ट्रांज़िशन के दौरान इस्तेमाल किए गए रास्ते की जानकारी देने वाली कोड की गई पॉलीलाइन. यह फ़ील्ड सिर्फ़ तब पॉप्युलेट होता है, जब populateTransitionPolylines को 'सही है' पर सेट किया गया हो.

routeToken

string

सिर्फ़ आउटपुट के लिए. यह एक ऐसा टोक़न है जिसे नेविगेशन के दौरान रास्ते को फिर से बनाने के लिए, Navigation SDK को पास किया जा सकता है. साथ ही, रास्ते को फिर से बनाने की स्थिति में, रास्ता बनाने के मूल मकसद का सम्मान किया जाता है. इस टोकन को एक ओपेक ब्लॉब के तौर पर इस्तेमाल करें. अलग-अलग अनुरोधों में इसकी वैल्यू की तुलना न करें. ऐसा इसलिए, क्योंकि सेवा का वही रास्ता दिखाने पर भी इसकी वैल्यू बदल सकती है. यह फ़ील्ड सिर्फ़ तब पॉप्युलेट होता है, जब populateTransitionPolylines को 'सही है' पर सेट किया गया हो.

vehicleLoads

map (key: string, value: object (VehicleLoad))

इस ट्रांज़िशन के दौरान, वाहन के हर उस टाइप के लिए लोड होता है जो इस वाहन के Vehicle.load_limits में दिखता है या इस रूट पर किए गए किसी शिपमेंट पर Shipment.load_demands शून्य से ज़्यादा होता है.

पहले ट्रांज़िशन के दौरान लोड, वाहन के रूट के शुरुआती लोड होते हैं. इसके बाद, हर विज़िट के बाद, विज़िट के loadDemands को जोड़ा या घटाया जाता है, ताकि अगले ट्रांज़िशन के लोड का पता चल सके. यह इस बात पर निर्भर करता है कि विज़िट, पिकअप थी या डिलीवरी.

EncodedPolyline

पॉलीलाइन का कोड में बदला गया वर्शन. पॉलीलाइन को कोड में बदलने के बारे में ज़्यादा जानकारी यहां मिल सकती है: https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding.

JSON के काेड में दिखाना
{
  "points": string
}
फ़ील्ड
points

string

पॉलीलाइन के कोड में बदले गए पॉइंट दिखाने वाली स्ट्रिंग.

ब्रेक

ब्रेक के लागू होने की जानकारी देने वाला डेटा.

JSON के काेड में दिखाना
{
  "startTime": string,
  "duration": string
}
फ़ील्ड
startTime

string (Timestamp format)

ब्रेक शुरू होने का समय.

आरएफ़सी3339 यूटीसी के "Zulu" फ़ॉर्मैट में एक टाइमस्टैंप, नैनोसेकंड रिज़ॉल्यूशन और नौ दशमलव अंकों के साथ. उदाहरण के लिए: "2014-10-02T15:01:23Z" और "2014-10-02T15:01:23.045123456Z".

duration

string (Duration format)

ब्रेक की अवधि.

सेकंड में कुल अवधि, जिसमें दशमलव के बाद नौ अंक हो सकते हैं. यह अवधि 's' पर खत्म होती है. उदाहरण: "3.5s".