ルートを計画する

アプリでユーザーに提供するルートを計画することが必要な場合があります。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_mode に、DRIVING または TWO_WHEELER を設定してください
    • routing_preference に、TRAFFIC_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 で指定したのと同じ経由地関連のオプションを使用する必要があります。