ルートを計画する

アプリでユーザーに提供するルートを計画する必要がある場合もあります。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 に渡します。手順は次のとおりです。

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

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

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

    • travel_modeDRIVING または TWO_WHEELER に設定します。
    • routing_preferenceTRAFFIC_AWARE または TRAFFIC_AWARE_OPTIMAL に設定します。
    • Via ウェイポイントは使用しないでください

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

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

    String routeToken = "route token returned by Routes API";

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

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

    setDestinations(List destinations, CustomRoutesOptions customRoutesOptions, DisplayOptions displayOptions);

    次に例を示します。

    CustomRoutesOptions customRoutesOptions =
          CustomRoutesOptions.builder()
          .setRouteToken(routeToken)
          .setTravelMode(TravelMode.DRIVING)
          .build();

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

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

次のコードサンプルは、ルートトークンを使用して計画ルートを指定する方法を示しています。

    ArrayList <Waypoint> destinations = Lists.newArrayList();
    Waypoint waypoint1 =
       Waypoint.builder()
          .setLatLng(10, 20)
          .setTitle("title")
          .setVehicleStopover(true)
          .build();
    destinations.add(waypoint1);
    Waypoint waypoint2 =
       Waypoint.builder()
          .setPlaceId("ChIJYV-J-ziuEmsRIMyoFaMedU4")
          .setTitle("title")
          .setVehicleStopover(true)
           .build()
    destinations.add(waypoint2);

    String routeToken = "route token returned by Routes API";

    CustomRoutesOptions customRoutesOptions =
       CustomRoutesOptions.builder()
          .setRouteToken(routeToken)
          .setTravelMode(TravelMode.DRIVING)
          .build();

    // Existing flow to get a Navigator.
    NavigationApi.getNavigator(...);

    // Existing flow for requesting routes.
    ListenableResultFuture<RouteStatus> routeStatusFuture =
        navigator.setDestinations(destinations, customRoutesOptions);

    // Or with display options.
    DisplayOptions displayOptions = new DisplayOptions();

    ListenableResultFuture<RouteStatus> routeStatusFuture =
        navigator.setDestinations(destinations, customRoutesOptions, displayOptions);

ルートトークンと Navigation SDK の相互作用

Navigation SDK によって生成されたルートと、ルートトークンの計画ルートの相互作用は次のとおりです。

  • 以前に設定された宛先をオーバーライドします。

  • 車両の出発地点を使用します。

  • 道路や交通状況に合わせて調整されます。計画したルートを正確にたどらない理由をご覧ください。

  • 次のルーティング関連のオプションは不要として無視されます。

    • avoidsHighways
    • avoidsTolls
    • avoidsFerries
    • licensePlateRestriction
  • フォロー数:

    • 経由地点に関連するオプション(道路の側面の設定など)。

    • ルートの目的。Navigation SDK が返されたルートを調整する必要がある場合は、ルートトークンをリクエストするときに指定したルート目標が使用されます。そのため、Routes API で指定したウェイポイント関連のオプションと同じオプションを使用する必要があります。