車輛路線可沿著時間軸分解,如下所示 (假設有 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
最後,這是在轉場期間安排 TRAVEL、BREAKS、DELAY 和 WAIT 的做法。
- 不會重疊。
- 延遲時間是唯一值,且必須在下次造訪 (或車輛結束) 之前,連續一段時間。因此,只要知道延遲時間長度,就能瞭解其開始和結束時間。
- 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 | 
 車輛開始行駛的時間。 使用 RFC 3339,產生的輸出內容一律會經過 Z 標準化,並使用 0、3、6 或 9 小數位數。系統也接受「Z」以外的偏移值。例如: | 
| vehicleEndTime | 
 車輛完成行駛路線的時間。 使用 RFC 3339,產生的輸出內容一律會經過 Z 標準化,並使用 0、3、6 或 9 小數位數。系統也接受「Z」以外的偏移值。例如: | 
| visits[] | 
 代表路線的排序造訪序列。visits[i] 是路線的第 i 次造訪。如果這個欄位為空白,系統會將車輛視為未使用。 | 
| transitions[] | 
 路徑的轉場效果排序清單。 | 
| hasTrafficInfeasibilities | 
 當  由於交通狀況,預估的到達時間  | 
| routePolyline | 
 路線的編碼折線表示法。只有在  | 
| breaks[] | 
 這條路線的車輛預定休息時間。 | 
| metrics | 
 此路線的時間長度、距離和載入指標。 | 
| vehicleFullness | 
 
 實驗性功能:這個欄位的行為或存在情形可能會在日後變更。 | 
| routeCosts | 
 路線的費用,依費用相關要求欄位細分。鍵是相對於輸入 OptimizeToursRequest 的 proto 路徑,例如「model.shipments.pickups.cost」,而值則是相應費用欄位產生的總費用,並在整個路線上進行匯總。換句話說,costs["model.shipments.pickups.cost"] 是路線上所有提貨費用的總和。這裡會詳細列出模型中定義的所有費用,但自 2022 年 1 月起,TransitionAttributes 相關費用只會以匯總方式呈現。 | 
| routeTotalCost | 
 路線的總費用。費用圖表中所有費用的總和。 | 
前往
在路線中執行的造訪。這項訪客活動對應至 Shipment 的取貨或送達。
| JSON 表示法 | 
|---|
| {
  "shipmentIndex": integer,
  "isPickup": boolean,
  "visitRequestIndex": integer,
  "startTime": string,
  "loadDemands": {
    string: {
      object ( | 
| 欄位 | |
|---|---|
| shipmentIndex | 
 來源  | 
| isPickup | 
 如果為 true,則表示該造訪對應至  | 
| visitRequestIndex | 
 
 | 
| startTime | 
 訪客開始造訪的時間。請注意,車輛可能會提早抵達造訪地點。時間與  使用 RFC 3339,產生的輸出內容一律會經過 Z 標準化,並使用 0、3、6 或 9 小數位數。系統也接受「Z」以外的偏移值。例如: | 
| loadDemands | 
 總訪客負載需求是出貨和訪客要求  | 
| detour | 
 由於在造訪前路線上有其他貨物,因此產生額外的繞路時間,以及因時間窗口而產生的潛在等待時間。如果是送貨行程,系統會從對應的接送行程計算繞路距離,計算方式如下: 否則,系統會根據車輛  以秒為單位的時間長度,最多可有 9 個小數位數,結尾為「 | 
| shipmentLabel | 
 如果  | 
| visitLabel | 
 如果  | 
| injectedSolutionLocationToken | 
 代表造訪地點資訊的不透明權杖。 如果  實驗功能:詳情請參閱 https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request。 | 
轉移
在路徑上,兩個事件之間的轉換。請參閱 ShipmentRoute 的說明。
如果車輛沒有 startLocation 和/或 endLocation,則對應的移動指標為 0。
| JSON 表示法 | 
|---|
| { "travelDuration": string, "travelDistanceMeters": number, "trafficInfoUnavailable": boolean, "delayDuration": string, "breakDuration": string, "waitDuration": string, "totalDuration": string, "startTime": string, "routePolyline": { object ( | 
| 欄位 | |
|---|---|
| travelDuration | 
 在這個轉換期間的旅遊時間長度。 以秒為單位的時間長度,最多可有 9 個小數位數,結尾為「 | 
| travelDistanceMeters | 
 轉換期間移動的距離。 | 
| trafficInfoUnavailable | 
 當透過  | 
| delayDuration | 
 套用至此轉場效果的延遲時間總和。如果有延遲時間,則會在下一個事件 (造訪或車輛結束) 之前的  以秒為單位的時間長度,最多可有 9 個小數位數,結尾為「 | 
| breakDuration | 
 在這個轉換期間內發生的片段持續時間總和 (如有)。每個廣告插播的開始時間和持續時間詳細資料會儲存在  以秒為單位的時間長度,最多可有 9 個小數位數,結尾為「 | 
| waitDuration | 
 在轉換期間等待的時間。等待時間長度與閒置時間相對應,不包含休息時間。另請注意,這段等待時間可能會分為數個不連續的間隔。 以秒為單位的時間長度,最多可有 9 個小數位數,結尾為「 | 
| totalDuration | 
 轉場效果的總時間長度 (僅供參考)。等於: 
 以秒為單位的時間長度,最多可有 9 個小數位數,結尾為「 | 
| startTime | 
 此轉場效果的開始時間。 使用 RFC 3339,產生的輸出內容一律會經過 Z 標準化,並使用 0、3、6 或 9 小數位數。系統也接受「Z」以外的偏移值。例如: | 
| routePolyline | 
 轉換期間所遵循路線的編碼折線表示法。只有在  | 
| routeToken | 
 僅供輸出。不透明的權杖,可傳遞至 Navigation SDK,以便在導航期間重建路線,並在重新導航時,遵循建立路線時的原始意圖。將這個符記視為不透明 blob。請勿比較不同要求的值,因為即使服務傳回完全相同的路線,值仍可能會有所變動。只有在  | 
| 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 | 
 廣告插播的開始時間。 使用 RFC 3339,產生的輸出內容一律會經過 Z 標準化,並使用 0、3、6 或 9 小數位數。系統也接受「Z」以外的偏移值。例如: | 
| duration | 
 休息時間長度。 以秒為單位的時間長度,最多可有 9 個小數位數,結尾為「 | 
VehicleFullness
VehicleFullness 是用來計算車輛載客率的指標。每個 VehicleFullness 欄位的值介於 0 和 1 之間,計算方式為上限指標欄位 (例如 AggregatedMetrics.travel_distance_meters) 與相關車輛上限 (例如 Vehicle.route_distance_limit) 之間的比率 (如果有)。否則,系統就不會設定飽和度比率。如果限制為 0,則欄位會設為 1。注意:當路線受到交通狀況影響而無法行駛時,部分原始載客率可能會超過 1.0,例如車輛可能會超出距離限制。在這種情況下,我們會將飽和度值上限設為 1.0。
| JSON 表示法 | 
|---|
| { "maxFullness": number, "distance": number, "travelDuration": number, "activeDuration": number, "maxLoad": number, "activeSpan": number } | 
| 欄位 | |
|---|---|
| maxFullness | 
 此訊息中所有其他欄位的上限。 | 
| distance | 
 
 | 
| travelDuration | 
 [AggregatedMetrics.travel_duration_seconds][] 和  | 
| activeDuration | 
 [AggregatedMetrics.total_duration_seconds][] 和  | 
| maxLoad | 
 所有類型的 [AggregatedMetrics.max_load][] 與其各自的  | 
| activeSpan | 
 特定車輛的 (vehicleEndTime - vehicleStartTime) / (latestVehicleEndTime - earliestVehicleStartTime) 比率。如果沒有分母,則會改用 ( |