Trasę pojazdu można rozłożyć na osi czasu w ten sposób (zakładamy, że jest n wizytacji):
| | | | | 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
Pamiętaj, że:
- „dokładne zdarzenia”, takie jak początek i koniec jazdy oraz początek i koniec każdej wizyty (czyli przyjazd i wyjazd). Mają miejsce w danej sekundzie.
- „przedziały czasowe”, np. same wizyty i przejście między wizytami; Chociaż czasy trwania mogą mieć czas trwania równy 0, czyli zaczynają się i kończą w tej samej sekundzie, często mają dodatni czas trwania.
Niezmienniki:
- Jeśli jest n wizyt, to jest n + 1 przejście.
- Wizyta jest zawsze otoczona przez przejście poprzedzające ją (ten sam indeks) i przejście następujące po niej (indeks + 1).
- Po uruchomieniu pojazdu zawsze następuje przejście 0.
- Koniec pojazdu jest zawsze poprzedzony przez przejście #n.
Oto, co dzieje się podczas Transition
i 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
Na koniec opisujemy, jak można ustawić elementy TRAVEL, BREAKS, DELAY i WAIT podczas przejścia.
- Nie nakładają się na siebie.
- OPÓŹNIENIE jest unikalne i musi być ciągłym okresem czasu bezpośrednio przed następną wizytą (lub końcem okresu użytkowania pojazdu). Wystarczy więc znać czas opóźnienia, aby określić czas jego rozpoczęcia i zakończenia.
- PRZERWY to ciągłe, niepokrywające się okresy czasu. Odpowiedź zawiera czas rozpoczęcia i czas trwania każdej przerwy.
- TRAVEL i WAIT są „wyłączalne”: mogą być przerywane kilka razy podczas tego przejścia. Klienci mogą założyć, że podróż odbywa się „jak najszybciej”, a pozostały czas jest wypełniony przez „czekanie”.
Przykład (skomplikowany):
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 | | | | ||
|| | | | | | | ||
--++-----------------------------------------------------------------++-->
Zapis JSON |
---|
{ "vehicleIndex": integer, "vehicleLabel": string, "vehicleStartTime": string, "vehicleEndTime": string, "visits": [ { object ( |
Pola | |
---|---|
vehicleIndex |
Pojazd wykonujący trasę, zidentyfikowany przez swój indeks w źródle |
vehicleLabel |
Etykieta pojazdu wykonującego tę trasę, równa |
vehicleStartTime |
Czas rozpoczęcia przez pojazd trasy. Używa standardu RFC 3339, w którym wygenerowany wynik jest zawsze znormalizowany według normy Z i zawiera 0, 3, 6 lub 9 cyfr ułamkowych. Dopuszczalne są też przesunięcia inne niż „Z”. Przykłady: |
vehicleEndTime |
Czas, w którym pojazd kończy trasę. Używa standardu RFC 3339, w którym wygenerowany wynik jest zawsze znormalizowany według normy Z i zawiera 0, 3, 6 lub 9 cyfr ułamkowych. Dopuszczalne są też przesunięcia inne niż „Z”. Przykłady: |
visits[] |
Uporządkowana sekwencja wizyt reprezentująca trasę. visits[i] to i-ta wizyta na trasie. Jeśli to pole jest puste, pojazd jest uważany za nieużywany. |
transitions[] |
Uporządkowana lista przejść na trasie. |
hasTrafficInfeasibilities |
Gdy
Przybycie do next_visit nastąpi prawdopodobnie później niż w obecnym oknie czasowym z powodu wydłużenia szacowanego czasu podróży |
routePolyline |
Zakodowana linia łamana reprezentuje trasę. To pole jest wypełniane tylko wtedy, gdy zasada |
breaks[] |
Przerwy zaplanowane dla pojazdu wykonującego tę trasę. Sekwencja |
metrics |
Dane dotyczące czasu trwania, odległości i obciążenia na tej trasie. Pola |
vehicleFullness |
Eksperymentalne: zachowanie lub istnienie tego pola może się w przyszłości zmienić. |
routeCosts |
Koszt trasy z podziałem na pola żądania związane z kosztami. Klucze to ścieżki proto, odnoszące się do wejścia OptimizeToursRequest, np. „model.shipments.pickups.cost”, a wartości to łączny koszt wygenerowany przez odpowiednie pole kosztu, zsumowany na całej trasie. Innymi słowy, costs["model.shipments.pickups.cost"] to suma wszystkich kosztów odbioru na trasie. Wszystkie koszty zdefiniowane w modelu są tutaj szczegółowo raportowane, z wyjątkiem kosztów związanych z atributem TransitionAttributes, które od 1 stycznia 2022 r. są raportowane tylko w sposób zagregowany. |
routeTotalCost |
Łączny koszt trasy. Suma wszystkich kosztów na mapie kosztów. |
Odwiedź
Wizyta wykonana podczas trasy. Ta wizyta odpowiada odbiorowi lub dostawie Shipment
.
Zapis JSON |
---|
{
"shipmentIndex": integer,
"isPickup": boolean,
"visitRequestIndex": integer,
"startTime": string,
"loadDemands": {
string: {
object ( |
Pola | |
---|---|
shipmentIndex |
Indeks pola |
isPickup |
Jeśli wartość to prawda, wizyta odpowiada odbiorowi |
visitRequestIndex |
Indeks |
startTime |
Czas rozpoczęcia wizyty. Pamiętaj, że pojazd może dotrzeć do miejsca wizyty wcześniej. Czasy są zgodne z Używa standardu RFC 3339, w którym wygenerowany wynik jest zawsze znormalizowany według normy Z i zawiera 0, 3, 6 lub 9 cyfr ułamkowych. Dopuszczalne są też przesunięcia inne niż „Z”. Przykłady: |
loadDemands |
Łączna liczba wizyt, która jest sumą żądania dostawy i żądania wizyty |
detour |
Dodatkowy czas objazdu spowodowany wizytami w miejscach na trasie przed wizytą oraz potencjalny czas oczekiwania spowodowany oknami czasowymi. Jeśli wizyta to dostawa, objazd jest obliczany na podstawie odpowiedniej wizyty odbioru i jest równy:
W przeciwnym razie jest ona obliczana na podstawie pojazdu
Czas w sekundach z maksymalnie 9 miejscami po przecinku, zakończony literą „ |
shipmentLabel |
Kopia odpowiedniego elementu |
visitLabel |
Kopia odpowiedniego elementu |
injectedSolutionLocationToken |
Nieprzezroczysty token zawierający informacje o miejscu wizyty. To pole może być wypełniane w przypadku wizyt na trasach wyników, gdy w przypadku tej wizyty pole Funkcja eksperymentalna: więcej informacji znajdziesz na stronie https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request. |
Przejście
Przejście między 2 zdarzeniami na trasie. Zobacz opis ShipmentRoute
.
Jeśli pojazd nie ma wartości startLocation
ani endLocation
, odpowiednie dane dotyczące podróży mają wartość 0.
Zapis JSON |
---|
{ "travelDuration": string, "travelDistanceMeters": number, "trafficInfoUnavailable": boolean, "delayDuration": string, "breakDuration": string, "waitDuration": string, "totalDuration": string, "startTime": string, "routePolyline": { object ( |
Pola | |
---|---|
travelDuration |
Czas trwania podróży podczas tej zmiany. Czas w sekundach z maksymalnie 9 miejscami po przecinku, zakończony literą „ |
travelDistanceMeters |
Odległość przebyta podczas przejścia. |
trafficInfoUnavailable |
Gdy żądanie ruchu jest wysyłane za pomocą |
delayDuration |
Suma czasów opóźnienia zastosowanych do tego przejścia. Opóźnienie rozpoczyna się dokładnie Czas w sekundach z maksymalnie 9 miejscami po przecinku, zakończony literą „ |
breakDuration |
Suma czasu trwania przerw, które wystąpiły podczas tego przejścia (jeśli wystąpiły). Szczegóły dotyczące czasu rozpoczęcia i długości trwania każdej przerwy są przechowywane w pliku Czas w sekundach z maksymalnie 9 miejscami po przecinku, zakończony literą „ |
waitDuration |
Czas oczekiwania podczas tego przejścia. Czas oczekiwania odpowiada czasowi bezczynności i nie obejmuje przerwy. Pamiętaj też, że czas oczekiwania może być podzielony na kilka nieciągłych przedziałów. Czas w sekundach z maksymalnie 9 miejscami po przecinku, zakończony literą „ |
totalDuration |
Łączny czas trwania przejścia, podany dla wygody. Jest równa:
Czas w sekundach z maksymalnie 9 miejscami po przecinku, zakończony literą „ |
startTime |
Czas rozpoczęcia tego przejścia. Używa standardu RFC 3339, w którym wygenerowany wynik jest zawsze znormalizowany według normy Z i zawiera 0, 3, 6 lub 9 cyfr ułamkowych. Dopuszczalne są też przesunięcia inne niż „Z”. Przykłady: |
routePolyline |
Zakodowana linia łamana reprezentująca trasę przebytą podczas przemieszczania. To pole jest wypełniane tylko wtedy, gdy |
routeToken |
Tylko dane wyjściowe. Nieprzezroczysty token, który można przekazać do Navigation SDK w celu odtworzenia trasy podczas nawigacji. W przypadku zmiany trasy token ten zachowuje pierwotny zamiar podczas tworzenia trasy. Traktuj ten token jako nieprzejrzysty blok danych. Nie porównuj wartości w różnych żądaniach, ponieważ może się ona zmieniać, nawet jeśli usługa zwróci dokładnie tę samą trasę. To pole jest wypełniane tylko wtedy, gdy zasada |
vehicleLoads |
Ładunki pojazdu w trakcie przenoszenia dla każdego typu, który występuje w Obciążenia podczas pierwszego przejścia to obciążenia początkowe trasy pojazdu. Następnie po każdej wizycie wartości |
EncodedPolyline
Zakodowana reprezentacja linii złożonej. Więcej informacji o kodowaniu polilinii znajdziesz tutaj: https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding.
Zapis JSON |
---|
{ "points": string } |
Pola | |
---|---|
points |
Ciąg znaków reprezentujący zakodowane punkty linii łamanej. |
Przerwa
Dane przedstawiające wykonanie przerwy.
Zapis JSON |
---|
{ "startTime": string, "duration": string } |
Pola | |
---|---|
startTime |
Czas rozpoczęcia przerwy. Używa standardu RFC 3339, w którym wygenerowany wynik jest zawsze znormalizowany według normy Z i zawiera 0, 3, 6 lub 9 cyfr ułamkowych. Dopuszczalne są też przesunięcia inne niż „Z”. Przykłady: |
duration |
Czas trwania przerwy. Czas w sekundach z maksymalnie 9 miejscami po przecinku, zakończony literą „ |
VehicleFullness
VehicleFullness
to dane określające, jak pełny jest pojazd. Każde pole VehicleFullness
ma wartość z zakresu 0–1, obliczaną jako stosunek pola ograniczonego (np. AggregatedMetrics.travel_distance_meters
) do powiązanego limitu pojazdu (np. Vehicle.route_distance_limit
), jeśli taki istnieje. W przeciwnym razie stosunek pełności pozostaje nieokreślony. Jeśli limit wynosi 0, pole przyjmuje wartość 1. Uwaga: gdy trasa jest niewykonalna ze względu na warunki drogowe, niektóre współczynniki wskaźnika wypełnienia mogą przekraczać 1, 0. Przykładowo pojazd może przekroczyć limit odległości. W takich przypadkach wartości pełności są ograniczone do 1, 0.
Zapis JSON |
---|
{ "maxFullness": number, "distance": number, "travelDuration": number, "activeDuration": number, "maxLoad": number, "activeSpan": number } |
Pola | |
---|---|
maxFullness |
Maksymalna liczba wszystkich pozostałych pól w wiadomości. |
distance |
Proporcje między |
travelDuration |
Stosunek wartości [AggregatedMetrics.travel_duration_seconds][] do wartości |
activeDuration |
Stosunek wartości [AggregatedMetrics.total_duration_seconds][] do wartości |
maxLoad |
Maksymalny współczynnik wśród wszystkich typów [AggregatedMetrics.max_load][] i ich odpowiednich wartości |
activeSpan |
Współczynnik (vehicleEndTime – vehicleStartTime) / (latestVehicleEndTime – earliestVehicleStartTime) dla danego pojazdu. Jeśli mianownik jest nieobecny, zamiast niego jest używane wyrażenie ( |