ルートを計画する

アプリがユーザーに提供するルートを計画したい場合があります。Routes API、Routes Preferred API、または Route Optimization API のルートトークンを使用すると、計画ルートに次の 2 つを指定できます。

  • ルートのポリライン

  • ルートの目標

たとえば、次のようなルーティング目標が考えられます。

  • 配達時間を最小限に抑える: 食品を配達するビジネスでは、食品の配達にかかる時間を最小限に抑える必要があります。

  • 移動時間または燃料消費量を最小限に抑える: 物流企業は、ドライバーの効率を向上させ、燃料費を削減したいと考えている場合があります。

  • 目的地までの時間を最小限に抑える: サービス ディスパッチ オペレーションでは、オペレーターがジョブリクエストに到達するまでの時間を最小限に抑えることが必要になる場合があります。

  • コストを削減し、安全性を向上させる: ライドシェアリング ビジネスでは、乗客の費用を抑え、安全上の理由から特定のエリアを避けるルートを見つけることが必要になる場合があります。

ルートトークンを使用したルートの計画の詳細については、Routes API のルートトークンを取得すると、Route Optimization API の遷移ポリラインとルートトークンをご覧ください。

ルート目標にルートトークンを使用する理由

Routes API、Routes Preferred API、Route Optimization API のルートトークンを使用すると、提供されるルートをより細かく制御できます。

  • Navigation SDK で使用するルートを事前に計画します。

  • Navigation SDK で使用する最適なルートを選択する。Routes API でルートを生成するときにルートトークンをリクエストすると、生成されたルートごとにルートトークンが取得されます。その後、Navigation SDK に渡すときに使用するルートのトークンを選択できます。

  • 到着予定時刻と距離の見積もりなど、事前に料金を見積もります。実際の費用と時間は異なる場合がありますが、この推定により、予想されるルート費用と実際のルート費用の差が縮小されます。

  • エコルートや最短ルートなど、より高度なルート目標を指定します。

ルートトークンの仕組み

Routes API、Routes Preferred API、Route Optimization API を使用して、ルート目標を使用してルートを計画できます。これらの API から返されたルートトークンを Navigation SDK に渡して、車両のルートを案内できます。

ルートトークンをリクエストして使用すると、次のようになります。

  1. Routes API、Routes Preferred API、または Route Optimization API は、ルートのポリラインとルートの目標を含む暗号化されたルートトークンを返します。

  2. ルートトークンを Navigation SDK に渡します。

  3. Navigation SDK は、より速いルートが利用可能な場合でも、計画したルートでナビゲーションを開始します。

  4. 移動中に交通状況や道路状況が変化した場合、または車両が予定ルートから外れた場合、Navigation SDK は、ルートトークンに設定されたルート目標とルート設定オプションに沿って新しいルートを計算します。

このプロセスにより、実際のルートが計画ルートにできるだけ近づきます。

計画されたルートに正確に従わない理由

ナビゲーションは計画されたルートで開始されますが、次のような状況では実際のルートが異なる場合があります。

  • 車両が、計画された始点から離れた場所から出発する。
  • 乗車中に交通状況や道路状況が変化した。
  • 車両が予定されたルートから外れる。

これらの違いは、計画した距離、到着予定時刻、その他の重要なルート品質に影響する可能性があります。

ルート トークンを使用してルートを計画する

ルートを計画するには、ルートトークンを作成して Navigation SDK に渡します。手順は次のとおりです。

ステップ 1: Routes API、Routes Preferred API、または Route Optimization API を使用してルートトークンを作成する

  1. 次のいずれかの方法でルートトークンをリクエストします。

  2. ルートトークンを使用するための要件を満たすように、Routes API または Routes Preferred API のリクエストを設定します。

    • travelMode を DRIVE または TWO_WHEELER に設定します。
    • routingPreference を TRAFFIC_AWARE または TRAFFIC_AWARE_OPTIMAL に設定します。
    • Via ウェイポイントは使用しないでください。

ステップ 2: ルートトークンを Navigation SDK に渡す

  1. ルートトークンを保存する: Navigation SDK で、ルートトークンを保存する文字列を設定します。次に例を示します。

    let routeToken = "route token returned by Routes API"
    

    返されるルートトークンの例:

    {
    // Other fields
    "routeToken": "CqMBCjoKCJQOor5DHcwiEhBon3XpHXFnVvDeWMwd9PpAGgz6wtnFDKIBrAHTARpCApUDSggAAAAACjcrP3gBEAQaTApKChgKDQoCCAERAAAAAACAZkAR3SQGgZUXdUASEggAEAMQBhATEBIYAkIEGgIIBSIYChZ2VEJiWlBPSkk1aU5wUVRzNTV5d0FRKAEiFQBcJuds-Efh-2QZhOMTtUCCxEVL_g",
    }
    
  2. mapView.navigator.setDestinations を使用して、ルートトークンを Navigation SDK に渡します。ルートトークンの作成時に使用した目的地ウェイポイントと同じものを指定します。

    mapView.navigator?.setDestinations([waypoint1, waypoint2], routeToken: routeToken, callback: {...})
    

    setDestinations メソッドは、リクエストのステータスをコールバックに渡します。ユーザーの現在地から指定された目的地までのルートが見つかった場合、ステータスは .OK(GMSRouteStatusOK)になります。

複数経由地のシナリオ

設定できるウェイポイントは最大 25 個です。

setDestinations メソッドは、複数の目的地を含むルートをサポートしていません。continueToNextDestinationWithCompletion() を使用して、ウェイポイントをルートの次の区間に進めます。

例

次のコード例は、計画されたルートを取得する方法を示しています。

Swift

let location = CLLocationCoordinate2D(latitude: 47.67, longitude: -122.20)
let waypoint1 = GMSNavigationWaypoint(location: location, title: "waypoint from location")!
let waypoint2 = GMSNavigationWaypoint(placeID: "samplePlaceID", title: "waypoint from Place ID")!

let routeToken = "route token returned by Routes API"
mapView.navigator?.setDestinations([waypoint1, waypoint2], routeToken: routeToken, callback: {...})

Objective-C

CLLocationCoordinate2D location = CLLocationCoordinate2DMake(47.67, -122.20);
GMSNavigationWaypoint *waypoint1 = [[GMSNavigationWaypoint alloc] initWithLocation:location title:@"waypoint from location"];
GMSNavigationWaypoint *waypoint2 = [[GMSNavigationWaypoint alloc] initWithPlaceID:@"samplePlaceID"
                                                                            title:@"waypoint from Place ID"];
NSString *routeToken = @"route token returned by Routes API";

[mapView.navigator setDestinations:@[waypoint1, waypoint2]
                        routeToken:routeToken
                          callback:^(GMSRouteStatus routeStatus){...}];

ルートトークンと Navigation SDK の連携

Navigation SDK が計画ルートを処理する方法は次のとおりです。

  • アプリの次の設定ではなく、ルートトークンに設定されたルート オプションを使用します。これには、移動中に新しいルートを計算する場合も含まれます。

    • avoidsHighways
    • avoidsTolls
    • avoidsFerries
    • licensePlateRestriction
    • アプリで設定されている移動手段
  • ルートを計算または調整する際に、次の設定に従います。

    • ルート トークンからのルート目標(エコ ルーティングや最短ルートなど)。Navigation SDK でルートを調整する必要がある場合は、ルートトークンをリクエストしたときに指定したルート目標が使用されます。

    • アプリのウェイポイント関連のオプション(道路のどちら側を優先するかなど)。ルートトークンをリクエストしたときに指定したウェイポイント関連のオプションと同じものを使用します。