ShipmentRoute

Die Route eines Fahrzeugs kann entlang der Zeitachse so zerlegt werden (wir gehen davon aus, dass es n Besuche gibt):

  |            |            |          |       |  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

Beachten Sie, dass wir zwischen folgenden Begriffen unterscheiden:

  • „Punktuelle Ereignisse“, z. B. Start und Ende des Fahrzeugs sowie Start und Ende jedes Besuchs (d. h. Ankunft und Abfahrt). Sie treten zu einer bestimmten Sekunde auf.
  • „Zeitintervalle“, z. B. die Besuche selbst und der Übergang zwischen den Besuchen. Zeitintervalle können manchmal eine Dauer von null haben, d. h. sie beginnen und enden in derselben Sekunde. Häufig haben sie jedoch eine positive Dauer.

Invarianten:

  • Bei n Besuchen gibt es n + 1 Übergänge.
  • Ein Besuch wird immer von einer vorherigen (gleicher Index) und einer nachfolgenden (Index + 1) Transition umgeben.
  • Auf den Fahrzeugstart folgt immer der Übergang 0.
  • Dem Ende des Fahrzeugs geht immer die Übergabe #n voraus.

Hier ist ein genauerer Blick auf die Unterschiede zwischen Transition und 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

Und hier ist noch eine kurze Zusammenfassung, wie sich TRAVEL, BREAKS, DELAY und WAIT während eines Übergangs anordnen lassen.

  • Sie überschneiden sich nicht.
  • DELAY ist eindeutig und muss ein zusammenhängender Zeitraum direkt vor dem nächsten Besuch (oder dem Ende des Fahrzeugs) sein. Daher reicht es aus, die Verzögerungsdauer zu kennen, um den Beginn und das Ende zu ermitteln.
  • Die BREAKS sind zusammenhängende, nicht überlappende Zeiträume. Die Antwort gibt den Beginn und die Dauer jeder Pause an.
  • TRAVEL und WAIT sind „vorhersagbar“: Sie können während dieser Übergänge mehrmals unterbrochen werden. Kunden können davon ausgehen, dass die Fahrt „so bald wie möglich“ erfolgt und dass die verbleibende Zeit mit „warten“ gefüllt wird.

Ein (komplexes) Beispiel:

                               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-Darstellung
{
  "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)
  },
  "vehicleFullness": {
    object (VehicleFullness)
  },
  "routeCosts": {
    string: number,
    ...
  },
  "routeTotalCost": number
}
Felder
vehicleIndex

integer

Fahrzeug, das die Route ausführt, identifiziert durch seinen Index in der Quelle ShipmentModel.

vehicleLabel

string

Label des Fahrzeugs, das diese Route fährt. Entspricht ShipmentModel.vehicles(vehicleIndex).label, falls angegeben.

vehicleStartTime

string (Timestamp format)

Die Uhrzeit, zu der das Fahrzeug seine Route beginnt.

Es wird RFC 3339 verwendet, wobei die generierte Ausgabe immer Z-normalisiert ist und 0, 3, 6 oder 9 Glieder mit Dezimalstellen enthält. Andere Achsenbezeichnungen als „Z“ sind ebenfalls zulässig. Beispiele: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" oder "2014-10-02T15:01:23+05:30".

vehicleEndTime

string (Timestamp format)

Die Uhrzeit, zu der das Fahrzeug seine Route beendet.

Es wird RFC 3339 verwendet, wobei die generierte Ausgabe immer Z-normalisiert ist und 0, 3, 6 oder 9 Glieder mit Dezimalstellen enthält. Andere Achsenbezeichnungen als „Z“ sind ebenfalls zulässig. Beispiele: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" oder "2014-10-02T15:01:23+05:30".

visits[]

object (Visit)

Eine geordnete Folge von Besuchen, die eine Route darstellen. „visits[i]“ ist der i-te Besuch in der Route. Wenn dieses Feld leer ist, wird das Fahrzeug als nicht genutzt betrachtet.

transitions[]

object (Transition)

Sortierte Liste der Übergänge für die Route.

hasTrafficInfeasibilities

boolean

Wenn OptimizeToursRequest.consider_road_traffic auf „wahr“ gesetzt ist, gibt dieses Feld an, dass Inkonsistenzen bei den Routenzeiten anhand von verkehrsbasierten Schätzungen der Fahrtdauer vorhergesagt werden. Es kann nicht genügend Zeit für die verkehrsbedingten Fahrten, Verzögerungen und Pausen zwischen den Besuchen vor dem ersten Besuch oder nach dem letzten Besuch bleiben, um die Zeitfenster für Besuche und Fahrzeuge einzuhalten. Beispiel:

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

