A rota de um veículo pode ser decomposta, ao longo do eixo do tempo, desta forma (assumimos que há n visitas):
  |            |            |          |       |  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
Observe que fazemos uma diferença entre:
- "eventos pontuais", como início e fim do veículo e o início e o término de cada visita (também conhecido como chegada e partida). Eles acontecem em um determinado segundo.
- "intervalos de tempo", como as próprias visitas e a transição entre as visitas. Embora os intervalos de tempo às vezes tenham duração zero, ou seja, começam e terminam no mesmo segundo, eles geralmente têm uma duração positiva.
Invariantes:
- Se houver n visitas, haverá n+1 transições.
- Uma visita é sempre cercada por uma transição anterior a ela (mesmo índice) e uma transição depois dela (índice + 1).
- A partida do veículo é sempre seguida pela transição #0.
- O fim do veículo é sempre precedido pela transição #n.
Veja o que acontece durante uma Transition e uma 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
Por fim, veja como as VIAGENS, INTERVALOS, ATRASO e ESPERA podem ser organizadas durante uma transição.
- Elas não se sobrepõem.
- O DELAY é único e precisa ser um período contíguo de tempo antes da próxima visita (ou término do veículo). Portanto, basta saber a duração do atraso para saber o início e o fim.
- As INTERVALOS são períodos contíguos e não sobrepostos. A resposta especifica o horário de início e a duração de cada intervalo.
- VIAGEM e ESPERA são "preemptíveis": podem ser interrompidas várias vezes durante essa transição. Os clientes podem supor que a viagem acontece "o mais rápido possível" e que "espera" preenche o tempo restante.
Um exemplo (complexo):
                               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     |       |           |         |         ||
  ||     |       |           |       |           |         |         ||
