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 Beginn 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 während 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 einer Übergangsphase angeordnet werden.
- Sie überschneiden sich nicht.
- Die VERZÖGERUNG ist eindeutig und muss ein zusammenhängender Zeitraum unmittelbar vor dem nächsten Besuch (oder dem Ende der Fahrzeugnutzung) sein. Daher reicht es aus, die Verzögerungsdauer zu kennen, um die Start- und Endzeit zu ermitteln.
- Die PAUSEN sind zusammenhängende, 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 dieser Übergangsphase mehrmals unterbrochen werden. Kunden 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 Folge 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 ungenutzt. |
transitions[] |
Sortierte Liste der Übergänge für die Route. |
hasTrafficInfeasibilities |
Wenn Die Ankunft am Zielort „next_visit“ erfolgt 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 geplant sind, das diese Route fährt. Die |
metrics |
Messwerte für Dauer, Distanz und Belastung für diese Route. Die Felder von |
vehicleFullness |
Experimentell: 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, mit Ausnahme der Kosten für TransitionAttributes, die ab Januar 2022 nur noch aggregiert ausgewiesen 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. Hinweis: Das Fahrzeug kann früher als angegeben am Besuchsort 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 Gesamtlast der Besuche ergibt sich aus der Summe der Versand- und Besuchsanträge |
detour |
Zusätzliche Umwegzeit aufgrund der Lieferungen, die vor dem Besuch auf der Route angefahren werden, und der potenziellen Wartezeit, die durch Zeitfenster verursacht wird. Wenn es sich bei dem Besuch um eine Lieferung handelt, wird der Umweg vom entsprechenden Abholbesuch aus berechnet und entspricht: Andernfalls wird sie aus dem Fahrzeug |
shipmentLabel |
Kopie der entsprechenden |
visitLabel |
Kopie der entsprechenden |
visitType |
Optional. Gibt den Typ des Besuchs an. Überschreibt das Feld |
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. |
VisitType
Gibt an, ob es sich um eine Abholung, eine Lieferung oder einen Besuch bei Stop handelt. Besuche an einem Stopp werden nur verwendet, wenn die multimodale Optimierung aktiviert ist.
| Enums | |
|---|---|
VISIT_TYPE_UNSPECIFIED |
Nicht angegebener Besuchstyp. |
PICKUP_SHIPMENT |
Ein Besuch entspricht einer Abholung. |
DELIVER_SHIPMENT |
Ein Besuch entspricht einer Lieferung. |
Ü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 Umstellung. |
travelDistanceMeters |
Zurückgelegte Strecke während des Übergangs. |
trafficInfoUnavailable |
Wenn der Traffic über |
delayDuration |
Summe der Verzögerungsdauern, die auf diese Umstellung angewendet wurden. Die Verzögerung beginnt genau |
breakDuration |
Summe der Dauer der Pausen, die während dieses Übergangs auftreten (falls vorhanden). Details zur Startzeit und Dauer jeder Pause werden in |
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. |
totalDuration |
Die Gesamtdauer der Umstellung wird zur Vereinfachung angegeben. Das entspricht:
|
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 des Übergangs gefahren wurde. Dieses Feld wird nur ausgefüllt, wenn |
routeToken |
Nur Ausgabe. Ein undurchsichtiges 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 Lasten während des ersten Übergangs sind die Startlasten 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. |
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 die zulässige Entfernung ü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 dem jeweiligen |
activeSpan |
Das Verhältnis (vehicleEndTime – vehicleStartTime) / (latestVehicleEndTime – earliestVehicleStartTime) für ein bestimmtes Fahrzeug. Wenn der Nenner nicht vorhanden ist, wird stattdessen ( |