Trasa pojazdu można podzielić na osi czasu w następujący sposób (zakładamy, że jest n wizyt):
  |            |            |          |       |  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:
- „zdarzenia punktowe”, takie jak początek i koniec podróży pojazdu, a także początek i koniec każdej wizyty (tj. przyjazd i odjazd). Mają miejsce w określonej sekundzie.
 - „przedziały czasu”, takie jak same odwiedziny i przejście między nimi. Chociaż czasami interwały czasowe mogą mieć zerową długość, czyli zaczynają się i kończą w tej samej sekundzie, często mają dodatnią długość.
 
Niezmienniki:
- Jeśli jest n wizyt, to jest n + 1 przejść.
 - 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 przejściem #n.
 
Oto, co się dzieje 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 zobacz, jak można zorganizować podróże, przerwy, opóźnienie i oczekiwania w trakcie przejścia.
- Nie nakładają się.
 - 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 rozpoczęcia i zakończenia.
 - Przerwy to ciągłe, niepokrywające się okresy czasu. Odpowiedź określa czas rozpoczęcia i czas trwania każdej przerwy.
 - TRAVEL (TRAVEL) i WAIT (opóźnienia) są „wywłaszczeniowe” – w tym okresie mogą zostać kilkakrotnie przerwane. Klienci mogą założyć, że podróż odbywa się „jak najszybciej”, a pozostały czas wypełnia „czekanie”.
 
Przykład A (złożony):
                               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 poruszającego się po tej trasie, równa   | 
            
vehicleStartTime | 
              
                 
 Czas rozpoczęcia przez pojazd trasy. Sygnatura czasowa w formacie RFC3339 UTC „Zulu” z rozdzielczością nanosekundy i maksymalnie 9 cyframi po przecinku. Przykłady:   | 
            
vehicleEndTime | 
              
                 
 Czas, w którym pojazd kończy trasę. Sygnatura czasowa w formacie RFC3339 UTC „Zulu” z rozdzielczością nanosekundy i maksymalnie 9 cyframi po przecinku. Przykłady:   | 
            
visits[] | 
              
                 
 Uporządkowana sekwencja wizyt reprezentująca trasę. Wizyty[i] to i-te wizyty na trasie. Jeśli to pole jest puste, pojazd jest uważany za nieużywany.  | 
            
transitions[] | 
              
                 
 Uporządkowana lista przejść na trasie.  | 
            
hasTrafficInfeasibilities | 
              
                 
 Gdy  Przyjazd na stronie next_visit prawdopodobnie nastąpi później niż w bieżącym oknie czasowym ze względu na zwiększony szacowany czas podróży (  | 
            
routePolyline | 
              
                 
 Zakodowana linia łamana reprezentująca trasę. To pole jest wypełniane tylko wtedy, gdy   | 
            
breaks[] | 
              
                 
 Przerwy zaplanowane dla pojazdu na tej trasie. Sekwencja   | 
            
metrics | 
              
                 
 Dane dotyczące czasu trwania, odległości i obciążenia na tej trasie. Pola   | 
            
routeCosts | 
              
                 
 Koszt trasy z podziałem na pola żądania związane z kosztami. Klucze są ścieżkami proto w odniesieniu do danych wejściowych OptimizeToursRequest, np. „model.shipments.pickups.cost”, a ich wartości to łączny koszt wygenerowany przez odpowiednie pole kosztu, zsumowany dla całej trasy. Innymi słowy, costs["model.shipments.pickups.cost"] to suma wszystkich kosztów odbioru na trasie. Wszystkie koszty zdefiniowane w modelu są uwzględnione w szczegółowym raporcie z wyjątkiem kosztów związanych z atrybutami przejścia, które od 2022 roku są raportowane tylko w postaci zbiorczej.  | 
            
routeTotalCost | 
              
                 
 Całkowity koszt danej trasy. Suma wszystkich kosztów na mapie kosztów.  | 
            
Odwiedź
Wizyta wykonana podczas tworzenia 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 pojawić się na miejscu wcześniej. Godziny są zgodne z  Sygnatura czasowa w formacie UTC „Zulu” zdefiniowanym w dokumencie RFC 3339, z dokładnością do nanosekund i maksymalnie 9 miejsc po przecinku. Przykłady:   | 
              
loadDemands | 
                
                   
 Łączne obciążenie związane z wizytami jako suma dostawy i żądania wizyty   | 
              
detour | 
                
                   
 Dodatkowy czas objazdu ze względu na wizyty w miejscach na trasie przed wizytą oraz potencjalny czas oczekiwania spowodowany oknami czasowymi. Jeśli wizyta dotyczy dostawy, zmiana trasy jest obliczana na podstawie odpowiedniej wizyty z odbiorem i ma wartość: W przeciwnym razie jest obliczana na podstawie pojazdu  Czas trwania w sekundach składający się z maksymalnie dziewięciu cyfr po przecinku i kończący się „  | 
              
shipmentLabel | 
                
                   
 Kopia odpowiedniego pola   | 
              
visitLabel | 
                
                   
 Kopia odpowiedniego elementu   | 
              
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 trwania w sekundach składający się z maksymalnie dziewięciu cyfr po przecinku i kończący się „  | 
              
travelDistanceMeters | 
                
                   
 Odległość przebyta podczas przejścia.  | 
              
trafficInfoUnavailable | 
                
                   
 Jeśli żądanie ruchu pochodzi z   | 
              
delayDuration | 
                
                   
 Suma czasów opóźnienia zastosowanych do tego przejścia. Jeśli tak, opóźnienie zaczyna 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ółowe informacje o czasie rozpoczęcia i czasie trwania każdej przerwy są przechowywane w  Czas trwania w sekundach składający się z maksymalnie dziewięciu cyfr po przecinku i kończący się „  | 
              
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 zostać podzielony na kilka nieciągłych przedziałów czasu. Czas w sekundach z maksymalnie 9 miejscami po przecinku, zakończony literą „  | 
              
totalDuration | 
                
                   
 Całkowity czas trwania zmiany podany dla wygody użytkowników. Jest ona równa: 
 Czas w sekundach z maksymalnie 9 miejscami po przecinku, zakończony literą „  | 
              
startTime | 
                
                   
 Godzina rozpoczęcia tego przejścia. Sygnatura czasowa w formacie UTC „Zulu” zdefiniowanym w dokumencie RFC 3339, z dokładnością do nanosekund i maksymalnie 9 miejsc po przecinku. 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 oraz, w przypadku zmiany trasy, zachowania pierwotnego zamiaru 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   | 
              
vehicleLoads | 
                
                   
 Ładunki pojazdu w trakcie tego przejścia dla każdego typu, który pojawia się 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 łańcucha znaków 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 reprezentujące wykonanie przerwy.
| Zapis JSON | 
|---|
{ "startTime": string, "duration": string }  | 
              
| Pola | |
|---|---|
startTime | 
                
                   
 Czas rozpoczęcia przerwy. Sygnatura czasowa w formacie RFC3339 UTC „Zulu” z rozdzielczością nanosekundy i maksymalnie 9 cyframi po przecinku. Przykłady:   | 
              
duration | 
                
                   
 Czas trwania przerwy. Czas w sekundach z maksymalnie 9 miejscami po przecinku, zakończony literą „  |