Die Ankunft bei next_visit erfolgt aufgrund der erhöhten geschätzten Fahrtzeit von travelDuration(previous_visit, next_visit) aufgrund von Staus wahrscheinlich später als im aktuellen Zeitfenster. Außerdem kann es vorkommen, dass sich eine Pause aufgrund einer längeren geschätzten Fahrtzeit und Einschränkungen bei Besuchs- oder Pausenzeiträumen mit einem Besuch überschneidet.

routePolyline

object (EncodedPolyline)

Die codierte Polyliniendarstellung der Route. Dieses Feld wird nur ausgefüllt, wenn OptimizeToursRequest.populate_polylines auf „wahr“ gesetzt ist.

breaks[]

object (Break)

Für das Fahrzeug, das diese Route fährt, geplante Pausen. Die Sequenz breaks steht für Zeitintervalle, die jeweils bei der entsprechenden startTime beginnen und duration Sekunden dauern.

metrics

object (AggregatedMetrics)

Dauer, Entfernung und Auslastungsmesswerte für diese Route. Die Felder von AggregatedMetrics werden je nach Kontext über alle ShipmentRoute.transitions oder ShipmentRoute.visits summiert.

vehicleFullness

object (VehicleFullness)

Feld VehicleFullness zum Berechnen, wie nah die begrenzten Messwerte an ihren jeweiligen Fahrzeuglimits liegen. Die Felder sind Verhältnisse zwischen einem begrenzten Messwertfeld (z.B. AggregatedMetrics.travel_distance_meters) und dem zugehörigen Fahrzeuglimit (z.B. Vehicle.route_distance_limit).

Experimentell: Das Verhalten oder Vorhandensein dieses Felds kann sich in Zukunft ändern.

routeCosts

map (key: string, value: number)

Kosten der Route, aufgeschlüsselt nach kostenbezogenen Anfragefeldern. Die Schlüssel sind Proto-Pfade, bezogen auf die Eingabe OptimizeToursRequest, z. B. „model.shipments.pickups.cost“. Die Werte sind die Gesamtkosten, die durch das entsprechende Kostenfeld generiert wurden, aggregiert über die gesamte Route. Mit anderen Worten: „costs["model.shipments.pickups.cost"]“ ist die Summe aller Abholkosten auf der Route. Alle im Modell definierten Kosten werden hier ausführlich aufgeführt, mit Ausnahme der Kosten im Zusammenhang mit TransitionAttributes, die seit Januar 2022 nur noch zusammengefasst erfasst werden.

routeTotalCost

number

Gesamtkosten der Route. Die Summe aller Kosten in der Kostenübersicht.

Aufrufen

Ein Besuch während einer Route. Dieser Besuch entspricht der Abholung oder Lieferung eines Shipment.

JSON-Darstellung
{
  "shipmentIndex": integer,
  "isPickup": boolean,
  "visitRequestIndex": integer,
  "startTime": string,
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "detour": string,
  "shipmentLabel": string,
  "visitLabel": string,
  "injectedSolutionLocationToken": integer
}
Felder
shipmentIndex

integer

Index des Felds shipments in der Quelle ShipmentModel.

isPickup

boolean

Wenn „wahr“ ist, entspricht der Besuch der Abholung eines Shipment. Andernfalls entspricht er einer Zustellung.

visitRequestIndex

integer

Index von VisitRequest im Feld „Abholung“ oder „Lieferung“ der Shipment (siehe isPickup).

startTime

string (Timestamp format)

Die Uhrzeit, zu der der Besuch beginnt. Das Fahrzeug kann jedoch früher am Zielort eintreffen. Die Zeiten stimmen mit den ShipmentModel überein.

Es wird RFC 3339 verwendet, wobei die generierte Ausgabe immer Z-normalisiert ist und 0, 3, 6 oder 9 Glieder mit Dezimalstellen enthält. Andere Achsenbezeichnungen als „Z“ sind ebenfalls zulässig. Beispiele: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" oder "2014-10-02T15:01:23+05:30".

loadDemands

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

Gesamte Nachfrage nach Besuchslast als Summe aus Sendung und Besuchsanfrage loadDemands. Die Werte sind negativ, wenn es sich bei dem Besuch um eine Auslieferung handelt. Die Nachfrage wird für dieselben Typen wie Transition.loads erfasst (siehe dieses Feld).

detour

string (Duration format)

