ルートを計画する

アプリからユーザーに提供するルートを計画したい場合もあります。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 に設定します。
    • 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: {...})

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 で指定したのと同じ地点関連のオプションを使用する必要があります。