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 voran.
Wenn Sie näher heranzoomen, sehen Sie, was bei einem Transition und einem 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 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, 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 Quelle |
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 ungenutzt. |
transitions[] |
Sortierte Liste der Übergänge für die Route. |
hasTrafficInfeasibilities |
Wenn Die Ankunft am nächsten Zielort erfolgt aufgrund der verkehrsbedingten Erhöhung der geschätzten Reisezeit |
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 |
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 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 einer Abholung von |
visitRequestIndex |
Index von |
startTime |
Uhrzeit, zu der der Besuch beginnt. Beachten Sie, dass das Fahrzeug möglicherweise früher als zu diesem Zeitpunkt am Besuchsort eintrifft. 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 Sendungen, die auf der Route vor dem Besuch angefahren werden, und der potenziellen Wartezeit, die durch Zeitfenster entsteht. 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 Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit „ |
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 bei 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 einem Stop handelt. Besuche bei einem Stop 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 Übergangszeit. Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit „ |
travelDistanceMeters |
Zurückgelegte Strecke während des Übergangs. |
trafficInfoUnavailable |
Wenn der 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 |
Wartezeit während dieser Übergangsphase. Die Wartezeit entspricht der Leerlaufzeit und umfasst keine Pausenzeit. Außerdem kann diese Wartezeit in mehrere nicht zusammenhängende Intervalle unterteilt sein. Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit „ |
totalDuration |
Gesamtdauer des Übergangs (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 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 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. Jedes VehicleFullness-Feld liegt zwischen 0 und 1 und wird als Verhältnis zwischen einem gedeckelten Messwertfeld (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üllstandsverhältnis nicht festgelegt. Wenn das Limit 0 ist, wird das Feld auf 1 gesetzt. Hinweis: Wenn eine Route aufgrund von Verkehrsbeeinträchtigungen nicht durchführbar ist, können einige Rohfüllstandsverhältnisse 1,0 überschreiten, z. B. wenn das Fahrzeug sein Distanzlimit überschreitet. In diesen Fällen deckeln wir die Füllstandswerte 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 ( |