Zusätzliche Umwegzeit aufgrund der Sendungen, die vor dem Besuch auf der Route besucht wurden, und der potenziellen Wartezeit aufgrund von Zeitfenstern. Wenn es sich bei dem Besuch um eine Lieferung handelt, wird der Umweg vom entsprechenden Abholbesuch berechnet und entspricht:

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

Andernfalls wird er aus dem Fahrzeug startLocation berechnet und entspricht:

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

Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit "s". Beispiel: "3.5s".

shipmentLabel

string

Kopie der entsprechenden Shipment.label, sofern in der Shipment angegeben.

visitLabel

string

Kopie der entsprechenden VisitRequest.label, sofern in der VisitRequest angegeben.

injectedSolutionLocationToken

integer

Ein undurchsichtiges Token, das Informationen zu einem besuchten Standort darstellt.

Dieses Feld kann in den Besuchen der Ergebnispfade ausgefüllt werden, wenn VisitRequest.avoid_u_turns für diesen Besuch auf „wahr“ gesetzt wurde oder ShipmentModel.avoid_u_turns in der Anfrage OptimizeToursRequest auf „wahr“ gesetzt wurde.

Experimentell: Weitere Informationen finden Sie unter https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request.

Übergang

Übergang zwischen zwei Ereignissen auf der Route. Siehe Beschreibung von ShipmentRoute.

Wenn das Fahrzeug keine startLocation und/oder endLocation hat, sind die entsprechenden Fahrtmesswerte 0.

JSON-Darstellung
{
  "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)
    },
    ...
  }
}
Felder
travelDuration

string (Duration format)

Reisedauer während dieser Umstellung.

Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit "s". Beispiel: "3.5s".

travelDistanceMeters

number

Die während der Umstellung zurückgelegte Strecke.

trafficInfoUnavailable

boolean

Wenn Traffic über OptimizeToursRequest.consider_road_traffic angefordert wird und die Traffic-Informationen für eine Transition nicht abgerufen werden konnten, wird dieser boolesche Wert auf „wahr“ gesetzt. Dies kann vorübergehend (seltener Aussetzer bei den Echtzeit-Verkehrsservern) oder dauerhaft (keine Daten für diesen Standort) sein.

delayDuration

string (Duration format)

Summe der Verzögerungsdauern, die auf diesen Übergang angewendet werden. Falls vorhanden, beginnt die Verzögerung genau delayDuration Sekunden vor dem nächsten Ereignis (Besuch oder Fahrzeugende). TransitionAttributes.delay ansehen.

Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit "s". Beispiel: "3.5s".

breakDuration

string (Duration format)

Summe der Dauer der Pausen, die während dieses Übergangs auftreten, falls vorhanden. Details zum Beginn und zur Dauer jeder Pause werden in ShipmentRoute.breaks gespeichert.

Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit "s". Beispiel: "3.5s".

waitDuration

string (Duration format)

Die Wartezeit während dieser Umstellung. Die Wartedauer entspricht der Inaktivitätsdauer und schließt keine Pausen ein. Beachten Sie außerdem, dass diese Wartezeit in mehrere nicht zusammenhängende Intervalle unterteilt werden kann.

Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit "s". Beispiel: "3.5s".

totalDuration

string (Duration format)

Die Gesamtdauer der Umstellung, nur zur Information. Sie entspricht:

  • Nächster Besuch startTime (oder vehicleEndTime, wenn dies der letzte Übergang ist) – startTime für diesen Übergang;
  • Wenn ShipmentRoute.has_traffic_infeasibilities falsch ist, gilt zusätzlich Folgendes: `totalDuration = travelDuration + delayDuration
  • breakDuration + waitDuration`.

Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit "s". Beispiel: "3.5s".

startTime

string (Timestamp format)

Startzeit dieses Übergangs.

Es wird RFC 3339 verwendet, wobei die generierte Ausgabe immer Z-normalisiert ist und 0, 3, 6 oder 9 Glieder mit Dezimalstellen enthält. Andere Achsenbezeichnungen als „Z“ sind ebenfalls zulässig. Beispiele: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" oder "2014-10-02T15:01:23+05:30".

routePolyline

object (EncodedPolyline)

Die codierte Polyliniendarstellung der Route, der während des Übergangs gefolgt wurde. Dieses Feld wird nur ausgefüllt, wenn populateTransitionPolylines auf „wahr“ gesetzt ist.

routeToken

string

