Die Route eines Fahrzeugs kann entlang der Zeitachse so zerlegt werden (wir gehen von n Besuchen aus):
| | | | | 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
Wir unterscheiden zwischen:
- „Pünktliche Ereignisse“ wie Start und Ende des Fahrzeugs sowie Start und Ende jedes Besuchs (Ankunft und Abfahrt). Sie treten zu einem bestimmten Zeitpunkt auf.
- „Zeitintervalle“ wie die Besuche selbst und der Übergang zwischen Besuchen. Zeitintervalle können manchmal eine Dauer von null haben, d. h. sie beginnen und enden in derselben Sekunde. Oft haben sie jedoch eine positive Dauer.
Invarianten:
- Bei n Besuchen gibt es n+1 Übergänge.
- Ein Besuch ist immer von einem Übergang davor (derselbe Index) und einem Übergang danach (Index + 1) umgeben.
- Auf den Fahrzeugstart folgt immer Übergang 0.
- Dem Fahrzeugende geht immer der Übergang #n voraus.
Hier sehen Sie, was bei einer Transition und einer Visit passiert:
---+-------------------------------------+-----------------------------+-->
| 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
So können TRAVEL, BREAKS, DELAY und WAIT während eines Übergangs angeordnet werden.
- Sie überschneiden sich nicht.
- Die DELAY ist eindeutig und muss ein zusammenhängender Zeitraum unmittelbar vor dem nächsten Besuch (oder dem Ende des Fahrzeugs) sein. Daher reicht es aus, die Verzögerungsdauer zu kennen, um die Start- und Endzeit zu ermitteln.
- Die PAUSEN sind zusammenhängende, sich nicht überschneidende Zeiträume. In der Antwort werden die Startzeit und die Dauer jeder Pause angegeben.
- TRAVEL und WAIT sind „unterbrechbar“: Sie können während dieses Übergangs mehrmals unterbrochen werden. Clients können davon ausgehen, dass die Reise „so schnell wie möglich“ stattfindet und dass die verbleibende Zeit mit „Warten“ ausgefü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 | |
|---|---|
vehicleIndex |
Das Fahrzeug, das die Route fährt, identifiziert durch seinen Index in der Quell- |
vehicleLabel |
Label des Fahrzeugs, das diese Route fährt. Entspricht |
vehicleStartTime |
Uhrzeit, zu der das Fahrzeug seine Route beginnt. Verwendet RFC 3339, wobei die generierte Ausgabe immer Z-normalisiert ist und 0, 3, 6 oder 9 Nachkommastellen verwendet. Andere Offsets als „Z“ werden ebenfalls akzeptiert. Beispiele: |
vehicleEndTime |
Uhrzeit, zu der das Fahrzeug seine Route beendet. Verwendet RFC 3339, wobei die generierte Ausgabe immer Z-normalisiert ist und 0, 3, 6 oder 9 Nachkommastellen verwendet. Andere Offsets als „Z“ werden ebenfalls akzeptiert. Beispiele: |
visits[] |
Geordnete Reihenfolge von Besuchen, die eine Route darstellen. „visits[i]“ ist der i-te Besuch auf der Route. Wenn dieses Feld leer ist, gilt das Fahrzeug als nicht verwendet. |
transitions[] |
Geordnete Liste der Übergänge für die Route. |
hasTrafficInfeasibilities |
Wenn Die Ankunft am Zielort wird aufgrund der erhöhten geschätzten Reisezeit von |
routePolyline |
Die codierte Polylinien-Darstellung der Route. Dieses Feld wird nur ausgefüllt, wenn |
breaks[] |
Pausen, die für das Fahrzeug auf dieser Route geplant sind. Die |
metrics |
Messwerte für Dauer, Distanz und Belastung für diese Route. Die Felder von |
vehicleFullness |
Testphase: Das Verhalten oder die Existenz dieses Felds kann sich in Zukunft ändern. |
routeCosts |
Kosten der Route, aufgeschlüsselt nach kostenbezogenen Anfragefeldern. Die Schlüssel sind Protopfade relativ zum Eingabe-OptimizeToursRequest, z. B. „model.shipments.pickups.cost“. Die Werte sind die Gesamtkosten, die durch das entsprechende Kostenfeld generiert werden, aggregiert über die gesamte Route. Mit anderen Worten: costs["model.shipments.pickups.cost"] ist die Summe aller Abholkosten für die Route. Alle im Modell definierten Kosten werden hier detailliert aufgeführt. Ausgenommen sind Kosten im Zusammenhang mit TransitionAttributes, die seit Januar 2022 nur noch zusammengefasst angegeben werden. |
routeTotalCost |
Gesamtkosten der Route. Die Summe aller Kosten in der Kostenübersicht. |
Aufrufen
Ein Besuch, der während einer Route durchgeführt wird. Dieser Besuch entspricht einer Abholung oder Lieferung eines Shipment.
| JSON-Darstellung |
|---|
{
"shipmentIndex": integer,
"isPickup": boolean,
"visitRequestIndex": integer,
"startTime": string,
"loadDemands": {
string: {
object ( |
| Felder | |
|---|---|
shipmentIndex |
Index des Felds |
isPickup |
Wenn „true“, entspricht der Besuch der Abholung eines |
visitRequestIndex |
Index von |
startTime |
Uhrzeit, zu der der Besuch beginnt. Das Fahrzeug kann jedoch auch früher am Zielort eintreffen. Die Zeiten stimmen mit der Verwendet RFC 3339, wobei die generierte Ausgabe immer Z-normalisiert ist und 0, 3, 6 oder 9 Nachkommastellen verwendet. Andere Offsets als „Z“ werden ebenfalls akzeptiert. Beispiele: |
loadDemands |
Die Gesamtnachfrage nach Besuchen als Summe der Versand- und der Besuchsanträge |
detour |
Zusätzliche Umwegzeit aufgrund der Lieferungen, die auf der Route vor dem Besuch angefahren werden, und der potenziellen Wartezeit, die durch Zeitfenster entsteht. Wenn der Besuch eine Lieferung ist, wird der Umweg vom entsprechenden Abholbesuch aus berechnet und entspricht: Andernfalls wird sie aus dem Fahrzeug Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit " |
shipmentLabel |
Kopie der entsprechenden |
visitLabel |
Kopie der entsprechenden |
injectedSolutionLocationToken |
Ein intransparentes Token, das Informationen zu einem besuchten Ort enthält. Dieses Feld kann in den Besuchen der Ergebnisrouten ausgefüllt werden, wenn 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 Fahrtenmesswerte 0.
| JSON-Darstellung |
|---|
{ "travelDuration": string, "travelDistanceMeters": number, "trafficInfoUnavailable": boolean, "delayDuration": string, "breakDuration": string, "waitDuration": string, "totalDuration": string, "startTime": string, "routePolyline": { object ( |
| Felder | |
|---|---|
travelDuration |
Reisedauer während dieser Übergangszeit. Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit " |
travelDistanceMeters |
Zurückgelegte Strecke während des Übergangs. |
trafficInfoUnavailable |
Wenn Traffic über |
delayDuration |
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 " |
breakDuration |
Summe der Dauer der Pausen, die während dieses Übergangs aufgetreten sind (falls vorhanden). Details zur Startzeit und Dauer der einzelnen Pausen werden in Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit " |
waitDuration |
Die Wartezeit während dieser Umstellung. Die Wartezeit entspricht der Leerlaufzeit und umfasst keine Pausenzeit. Beachten Sie außerdem, dass diese Wartezeit in mehrere nicht zusammenhängende Intervalle unterteilt sein kann. Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit " |
totalDuration |
Gesamtdauer der Umstellung (zur Übersicht). Das entspricht:
Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit " |
startTime |
Startzeit dieses Übergangs. Verwendet RFC 3339, wobei die generierte Ausgabe immer Z-normalisiert ist und 0, 3, 6 oder 9 Nachkommastellen verwendet. Andere Offsets als „Z“ werden ebenfalls akzeptiert. Beispiele: |
routePolyline |
Die codierte Polylinien-Darstellung der Route, die während der Übergangsphase gefahren wurde. Dieses Feld wird nur ausgefüllt, wenn |
routeToken |
Nur Ausgabe. Ein vertrauliches Token, das an das Navigation SDK übergeben werden kann, um die Route während der Navigation zu rekonstruieren und bei einer Umleitung die ursprüngliche Absicht beim Erstellen der Route zu berücksichtigen. Behandeln Sie dieses Token als intransparenten Blob. Vergleichen Sie den Wert nicht über Anfragen hinweg, da er sich ändern kann, auch wenn der Dienst genau dieselbe Route zurückgibt. Dieses Feld wird nur ausgefüllt, wenn |
vehicleLoads |
Fahrzeugladungen während dieser Umstellung für jeden Typ, der entweder in der Die Ladungen während des ersten Übergangs sind die Startladungen der Fahrzeugroute. Nach jedem Besuch werden die |
EncodedPolyline
Die codierte Darstellung einer Polylinie. Weitere Informationen zur Polyline-Codierung finden Sie hier: https://developers.google.com/maps/documentation/utilities/polylinealgorithm und https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding.
| JSON-Darstellung |
|---|
{ "points": string } |
| Felder | |
|---|---|
points |
String, der die codierten Punkte der Polylinie darstellt. |
Pause
Daten, die die Ausführung einer Pause darstellen.
| JSON-Darstellung |
|---|
{ "startTime": string, "duration": string } |
| Felder | |
|---|---|
startTime |
Startzeit einer Pause. Verwendet RFC 3339, wobei die generierte Ausgabe immer Z-normalisiert ist und 0, 3, 6 oder 9 Nachkommastellen verwendet. Andere Offsets als „Z“ werden ebenfalls akzeptiert. Beispiele: |
duration |
Dauer einer Pause. Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit " |
VehicleFullness
VehicleFullness ist ein Messwert, der angibt, wie voll ein Fahrzeug ist. Jeder VehicleFullness-Wert liegt zwischen 0 und 1 und wird als Verhältnis zwischen einem Messwertfeld mit Obergrenze (z.B. AggregatedMetrics.travel_distance_meters) und dem zugehörigen Fahrzeuglimit (z.B. Vehicle.route_distance_limit) berechnet, sofern es vorhanden ist. Andernfalls bleibt das Füllverhältnis nicht festgelegt. Wenn das Limit 0 ist, wird das Feld auf 1 gesetzt. Hinweis: Wenn eine Route aufgrund von Verkehrsbedingungen nicht durchführbar ist, können einige Rohwerte für das Füllverhältnis 1,0 überschreiten, z. B. wenn das Fahrzeug das Distanzlimit überschreitet. In diesen Fällen begrenzen wir die Füllwerte auf 1, 0.
| JSON-Darstellung |
|---|
{ "maxFullness": number, "distance": number, "travelDuration": number, "activeDuration": number, "maxLoad": number, "activeSpan": number } |
| Felder | |
|---|---|
maxFullness |
Maximum aller anderen Felder in dieser Nachricht. |
distance |
Das Verhältnis zwischen |
travelDuration |
Das Verhältnis zwischen [AggregatedMetrics.travel_duration_seconds][] und |
activeDuration |
Das Verhältnis zwischen [AggregatedMetrics.total_duration_seconds][] und |
maxLoad |
Das maximale Verhältnis zwischen allen Arten von [AggregatedMetrics.max_load][] und den entsprechenden |
activeSpan |
Das Verhältnis (vehicleEndTime – vehicleStartTime) / (latestVehicleEndTime – earliestVehicleStartTime) für ein bestimmtes Fahrzeug. Wenn der Nenner nicht vorhanden ist, wird stattdessen ( |