ルート上の停車地の順序を最適化する

欧州経済領域(EEA)のデベロッパー

デフォルトでは、Routes API の Compute Routes メソッドは、指定した順序で、経由地点と呼ばれる複数の地点を通るルートを計算します。

Routes API を使用すると、経由地点をより効率的な順序に並べ替えて、指定されたルートを最適化できます。経由地点の最適化では、移動時間が最適化されますが、最も効率的なルートを判断する際は、距離や進路変更の回数なども考慮されます。

経由地点を最適化するには

  1. ルート内のどの経由地点にも viatrue に設定されていないことを確認します( 例: {"address": "Clare,SA", "via": true})。中間地点について詳しくは、 中間地点を指定するをご覧ください。

  2. routing_preferenceTRAFFIC_AWARE_OPTIMAL に設定されていないことを確認します。

  3. optimize_waypoint_ordertrue に設定します。例:

    "optimizeWaypointOrder": "true",
  4. フィールド マスクで routes.optimizedIntermediateWaypointIndex フィールドを指定します。

    REST

    -H X-Goog-FieldMask: routes.optimizedIntermediateWaypointIndex

    RPC

    const (fieldMask = "routes.optimizedIntermediateWaypointIndex")

経由地点の順序が最適化される仕組みを理解する

Routes API でルート内の経由地点の順序が最適化される仕組みは次のとおりです。

  1. リクエストで指定した順序に基づいて、経由地点に 0 から始まるインデックスを自動的に割り当てます。

  2. リクエストで経由地点に割り当てられたインデックス番号を使用して、経由地点の順序を最適化します。

  3. 最適化された経由地点の順序を routes オブジェクトの waypoint_order フィールドで、routes.optimizedIntermediateWaypointIndex の下で返します。

このリクエストでは、南オーストラリア州アデレードから南オーストラリア州の主要なワイン産地を巡り、アデレードに戻るルートの最適化をリクエストしています。

curl -X POST -H 'content-type: application/json' -d ' {
  "origin": {
    "address": "Adelaide,SA"
  },
  "destination": {
    "address": "Adelaide,SA"
  },
  "intermediates": [
    {"address": "Barossa+Valley,SA"},
    {"address": "Clare,SA"},
    {"address": "Coonawarra,SA"},
    {"address": "McLaren+Vale,SA"}
  ],
  "travelMode": "DRIVE",
  "optimizeWaypointOrder": "true"
  }' \
-H 'Content-Type: application/json' \
-H 'X-Goog-Api-Key: YOUR_API_KEY' \
-H 'X-Goog-FieldMask: routes,geocodingResults.intermediates.intermediateWaypointRequestIndex' \
'https://routes.googleapis.com/directions/v2:computeRoutes'

Routes API は、リクエストで指定された中間地点に 0 から始まるインデックスを割り当てます。例:

0    {"address": "Barossa+Valley,SA"},
1    {"address": "Clare,SA"},
2    {"address": "Coonawarrav,SA"},
3    {"address": "McLaren+Vale,SA"}

リクエストで指定された 4 つの経由地点のインデックス番号を使用して、最適化された順序を返します。

"optimizedIntermediateWaypointIndex": [
                3,
                2,
                0,
                1
            ]