このガイドの対象読者: トラック、バス、その他の大型商用車のドライバー向けにターンバイターン方式のナビゲーション エクスペリエンスを構築するモバイル デベロッパー。
このガイドの内容: このガイドでは、Routes API または Route Optimization API で生成されたトラック固有のルートを取得し、Navigation SDK for Android でターンバイターン方式のナビ セッションを強化する方法について説明します。
学習内容
次のタスクの実行方法について学びます。
routeTokenを使用して、バックエンドのルート計画をアプリ内ナビゲーション エクスペリエンスに接続します。- 事前に計画されたトラックルートを使用するように Navigation SDK を構成します。
- ナビゲーション UI で、トラック固有の制限がドライバーにどのように表示されるかを理解する。
前提条件
開始する前に、次の要件を満たしていることを確認してください。
1. プロジェクトへのアクセスをリクエストする
大型車両のルート設定は、一部のお客様のみご利用いただけます。Google Cloud プロジェクトへのアクセスをリクエストするには、お問い合わせフォームにご記入ください。Google の担当者から次のステップについてご連絡いたします。
Google からアクセス権が付与されたら、Google Cloud プロジェクトが大型車両のルート設定用にプロビジョニングされていることを確認します。
組織でバックエンド ルーティング API とモバイル ナビゲーション SDK に別々の Google Cloud プロジェクトを使用している場合は、Google に連絡して各プロジェクトをプロビジョニングしてください。
2. バックエンド ルート生成を設定してルートトークンを取得する
デバイスでナビゲーションを開始する前に、バックエンド サーバーでトラックルートを生成し、次のいずれかの API を使用して routeToken を取得する必要があります。
- Routes API: 出発地と目的地の間の単一のトラックルートを計算する場合におすすめです。設定手順については、大型車両のルートと到着予定時刻を生成するをご覧ください。
- Route Optimization API: フリート全体の複数地点を経由するルートを最適化する場合におすすめです。詳細については、Route Optimization API の大型車両のルート設定ガイドをご覧ください。
バックエンド リクエストでは、車両の物理的な属性(高さ、幅、長さ、重量、車軸数、危険物貨物)とともに travelMode: TRUCK を指定する必要があります。Routes API はレスポンスで routeToken を返します。バックエンド サーバーはこれをモバイルアプリに渡します。
3. SDK とシステムの最小要件を満たす
アプリは、Navigation SDK の最小要件であるバージョン 5.2.0 以降を使用する必要があります。また、プロジェクトは標準の Navigation SDK の設定要件を満たしている必要があります。
制限事項とオペレーション ガイドライン
始める前に、次の制限事項と運用ガイドラインに注意してください。
- 利用可能な地域: 大型車両のルートは、米国本土 48 州(一般提供)と日本(試験運用版)で利用できます。アラスカ、ハワイ、米国領ではご利用いただけません。
- ドライバーへの助言と安全性: ドライバーは、Navigation SDK から返されるルートが安全または合法であると、盲目的に信頼してはなりません。ルートは、すべての道路状況で車両に適しているとは限りません。ルートに従うと、高さ制限や重量制限のある道路などの危険にドライバーがさらされる可能性があります。ドライバーは常に注意を払い、掲示されている道路標識や地域の規制に従う必要があります。
- ベスト エフォート ルート: ルーティング API が車両の制限に完全に準拠するルートを見つけられない場合、制限されたセグメントを通過する可能性がある「ベスト エフォート」ルートを返します。たとえば、Routes API はレスポンスに
routeRestrictionsPartiallyIgnoredフラグを設定します。これらのルートをナビゲーションする場合、Navigation SDK はルート コールアウトを表示して、関連する制限をハイライト表示します。このような場合は、ルートを慎重に計画し、計画やナビゲーションの信頼できる唯一の情報源として、フラグ付きのルートを使用しないでください。 - サポートされていない機能: 大型車両向けルート検索では、次の機能はサポートされていません。
- トラックの通行料金
- トラックまたは大型車両に固有の制限速度
- 放射性危険物のルーティング
- 使用量上限: Navigation SDK へのリクエストは、標準の使用量上限と割り当て上限に従います。詳細については、使用量と課金をご覧ください。
トラック固有の UI(ルート コールアウト)を表示する
Navigation SDK は、ルートの吹き出しと呼ばれる視覚的な警告を地図上に自動的に表示し、トラックの制限事項をドライバーに通知します。コールアウトは、計画されたルート沿いで発生する制限に対して表示されますが、近くの他の道路には表示されません。
Navigation SDK には、次の制限事項に関するコールアウトが含まれています。
| 制限 | コールアウト アイコンとテキスト | 表示の条件 |
|---|---|---|
| 高さ |
黄色 = 警告。車両の高さが許容される最大高さに近づいています
赤色 = 車両の高さが許容される最大高さを超えています |
車両の高さが制限に近い場合は、黄色のコールアウトが表示されます。
ルートが準拠しておらず、高さ制限に違反している場合は、赤色のコールアウトが表示されます。
|
| 重み |
|
車両の重量が道路の制限を超えると、赤色のコールアウトが表示されます。
|
| トラック通行禁止 |
|
商用トラックの規制がある道路セグメントを走行している場合は、赤色のコールアウトが表示されます。
|
| 危険物 |
|
車両の危険物積載が道路セグメントで禁止されている場合、赤色のコールアウトが表示されます。
|
ルートトークンの仕組み
routeToken は、Google のルーティング バックエンドによって作成されたルートの暗号化されたスナップショットです。計画されたルートのジオメトリ、車両の物理的な寸法、制限プロファイルがカプセル化されます。
ワークフローは次の手順で行われます。
- ルートをリクエストする: バックエンド サーバーが Routes API(または Route Optimization API)にトラックルートをリクエストします。
- トークンを受信する: Routes API が準拠ルートを計算し、バックエンド サーバーに
routeTokenを返します。 - トークンを転送する: バックエンド サーバーが
routeTokenと目的地の座標をモバイルアプリに渡します。 - SDK に渡す: モバイルアプリが
routeTokenを Navigation SDK に渡します。 - ガイダンスを開始する: Navigation SDK は、ターンバイターン エクスペリエンスのすべての側面を処理します。これには、ルート コールアウトのレンダリングや、車両の制限に応じた動的なルート変更の処理が含まれます。
動的な再計算とルート変更
アクティブなナビゲーション中に、交通状況、通行止め、曲がり角の見落としなどにより、車両が予定ルートから外れることがあります。
ルート変更が発生した場合:
- Navigation SDK は、目的地までのルートを自動的に再計算します。
- SDK は、元の
routeTokenでエンコードされた車両の属性と寸法を保持します。 - 新しく再計算されたルートでは、高さ制限、重量制限のある橋、商用トラックの通行が禁止されている道路が回避されます。
実装: トラック固有のルートを開始する
大型車両ルートトークンを使用してターンバイターン方式のナビを初期化して開始する手順は次のとおりです。
ステップ 1: バックエンドからルートトークンを取得する
モバイルアプリは、バックエンド サーバーから目的地の座標とともに routeToken 文字列を受け取ります。サーバーでこのトークンを生成する方法については、Routes API ドキュメントの大型車両のルートと到着予定時刻を生成するをご覧ください。
次のコードは、ルートトークンの例です。
{
"routeToken": "CqMBCjoKCJQOor5DHcwiEhBon3XpHXFnVvDeWMwd9PpAGgz6wtnFDKIBrAHTARpCApUDSggAAAAACjcrP3gBEAQaTApKChgKDQoCCAERAAAAAACAZkAR3SQGgZUXdUASEggAEAMQBhATEBIYAkIEGgIIBSIYChZ2VEJiWlBPSkk1aU5wUVRzNTV5d0FRKAEiFQBcJuds-Efh-2QZhOMTtUCCxEVL_g"
}
ステップ 2: CustomRoutesOptions を構成する
CustomRoutesOptions.builder を使用して、ルートトークンを CustomRoutesOptions インスタンスに渡します。
setRouteToken(routeToken)を使用してトークンを渡します。setTravelMode(CustomRoutesOptions.TravelMode.DRIVING)を使用して移動手段を設定します。
ステップ 3: ウェイポイントを定義して目的地を設定する
目的地のウェイポイントと CustomRoutesOptions を navigator.setDestinations に渡します。
ウェイポイントを構成してカスタムルート オプションを渡す場合は、次の点を考慮してください。
- 目的地のマッチング要件:
setDestinationsに渡される目的地の座標は、routeTokenの生成時に使用された目的地の座標と一致する必要があります。別の宛先を指定すると、エラーが発生します。 - 道路脇のルート設定: 大型商用車は、狭い道路で U ターンするのが困難です。トラックが道路の正しい側で目的地に近づくようにするには、ウェイポイントで
setPreferSameSideOfRoad(true)を呼び出します。 - 車両の立ち寄り場所: トラックを停車または荷降ろしに適した場所に誘導するには、ウェイポイントで
setVehicleStopover(true)を呼び出します。 - ナビゲーション ポイント: 目的地に指定の貨物搬入口または荷積みドックがある場合は、ナビゲーション ポイント トークンを使用して指定します。
ステップ 4: ルートのステータスを処理して、ナビを開始する
ListenableResultFuture<Navigator.RouteStatus> に OnResultListener を登録します。ルートのステータスが OK の場合は、navigator.startGuidance を呼び出して、アクティブなターンバイターン方式のナビを開始します。
サンプルコード
CustomRoutesOptions.builder を使用してトークンを設定し、navigator.setDestinations に渡します。
// Obtain the routeToken string from your backend
val routeToken = "route token returned by Routes API"
val customRoutesOptions = CustomRoutesOptions.builder()
.setRouteToken(routeToken)
.setTravelMode(TravelMode.DRIVING)
.build()
// Specify the same destination used to create the route token
ArrayList <Waypoint> destinations = Lists.newArrayList();
val destination = Waypoint.builder()
.setLatLng(10.0, 20.0)
.setTitle("title")
.setVehicleStopover(true)
.build()
destinations.add(destination);
navigator.setDestinations(destinations, customRoutesOptions)
車載ディスプレイ
Android Auto 向けナビゲーションを使用すると、大型車両のナビゲーション セッションをインダッシュ画面に投影できます。次のステップ
- ナビゲーション UI を変更する: コンパス、中央に再配置ボタン、カメラの視点など、組み込みの UI コントロールと視覚要素をカスタマイズします。
- ナビゲーション イベントをリッスンする: ルートの進行状況、到着予定時刻の変更、ルート変更など、ナビゲーションの更新とライフサイクル イベントを処理します。