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) Navigationsaktion umgeben.
- Auf das Starten des Fahrzeugs folgt immer der Übergang 0.
- Dem Ende des Fahrzeugs geht immer die Übergabe #n voraus.
Im Detail passiert bei einer Transition
und einer Visit
Folgendes:
---+-------------------------------------+-----------------------------+-->
| 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 ( |
Felder | |
---|---|
vehicle |
Fahrzeug, das die Route ausführt, identifiziert durch seinen Index in der Quelle |
vehicle |
Label des Fahrzeugs, das diese Route fährt. Entspricht |
vehicle |
Die Uhrzeit, zu der das Fahrzeug seine Route beginnt. Ein Zeitstempel im Format RFC3339 UTC "Zulu" mit einer Auflösung im Nanosekundenbereich und bis zu neun Nachkommastellen. Beispiele: |
vehicle |
Die Uhrzeit, zu der das Fahrzeug seine Route beendet. Ein Zeitstempel im Format RFC3339 UTC "Zulu" mit einer Auflösung im Nanosekundenbereich und bis zu neun Nachkommastellen. Beispiele: |
visits[] |
Eine geordnete Folge von Besuchen, die eine Route darstellen. „visits[i]“ ist der i-te Besuch in der Route. Wenn dieses Feld leer ist, gilt das Fahrzeug als nicht genutzt. |
transitions[] |
Sortierte Liste der Übergänge für die Route. |
has |
Wenn
Die Ankunft bei next_visit erfolgt aufgrund der erhöhten geschätzten Fahrtzeit von |
route |
Die codierte Polyliniendarstellung der Route. Dieses Feld wird nur ausgefüllt, wenn |
breaks[] |
Für das Fahrzeug, das diese Route fährt, geplante Pausen. Die Sequenz |
metrics |
Dauer, Entfernung und Auslastungsmesswerte für diese Route. Die Felder von |
route |
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. |
route |
Gesamtkosten der Route. Die Summe aller Kosten in der Kostenübersicht. |
Aufrufen
Ein Besuch, der während einer Route erfolgt. Dieser Besuch entspricht der Abholung oder Lieferung eines Shipment
.
JSON-Darstellung |
---|
{
"shipmentIndex": integer,
"isPickup": boolean,
"visitRequestIndex": integer,
"startTime": string,
"loadDemands": {
string: {
object ( |
Felder | |
---|---|
shipment |
Index des Felds |
is |
Wenn „wahr“ ist, entspricht der Besuch der Abholung eines |
visit |
Index von |
start |
Beginn des Besuchs. Das Fahrzeug kann jedoch früher am Zielort eintreffen. Die Zeiten stimmen mit den Ein Zeitstempel im Format RFC3339 UTC "Zulu" mit einer Auflösung im Nanosekundenbereich und bis zu neun Nachkommastellen. Beispiele: |
load |
Gesamte Nachfrage nach Besuchslast als Summe aus Sendung und Besuchsanfrage |
detour |
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 folgendem Wert:
Andernfalls wird er anhand des Fahrzeugs
Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit " |
shipment |
Kopie der entsprechenden |
visit |
Kopie der entsprechenden |
Wechsel
Ü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 ( |
Felder | |
---|---|
travel |
Reisedauer während dieser Umstellung. Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit " |
travel |
Zurückgelegte Strecke während der Umstellung. |
traffic |
Wenn Traffic über |
delay |
Summe der Verzögerungsdauern, die auf diesen Übergang angewendet werden. Falls vorhanden, beginnt die Verzögerung genau Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit " |
break |
Summe der Dauer der Pausen, die während dieses Übergangs auftreten, falls vorhanden. Details zum Beginn und zur Dauer jeder Pause werden in Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit " |
wait |
Die Wartezeit während dieser Umstellung. Die Wartezeit 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 " |
total |
Die Gesamtdauer der Umstellung, nur zur Information. Sie entspricht:
Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit " |
start |
Startzeit dieses Übergangs. Ein Zeitstempel im Format RFC3339 UTC "Zulu" mit einer Auflösung im Nanosekundenbereich und bis zu neun Nachkommastellen. Beispiele: |
route |
Die codierte Polyliniendarstellung der Route, der während des Übergangs gefolgt wurde. Dieses Feld wird nur ausgefüllt, wenn |
route |
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 |
vehicle |
Fahrzeuglasten während dieser Umstellung für jeden Typ, der entweder in der Die Lasten während der ersten Umstellung sind die Anfangslasten der Fahrzeugroute. Nach jedem Besuch wird die |
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, der codierte Punkte der Polylinie darstellt. |
Pause
Daten, die die Ausführung einer Pause darstellen.
JSON-Darstellung |
---|
{ "startTime": string, "duration": string } |
Felder | |
---|---|
start |
Beginn einer Pause. Ein Zeitstempel im Format RFC3339 UTC "Zulu" mit einer Auflösung im Nanosekundenbereich und bis zu neun Nachkommastellen. Beispiele: |
duration |
Dauer einer Pause. Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit " |