車両のルートは、時間軸に沿って次のように分解できます(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 を配置する方法を説明します。
- 重複しないようにします。
- 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 |
車両がルートを開始する時刻。 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 |
訪問前にルート上の配送先を訪問したことと、時間枠によって発生する可能性のある待ち時間による、迂回時間の増加。配達が訪問の場合、迂回は対応する集荷訪問から計算され、次のようになります。 それ以外の場合は、車両の |
shipmentLabel |
|
visitLabel |
|
visitType |
省略可。訪問のタイプを指定します。 |
injectedSolutionLocationToken |
訪問場所に関する情報を表す不透明なトークン。 このフィールドは、この訪問で 試験運用版: 詳しくは、https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request をご覧ください。 |
VisitType
訪問が受け取り、配達、Stop への訪問のいずれであるかを示します。経由地への訪問は、マルチモーダル最適化が有効になっている場合にのみ使用されます。
| 列挙型 | |
|---|---|
VISIT_TYPE_UNSPECIFIED |
未指定の訪問タイプ。 |
PICKUP_SHIPMENT |
訪問は配送物の集荷に対応します。 |
DELIVER_SHIPMENT |
訪問は配送に対応します。 |
移行
ルート上の 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 |
このトランジションの開始時間。 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 |
休憩時間。 |
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)。分母がない場合は、代わりに( |