ルートを計画する

アプリがドライバーに提供するルートを計画したい場合があります。Routes API(または Routes Preferred API)のルートトークンを使用すると、計画するルートに次の 2 つの要素を指定できます。

  • ルートのポリライン

  • ルートの目標

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

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

  • 移動時間や燃料消費量を最小限に抑える: 物流企業では、ドライバーの効率を改善して燃料費を削減したいと考えています。

  • 宛先までの時間を最小限に抑える: サービス ディスパッチ オペレーションで、ジョブ リクエストにオペレーターを取得するのにかかる時間を最小限に抑える必要がある場合があります。

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

ルートトークンを使用したルートの計画の詳細については、ルートトークンをリクエストするをご覧ください。

ルート目的でルートトークンを使用する理由

Routes または Routes Preferred API のルートトークンを使用すると、指定されたルートをより細かく制御できます。

  • 可能であれば、Navigation SDK が使用する事前にルートを計画します。

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

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

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

Routes API のルート トークンの仕組み

Routes API または Routes Preferred API を使用して ルート目標を使ってルートを計画できますRoutes API はルートトークンを返します。このトークンを Navigation SDK に渡して、車両のルーティング方法を決定できます。

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

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

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

  3. Navigation SDK はルートを取得します。条件が変化してルートが使用できない場合は、最も一致するルートを取得します。

  4. ルートの運転中に、交通状況などの道路状況が変化した場合、または車両が計画されたルートから逸脱した場合、変更されたルートは、トークン内のルート目標に基づいて最適なルートとの一致を繰り返し試みます。

このプロセスにより、実際のルートと計画したルートの距離が最大限に近づきます。

予定されたルートが正確ではない理由

計画しているルートと目標は、従うべきガイドラインと考えてください。これは規範的なものではありません。計画されたルートの作成後に道路状況、開始位置、その他のパラメータが変更されたため、計画されたルートとガイド付きナビゲーションで提供されたルートが異なる場合があります。この違いにより、距離や到着予定時刻など、ルートの計画と実際の目標が一致しないことがあります。

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

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

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

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

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

    • travel_modeDRIVING に設定する
    • routing_preferenceTRAFFIC_AWARE または TRAFFIC_AWARE_OPTIMAL に設定します
    • 経由地を使用しない

ステップ 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: {...})

Navigator.setDestinations メソッドはリクエストのステータスを返します。ユーザーの現在地から指定された目的地へのルートが見つかった場合は、RouteStatus.OK を返します。

このメソッドの詳細については、Navigator.setDestinations をご覧ください。

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

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:coordinate 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 が調整する必要がある場合は、ルートトークンのリクエスト時に指定したルート目標が使用されます。このため、Routes API で指定したのと同じ地点関連のオプションを使用する必要があります。