車両のルートは、次のように時間軸に沿って分解できます(訪問は n 回であると仮定します)。
  |            |            |          |       |  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
違いに留意してください。
- 車両の開始と終了、各訪問の開始と終了(到着と出発)などの「正確なイベント」。特定の秒に発生します。
 - 「時間間隔」: 訪問自体や訪問間の遷移など。時間間隔の継続時間がゼロ(開始時間と終了時間が同じ秒)になることもありますが、多くの場合、継続時間は正の値になります。
 
不変条件:
- 訪問が n 回ある場合、遷移は n+1 回あります。
 - 訪問は常に、前後のトランジション(インデックス + 1)で囲まれています。
 - 車両の始動には常に遷移 #0 が続きます。
 - 車両の終了には、常に遷移 #n が先行します。
 
詳しく説明すると、Transition と 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
最後に、移行時に移動、中断、遅延、待機を設定する方法を説明します。
- 重複していない。
 - DELAY は一意であり、次の訪問(または車両の終了)の直前の連続した期間である必要があります。したがって、開始時間と終了時間を知るには、遅延時間を知るだけで十分です。
 - BREAKS は、重複しない連続した時間です。レスポンスでは、各休憩の開始時刻と継続時間を指定します。
 - TRAVEL と WAIT は「プリエンプト可能」です。この遷移中に複数回中断できます。クライアントは、出張は「できるだけ早く」行われるものとし、残りの時間は「待つ」によって埋められると想定できます。
 
(複雑な)例:
                               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 表現 | 