Nur Ausgabe. Ein undurchsichtiges Token, das an das Navigation SDK übergeben werden kann, um die Route während der Navigation neu zu erstellen und bei einer Umleitung die ursprüngliche Absicht beim Erstellen der Route zu berücksichtigen. Dieses Token als intransparenten Blob behandeln Vergleichen Sie den Wert nicht zwischen Anfragen, da er sich auch dann ändern kann, wenn der Dienst genau dieselbe Route zurückgibt. Dieses Feld wird nur ausgefüllt, wenn populateTransitionPolylines auf „wahr“ gesetzt ist.

vehicleLoads

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

Fahrzeuglasten während dieser Umstellung für jeden Typ, der entweder in der Vehicle.load_limits dieses Fahrzeugs aufgeführt ist oder für den bei einer Lieferung auf dieser Route ein Wert ungleich 0 für Shipment.load_demands angegeben ist.

Die Lasten während der ersten Umstellung sind die Anfangslasten der Fahrzeugroute. Nach jedem Besuch wird die loadDemands des Besuchs entweder addiert oder subtrahiert, um die Lasten der nächsten Übergänge zu erhalten, je nachdem, ob es sich um einen Abhol- oder einen Liefertermin handelt.

EncodedPolyline

Die codierte Darstellung einer Polylinie. Weitere Informationen zur Polyliniencodierung finden Sie hier: https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding.

JSON-Darstellung
{
  "points": string
}
Felder
points

string

String, der codierte Punkte der Polylinie darstellt.

Pause

Daten, die die Ausführung einer Pause darstellen.

JSON-Darstellung
{
  "startTime": string,
  "duration": string
}
Felder
startTime

string (Timestamp format)

Beginn einer Pause.

Es wird RFC 3339 verwendet, wobei die generierte Ausgabe immer Z-normalisiert ist und 0, 3, 6 oder 9 Glieder mit Dezimalstellen enthält. Andere Achsenbezeichnungen als „Z“ sind ebenfalls zulässig. Beispiele: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" oder "2014-10-02T15:01:23+05:30".

duration

string (Duration format)

Dauer einer Pause.

Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit "s". Beispiel: "3.5s".

VehicleFullness

VehicleFullness ist ein Messwert, der angibt, wie voll ein Fahrzeug ist. Jedes VehicleFullness-Feld hat einen Wert zwischen 0 und 1 und wird als Verhältnis zwischen einem begrenzten Messwertfeld (z.B. AggregatedMetrics.travel_distance_meters) und dem zugehörigen Fahrzeuglimit (z.B. Vehicle.route_distance_limit) berechnet, sofern vorhanden. Andernfalls bleibt das Füllungsverhältnis deaktiviert. Wenn das Limit 0 ist, wird das Feld auf 1 gesetzt. Hinweis: Wenn eine Route aufgrund von Verkehrsbehinderungen nicht realisierbar ist, kann das Verhältnis der Bruttoauslastung 1,0 überschreiten, z. B. wenn das Fahrzeug sein Entfernungslimit überschreitet. In diesen Fällen wird der Wert für die Fülle auf 1, 0 begrenzt.

JSON-Darstellung
{
  "maxFullness": number,
  "distance": number,
  "travelDuration": number,
  "activeDuration": number,
  "maxLoad": number,
  "activeSpan": number
}
Felder
maxFullness

number

Das Maximum aller anderen Felder in dieser Nachricht.

distance

number

Das Verhältnis zwischen AggregatedMetrics.travel_distance_meters und Vehicle.route_distance_limit. Wenn Vehicle.route_distance_limit nicht festgelegt ist, wird auch dieses Feld nicht festgelegt.

travelDuration

number

Das Verhältnis zwischen [AggregatedMetrics.travel_duration_seconds][] und Vehicle.travel_duration_limit. Wenn Vehicle.travel_duration_limit nicht festgelegt ist, wird auch dieses Feld nicht festgelegt.

activeDuration

number

Das Verhältnis zwischen [AggregatedMetrics.total_duration_seconds][] und Vehicle.route_duration_limit. Wenn Vehicle.route_duration_limit nicht festgelegt ist, wird auch dieses Feld nicht festgelegt.

maxLoad

number

Das maximale Verhältnis zwischen allen Typen von [AggregatedMetrics.max_load][] und ihren jeweiligen Vehicle.load_limits. Wenn alle Vehicle.load_limits-Felder nicht festgelegt sind, wird auch dieses Feld nicht festgelegt.

activeSpan

number

Das Verhältnis (vehicleEndTime – vehicleStartTime) ÷ (latestVehicleEndTime – earliestVehicleStartTime) für ein bestimmtes Fahrzeug. Wenn der Nenner nicht vorhanden ist, wird stattdessen (ShipmentModel.global_end_time – ShipmentModel.global_start_time) verwendet.