--++-----------------------------------------------------------------++-->
| Representação JSON | 
|---|
| { "vehicleIndex": integer, "vehicleLabel": string, "vehicleStartTime": string, "vehicleEndTime": string, "visits": [ { object ( | 
| Campos | |
|---|---|
| vehicleIndex | 
 Veículo que executa a rota, identificado pelo índice na origem  | 
| vehicleLabel | 
 Rótulo do veículo que executa essa rota, igual a  | 
| vehicleStartTime | 
 Horário em que o veículo inicia o trajeto. Um carimbo de data/hora no formato RFC3339 UTC "Zulu", com resolução de nanossegundos e até nove dígitos fracionários. Exemplos:  | 
| vehicleEndTime | 
 Horário em que o veículo termina o trajeto. Um carimbo de data/hora no formato RFC3339 UTC "Zulu", com resolução de nanossegundos e até nove dígitos fracionários. Exemplos:  | 
| visits[] | 
 Sequência ordenada de visitas que representam uma rota. visits[i] é a i-ésima visita na rota. Se esse campo estiver vazio, o veículo será considerado como não utilizado. | 
| transitions[] | 
 Lista ordenada de transições para a rota. | 
| hasTrafficInfeasibilities | 
 Quando  A chegada em next_visit provavelmente vai acontecer mais tarde do que a janela de tempo atual devido ao aumento da estimativa de tempo de viagem  | 
| routePolyline | 
 A representação da polilinha codificada do trajeto. Esse campo só será preenchido se  | 
| breaks[] | 
 Intervalos programados para o veículo que executa este trajeto. A sequência  | 
| metrics | 
 Métricas de duração, distância e carga para essa rota. Os campos de  | 
| routeCosts | 
 Custo da rota, detalhado por campos de solicitação relacionados a custos. As chaves são caminhos proto, relativos à entrada OptimizeToursRequests, por exemplo, "model.shipments.pickups.cost", e os valores são o custo total gerado pelo campo de custo correspondente, agregado em toda a rota. Em outras palavras, costs["model.shipments.pickups.cost"] é a soma de todos os custos de retirada no trajeto. Todos os custos definidos no modelo são informados em detalhes aqui, com exceção dos custos relacionados a TransitionAttributes que só foram informados de maneira agregada a partir de 2022/01. Um objeto com uma lista de pares  | 
| routeTotalCost | 
 Custo total do trajeto. A soma de todos os custos no mapa de custos. | 
Acesse
Uma visita realizada durante um trajeto. Essa visita corresponde a uma retirada ou entrega de Shipment.
| Representação JSON | 
|---|
| {
  "shipmentIndex": integer,
  "isPickup": boolean,
  "visitRequestIndex": integer,
  "startTime": string,
  "loadDemands": {
    string: {
      object ( | 
| Campos | |
|---|---|
| shipmentIndex | 
 Índice do campo  | 
| isPickup | 
 Se verdadeiro, a visita corresponde a um embarque de  | 
| visitRequestIndex | 
 Índice de  | 
| startTime | 
 Horário em que a visita começa. O veículo pode chegar antes disso ao local da visita. Os horários são consistentes com o  Um carimbo de data/hora no formato RFC3339 UTC "Zulu", com resolução de nanossegundos e até nove dígitos fracionários. Exemplos:  | 
| loadDemands | 
 Demanda total de carga de visitas como a soma do envio e da solicitação de visita  Um objeto com uma lista de pares  | 
| detour | 
 Tempo extra de desvio devido aos envios visitados na rota antes da visita e ao possível tempo de espera induzido pelas janelas de tempo. Se a visita for uma entrega, o desvio será calculado a partir da visita de retirada correspondente e será igual a: Caso contrário, ele será calculado a partir do veículo  Duração em segundos com até nove dígitos fracionários, terminando em " | 
| shipmentLabel | 
 Cópia do  | 
| visitLabel | 
 Cópia do  | 
| injectedSolutionLocationToken | 
 Um token opaco que representa informações sobre um local de visita. Este campo pode ser preenchido nas visitas dos trajetos dos resultados quando  | 
Transição
Transição entre dois eventos na rota. Consulte a descrição de ShipmentRoute.
Se o veículo não tiver um startLocation e/ou endLocation, as métricas de viagem correspondentes serão 0.
| Representação JSON | 
|---|
| { "travelDuration": string, "travelDistanceMeters": number, "trafficInfoUnavailable": boolean, "delayDuration": string, "breakDuration": string, "waitDuration": string, "totalDuration": string, "startTime": string, "routePolyline": { object ( | 
| Campos | |
|---|---|
| travelDuration | 
 Duração da viagem durante essa transição. Duração em segundos com até nove dígitos fracionários, terminando em " | 
| travelDistanceMeters | 
 Distância percorrida durante a transição. | 
| trafficInfoUnavailable | 
 Quando o tráfego é solicitado por  | 
| delayDuration | 
 Soma das durações de atraso aplicadas a essa transição. Se houver, o atraso começa exatamente  Duração em segundos com até nove dígitos fracionários, terminando em " | 
| breakDuration | 
 Soma da duração das pausas ocorridas durante essa transição, se houver. Os detalhes sobre o horário de início e a duração de cada intervalo são armazenados no  Duração em segundos com até nove dígitos fracionários, terminando em " | 
| waitDuration | 
 Tempo gasto em espera durante a transição. A duração da espera corresponde ao tempo de inatividade e não inclui o tempo de intervalo. Além disso, esse tempo de espera pode ser dividido em vários intervalos não contíguos. Duração em segundos com até nove dígitos fracionários, terminando em " | 
| totalDuration | 
 Duração total da transição, indicada para conveniência. É igual a: 
 Duração em segundos com até nove dígitos fracionários, terminando em " | 
| startTime | 
 Horário de início dessa transição. Um carimbo de data/hora no formato RFC3339 UTC "Zulu", com resolução de nanossegundos e até nove dígitos fracionários. Exemplos:  | 
| routePolyline | 
 A representação de polilinha codificada do trajeto que foi seguida durante a transição. Esse campo só será preenchido se  | 
| vehicleLoads | 
 Cargas de veículos durante essa transição, para cada tipo que aparece na  As cargas durante a primeira transição são as cargas iniciais do trajeto do veículo. Em seguida, após cada visita, os  Um objeto com uma lista de pares  | 
EncodedPolyline
A representação codificada de uma polilinha. Confira mais informações sobre a codificação de polilinha em: https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding.
| Representação JSON | 
|---|
| { "points": string } | 
| Campos | |
|---|---|
| points | 
 String que representa pontos codificados da polilinha. | 
Intervalo
Dados que representam a execução de uma pausa.
| Representação JSON | 
|---|
| { "startTime": string, "duration": string } | 
| Campos | |
|---|---|
| startTime | 
 Início do intervalo. Um carimbo de data/hora no formato RFC3339 UTC "Zulu", com resolução de nanossegundos e até nove dígitos fracionários. Exemplos:  | 
| duration | 
 Duração de uma pausa. Duração em segundos com até nove dígitos fracionários, terminando em " |