|---|
{ "vehicleIndex": integer, "vehicleLabel": string, "vehicleStartTime": string, "vehicleEndTime": string, "visits": [ { object (  | 
            
| フィールド | |
|---|---|
vehicleIndex | 
              
                 
 ルートを運行している車両。ソース   | 
            
vehicleLabel | 
              
                 
 このルートを運行する車両のラベル。指定する場合は   | 
            
vehicleStartTime | 
              
                 
 車両がルートを開始した時刻。 RFC3339 UTC「Zulu」形式のタイムスタンプ。精度はナノ秒まで、小数点以下は最大 9 桁。例:   | 
            
vehicleEndTime | 
              
                 
 車両がルートを終了した時刻。 RFC3339 UTC「Zulu」形式のタイムスタンプ。精度はナノ秒まで、小数点以下は最大 9 桁。例:   | 
            
visits[] | 
              
                 
 経路を表す順序付きの訪問シーケンス。訪問 [i] は経路での i 回目の訪問です。このフィールドが空の場合、車両は未使用と見なされます。  | 
            
transitions[] | 
              
                 
 ルートの遷移の順序付きリスト。  | 
            
hasTrafficInfeasibilities | 
              
                 
 
 交通渋滞により推定所要時間   | 
            
routePolyline | 
              
                 
 エンコードされた経路のポリライン表現。このフィールドは、  | 
            
breaks[] | 
              
                 
 このルートを運行する車両に設定されている休憩。  | 
            
metrics | 
              
                 
 このルートの所要時間、距離、負荷の指標。  | 
            
routeCosts | 
              
                 
 ルートの費用(費用関連のリクエスト フィールド別)。キーは、入力 OptimizeToursRequest に対する proto パス(例: model.shipments.pickups.cost)です。値は、対応する費用フィールドで生成された合計費用で、ルート全体で集計されます。つまり、cost["model.shipments.pickups.cost"] はルート上のすべての受け取り費用の合計となります。モデルで定義されているすべての費用が、ここで詳細にレポートされます。ただし、TransitionAttributes に関連する費用は、2022 年 1 月時点では集計された形でのみレポートされます。 
  | 
            
routeTotalCost | 
              
                 
 ルートの合計費用。コストマップのすべての費用の合計。  | 
            
アクセス
ルート中に行われた訪問。この訪問は、Shipment の集荷または配送に対応します。
| JSON 表現 | 
|---|
{
  "shipmentIndex": integer,
  "isPickup": boolean,
  "visitRequestIndex": integer,
  "startTime": string,
  "loadDemands": {
    string: {
      object ( | 
              
| フィールド | |
|---|---|
shipmentIndex | 
                
                   
 ソース   | 
              
isPickup | 
                
                   
 true の場合、訪問は   | 
              
visitRequestIndex | 
                
                   
 
  | 
              
startTime | 
                
                   
 訪問の開始時刻。車両がこれよりも早く訪問場所に到着する場合があるので注意してください。時刻は  RFC3339 UTC「Zulu」形式のタイムスタンプ。精度はナノ秒まで、小数点以下は最大 9 桁。例:   | 
              
loadDemands | 
                
                   
 来店負荷の総需要。配送と訪問リクエスト  
  | 
              
detour | 
                
                   
 訪問前にルート上で訪問した荷物や時間枠によって生じる可能性のある待ち時間により、余分に迂回される時間。訪問が配達の場合、迂回運転は対応する集荷訪問から計算され、次のようになります。 それ以外の場合は、車両  
  | 
              
shipmentLabel | 
                
                   
 対応する   | 
              
visitLabel | 
                
                   
 対応する   | 
              
injectedSolutionLocationToken | 
                
                   
 訪問地に関する情報を表す不透明トークン。 このフィールドは、この訪問で   | 
              
移行
経路上の 2 つのイベント間の遷移。ShipmentRoute の説明をご覧ください。
車両に startLocation または endLocation がない場合、対応する移動指標は 0 になります。
| JSON 表現 | 
|---|
{ "travelDuration": string, "travelDistanceMeters": number, "trafficInfoUnavailable": boolean, "delayDuration": string, "breakDuration": string, "waitDuration": string, "totalDuration": string, "startTime": string, "routePolyline": { object (  | 
              
| フィールド | |
|---|---|
travelDuration | 
                
                   
 この移行期間中の移動時間。 
  | 
              
travelDistanceMeters | 
                
                   
 移行中に移動した距離。  | 
              
trafficInfoUnavailable | 
                
                   
 
  | 
              
delayDuration | 
                
                   
 この切り替えに適用される遅延時間の合計。設定されている場合は、次のイベント(訪問または車両の終了)のちょうど  
  | 
              
breakDuration | 
                
                   
 この移行中に発生した休憩時間の合計(ある場合)。各休憩の開始時間と所要時間の詳細は  
  | 
              
waitDuration | 
                
                   
 この移行中に待機した時間。待機時間はアイドル時間に対応し、休憩時間は含まれません。また、この待ち時間は連続していない複数の区間に分割される場合があります。 
  | 
              
totalDuration | 
                
                   
 移行の合計時間です(便宜上記載)。これは次と等しい。 
 
  | 
              
startTime | 
                
                   
 この移行の開始時間。 RFC3339 UTC「Zulu」形式のタイムスタンプ。精度はナノ秒まで、小数点以下は最大 9 桁。例:   | 
              
routePolyline | 
                
                   
 遷移中にたどったルートのエンコードされたポリライン表現。このフィールドは、  | 
              
vehicleLoads | 
                
                   
 この移行中の車両の積載量。この車両の  最初の遷移中の負荷は、車両ルートの開始負荷です。次に、各訪問の後に、訪問が集荷か配達かに応じて、訪問の  
  | 
              
EncodedPolyline
エンコードされたポリライン表現。ポリラインのエンコードの詳細については、https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding をご覧ください。
| JSON 表現 | 
|---|
{ "points": string }  | 
              
| フィールド | |
|---|---|
points | 
                
                   
 ポリラインのエンコードされた点を示す文字列。  | 
              
休憩
ブレークの実行を表すデータ。
| JSON 表現 | 
|---|
{ "startTime": string, "duration": string }  | 
              
| フィールド | |
|---|---|
startTime | 
                
                   
 休憩の開始時間。 RFC3339 UTC「Zulu」形式のタイムスタンプ。精度はナノ秒まで、小数点以下は最大 9 桁。例:   | 
              
duration | 
                
                   
 休憩時間。 
  |