このガイドの対象読者: このガイドは、トラック、バス、その他の大型商用車のドライバー向けのターンバイターン方式のナビゲーション エクスペリエンスの構築を担当するモバイル デベロッパーを対象としています。
このガイドの内容: このガイドでは、Routes API または Route Optimization API で生成されたトラック専用ルートを取得し、Navigation SDK for Android を使用してターンバイターン方式のナビゲーション セッションを強化する方法について説明します。
学習内容
次のタスクを行う方法について説明します。
routeTokenを使用して、バックエンドのルート プランニングを アプリ内ナビゲーション エクスペリエンスに接続する。- 事前に計画されたトラック ルートを使用するように Navigation SDK を構成する 。
- ナビゲーション UI でドライバーに トラック固有の制限事項がどのように表示されるか を理解する。
前提条件
始める前に、次の要件を満たしていることを確認してください。
1. プロジェクトのアクセス権をリクエストする
大型車両のルーティングは、一部のお客様のみご利用いただけます。ご希望の場合は、 お問い合わせフォームにご記入のうえ、Google Cloud プロジェクトのアクセス権をリクエストしてください。Google の担当者から、次のステップについてご連絡します。
Google からアクセス権が付与されたら、Google Cloud プロジェクトが大型車両のルーティング用にプロビジョニングされていることを確認します。
組織でバックエンド ルーティング API とモバイル Navigation SDK に別々の Google Cloud プロジェクトを使用している場合は、Google に連絡して各プロジェクトをプロビジョニングしてください。
2. バックエンド ルート生成を設定してルートトークンを取得する
デバイスでナビゲーションを開始する前に、バックエンド サーバーでトラック ルートを生成し、次のいずれかの API を使用して routeToken を取得する必要があります。
- Routes API: 出発地と目的地の間の単一のトラック ルートを計算する場合におすすめします。設定手順については、大型車両のルートと到着予定時刻を生成するをご覧ください。
- Route Optimization API: フリート全体の複数経由地のルートを最適化する場合におすすめします。詳細については、 Route Optimization API の大型車両ルーティング ガイドをご覧ください。
バックエンド リクエストでは、車両の物理的属性(高さ、幅、長さ、重量、車軸数、危険物)とともに travelMode: TRUCK を指定する必要があります。ルーティング 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)からトラック ルートをリクエストします。
- トークンを受け取る: ルーティング 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 インスタンスに渡すには、
CustomRoutesOptions.builder を使用します。
setRouteToken(routeToken)を使用してトークンを渡します。setTravelMode(CustomRoutesOptions.TravelMode.DRIVING)を使用して移動モードを設定します。
ステップ 3: 経由地を定義して目的地を設定する
目的地の経由地と CustomRoutesOptions を navigator.setDestinations に渡します。
経由地を構成してカスタムルート オプションを渡す際は、次の点に注意してください。
- 目的地の照合要件:
setDestinationsに渡される目的地の座標は、routeTokenの生成時に使用された目的地の座標と一致する必要があります。別の目的地を指定するとエラーが発生します。 - 道路の片側ルーティング: 大型商用車は狭い道路で簡単に
U ターンできません。トラックが道路の正しい側から目的地に近づくようにするには、経由地で
setPreferSameSideOfRoad(true)を呼び出します。 - 車両の経由地: トラックを停止または荷降ろしに適した場所に誘導するには、経由地で
setVehicleStopover(true)を呼び出します。 - ナビゲーション ポイント: 目的地に指定された貨物 搬入口または荷降ろし場がある場合は、ナビゲーション ポイント トークンを使用して指定します。
ステップ 4: ルートのステータスを処理してガイダンスを開始する
OnResultListener を
ListenableResultFuture<Navigator.RouteStatus> に登録します。ルートのステータスが 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 コントロールと 視覚要素をカスタマイズします。
- ナビゲーション イベントをリッスンする: ナビゲーションの更新と ライフサイクル イベント (ルートの進行状況、到着予定時刻の変更、ルート変更など) を処理します。