アプリでユーザーに提供するルートを計画したい場合があります。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 に渡して、車両のルート設定方法をガイドできます。
ルートトークンをリクエストして使用すると、次のようになります。
- Routes API、Routes Preferred API、または Route Optimization API は、ルートのポリラインとルートの目標を含む暗号化されたルートトークンを返します。 
- ルートトークンを Navigation SDK に渡します。 
- Navigation SDK はルートを取得します。状況の変化によりルートが利用できない場合は、最適なルートを取得します。 
- ルートの運転中に、交通状況やその他の道路状況が変化した場合、または車両が計画されたルートから逸脱した場合、変更されたルートは、トークンのルート目標に基づいて、最適なルートに継続的に一致させようとします。 
このプロセスにより、実際のルートが計画したルートに最大限近づきます。
計画したルートが正確にたどられない理由
計画したルートとルートの目標は、従うべきガイドラインと考えることができます。これらは規定ではありません。道路状況、出発地、または計画ルートの作成後に変更されたその他のパラメータの違いにより、計画ルートとナビゲーションで提供されるルートが異なる場合があります。この違いにより、距離や到着予定時刻などの重要な乗車品質について、計画した目標と実際の目標が一致しない可能性があります。
ルートトークンを使用してルートを計画する
ルートを計画するには、次の手順で説明するように、ルートトークンを作成して Navigation SDK に渡します。
ステップ 1: Routes API、Routes Preferred API、または Route Optimization API を使用してルートトークンを作成する
- 次のいずれかの方法でルートトークンをリクエストします。 - Routes API: - computeRoutes。Routes API でルートトークンをリクエストする方法について詳しくは、ルートを計算するとルートトークンをリクエストするをご覧ください。
- Routes Preferred API: - computeCustomRoutes。Routes Preferred API でルートトークンをリクエストする方法については、ルートを計画するをご覧ください。
- Route Optimization API: - optimizeToursまたは- batchOptimizeTours。Route Optimization API でルートトークンをリクエストする方法については、トランジション ポリラインとルートトークンをご覧ください。
 
- ルートトークンを使用するための要件を満たすように、Routes API または Routes Preferred API リクエストを設定します。 - travel_modeに、- DRIVINGまたは- TWO_WHEELERを設定してください
- routing_preferenceに、- TRAFFIC_AWAREまたは- TRAFFIC_AWARE_OPTIMALを設定してください
- Viaウェイポイントは使用しないでください
 
ステップ 2: ルートトークンを Navigation SDK に渡す
- ルートトークンを保存する: Navigation SDK で、ルートトークンを保存する文字列を設定します。次に例を示します。 - let routeToken = "route token returned by Routes API"- 返されるルートトークンの例: - { // Other fields "routeToken": "CqMBCjoKCJQOor5DHcwiEhBon3XpHXFnVvDeWMwd9PpAGgz6wtnFDKIBrAHTARpCApUDSggAAAAACjcrP3gBEAQaTApKChgKDQoCCAERAAAAAACAZkAR3SQGgZUXdUASEggAEAMQBhATEBIYAkIEGgIIBSIYChZ2VEJiWlBPSkk1aU5wUVRzNTV5d0FRKAEiFQBcJuds-Efh-2QZhOMTtUCCxEVL_g", }
- ルートトークンを渡すには、 - mapView.navigator setDestinationsメソッドを使用して Navigation SDK に渡します。このとき、ルートトークンの作成時に使用したのと同じ目的地の経由地を指定します。- mapView.navigator?.setDestinations([waypoint1, waypoint2], routeToken: routeToken, callback: {...})- Navigator.setDestinationsメソッドは、リクエストのステータスを返します。ユーザーの位置情報から指定された目的地までのルートが見つかった場合は、- RouteStatus.OKを返します。
このメソッドの詳細については、GMSNavigator.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 で指定したのと同じ経由地関連のオプションを使用する必要があります。