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 ( |