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 यूटीसी के "ज़ुलू" फ़ॉर्मैट में एक टाइमस्टैंप, जिसमें नैनोसेकंड रिज़ॉल्यूशन और ज़्यादा से ज़्यादा नौ फ़्रैक्शनल अंक हैं. उदाहरण के लिए: "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"] का मतलब है, रास्ते पर पिकअप करने की सभी लागतों का कुल योग. मॉडल में तय की गई सभी कीमतों के बारे में यहां पूरी जानकारी दी गई है. हालांकि, ट्रांज़िशन एट्रिब्यूट से जुड़ी लागत को छोड़कर, ये कीमतें सिर्फ़ 2022/01 तक के डेटा के आधार पर रिपोर्ट की गई हैं.

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 यूटीसी के "ज़ुलू" फ़ॉर्मैट में एक टाइमस्टैंप, जिसमें नैनोसेकंड रिज़ॉल्यूशन और ज़्यादा से ज़्यादा नौ फ़्रैक्शनल अंक हैं. उदाहरण: "2014-10-02T15:01:23Z" और "2014-10-02T15:01:23.045123456Z".

routePolyline

object (EncodedPolyline)

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

routeToken

string

सिर्फ़ आउटपुट के लिए. एक ओपेक टोकन, जिसे नेविगेशन के दौरान रूट के स्ट्रक्चर को फिर से बनाने के लिए, नेविगेशन 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".