ウェイポイントの最適化は、ComputeRoutes
を拡張するルート優先機能です。旅行者のルートの中間ウェイポイントの順序を最適化し、最も効率的なルートを確実に選択できるようにします。ウェイポイント最適化の ComputeRoutes
実装は、次の移動手段をサポートしています。
- 車
- 電動二輪車
- サイクリング
- 徒歩
ウェイポイントの最適化を使用する理由
目的地までのルート上の複数のウェイポイントをユーザーに案内するアプリを作成する場合、旅行者がウェイポイントを最適な順序で移動することが重要です。これにより、旅行者は最短時間ですべてのウェイポイントに到着できます。
仕組み
デフォルトでは、ComputeRoutes
はウェイポイントを、元に指定された順序で通るルートを計算します。ComputeRoutes
を取得すると、中間ウェイポイントをより効率的な順序に並べ替えてルートを最適化できます。リクエスト本文の optimizeWaypointOrder
フィールドを true
に設定すると、最適化された経由地を含むルートが返されます。
注: ウェイポイントの最適化計算は主に移動時間に基づいていますが、距離や曲がり角の数などの他の要素も考慮されます。
ウェイポイントの順序を変更する
ウェイポイントの順序が入れ替わったルートを取得するには、リクエストの本文でブール値フィールド optimizeWaypointOrder
を true
に設定して ComputeRoutes
にします。また、フィールド マスクに optimizedIntermediateWaypointIndex
フィールドを含めます。レスポンスの本文には、optimizedIntermediateWaypointIndex
フィールドに最適化されたウェイポイントの順序が含まれます。
注: optimizedIntermediateWaypointIndex
フィールドはゼロベースの値を返します。
リクエスト例
次のリクエスト例では、スタンフォード大学のキャンパス付近のルートを指定しています。ルートのウェイポイントがリクエストで順番に指定されている。リクエストには、出発地と目的地、2 つの中間ウェイポイントが含まれています。
POST /v1alpha:computeRoutes
Host: routespreferred.googleapis.com
Content-Type: application/json
X-Server-Timeout: 10
X-Goog-Api-Key: YOUR_API_KEY
X-Goog-FieldMask: routes.optimizedIntermediateWaypointIndex,routes.duration,routes.distanceMeters,routes.polyline.encodedPolyline
{
"origin":{
"location":{
"latLng":{
"latitude": 37.418956,
"longitude": -122.160815
}
}
},
"intermediates": [
{
"location":{
"latLng":{
"latitude": 37.4176423,
"longitude":-122.1102246
}
}
},
{
"location":{
"latLng":{
"latitude": 37.407689,
"longitude": -122.1360597
}
}
}
],
"destination":{
"location":{
"latLng":{
"latitude": 37.4032137,
"longitude": -122.0349119
}
}
},
"travelMode": "DRIVE",
"optimizeWaypointOrder": true,
"routingPreference": "TRAFFIC_AWARE"}
レスポンスの例
並べ替えられた中間ウェイポイント インデックスは、レスポンス本文の routes オブジェクト内の optimizedIntermediateWaypointIndex
フィールドで確認できます。エンコードされたポリラインは、Directions API と ComputeRoutes と同じです。
routes {
distance_meters: 17647
duration {
seconds: 1866
}
polyline {
encoded_polyline: "wkkcFvorhVU{@Ec@C}CG}@Mm@[}@i@y@[[g@_@Tk@BSjCgGfF|D\\Pv@Lj@@XaCTeC\\aCTs@`ByD`@k@h@e@x@Yh@GtADhBF|@G`AWpAs@lAsAdA{A`BmDr@cBmUqQoS}OyGmFiBsAgEwD}CaCU_@Og@@e@Hy@nGkO~@sBr@cBlDqIlByEp@}AjIfGnBbBHLLd@^p@~ErDfNrKrA~@DIhEeBTQ~AqDlE{KjBgE|FnEh@aAi@`A}FoE~AmD`A}BcAm@mHwFwD}CkLwIsDqCgF_EG[GKnCsDrA_BrC_CnCoBpEkD`EyClCsBcBeBIAkGkH]k@eJmKQKsAuA_@g@wCoDGQmEmFmIqROKaDuHvBkBxAgANCRH^f@v@dBHDD?`AUiBqEhBpEaATMCQYm@wAY]SIOByAfAwBjB_ByDaAwBiCeIA[c@aBqEuNOm@IQbA{c@p@aZFmCTuBLg@Tc@BUAKxOeV~Vy_@nBoDv@_BvAcDzA_EdG{RdC{HtIsY|B{Hx@mDbAuFdBsMbKsv@TaBf@}AdF{Sn@_DJq@Lo@aE`@]GUQmAmAQk@@g@RK`Ce@d@UDEPc@f@cCrAyGJs@X{AbIem@bA{JD_AIaAMg@o@{A_Ad@y@NaCLCsCK_FGI"
}
optimizedIntermediateWaypointIndex: 1
optimizedIntermediateWaypointIndex: 0
}
この例では、地点を最適化すると、元の順序が逆になります。
おすすめの実装方法
最適化された経由地を含むリクエストは、単純なルーティング リクエストよりも処理に時間がかかります。そのため、X-Server-Timeout
リクエスト ヘッダーの値を 10 秒以上に設定して、メソッド呼び出しのタイムアウトを長くすることをおすすめします。タイムアウト エラーが引き続き発生する場合は、1 秒追加してからもう一度お試しください。
使用制限
ウェイポイントの最適化を使用するには、次の使用制限と条件を遵守する必要があります。
ルートの中間ウェイポイントの使用上限を指定できます。
- 緯度と経度の座標のみを使用するウェイポイントは最大 98 個。
- プレイス ID を使用してウェイポイントを指定する場合は、最大 25 個のウェイポイント。
すべての地点は立ち寄り場所のタイプにする必要があります。ウェイポイントのタイプを via にすることはできません。
フィールド マスクに
routes.optimizedIntermediateWaypointIndex
を追加する必要があります。リクエストに 25 個以上の中間ウェイポイントが含まれている場合は、次の条件も満たす必要があります。
すべてのウェイポイント間の累積直線距離は 1,000 km 未満である必要があります。この距離には、出発地と目的地の両方が含まれます。
移動手段は「ドライブ」である必要があります。