このガイドの対象読者: トラック、バス、その他の大型商用車の運転手向けのターンバイターン ナビゲーション エクスペリエンスの構築を担当するモバイル デベロッパーの方は、このガイドをお読みください。
このガイドの内容: このガイドでは、Routes API または Route Optimization API で生成されたトラック専用のルートを取得し、Navigation SDK for iOS を使用してターンバイターン ナビゲーション セッションを起動する方法について説明します。
学習内容
次のタスクの実行方法について学びます。
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 を指定する必要があります。ルーティング API はレスポンスで routeToken を返します。バックエンド サーバーはこれをモバイルアプリに渡します。
3. 最小 SDK とシステム要件を満たす
アプリでは、必要な最小バージョンの Navigation SDK 5.4.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: トークンを Navigator に渡す
routeToken と目的地の経由地を mapView.navigator
setDestinations メソッドに渡します。
経由地を構成してルートトークンを渡す場合は、次の点を考慮してください。
- リンク先の一致要件:
setDestinationsに渡されるリンク先の座標は、routeTokenの生成時に使用されるリンク先の座標と一致する必要があります。別の宛先を指定するとエラーが発生します。 - 道路脇のルーティング: 大型商用車は狭い道路で簡単に U ターンできません。トラックが道路の正しい側から目的地に近づくようにするには、経由地に
preferSameSideOfRoad = trueを設定します。 - 車両の立ち寄り: トラックを適切な停車場所や荷降ろし場所に誘導するには、経由地に
vehicleStopover = trueを設定します。 - ナビゲーション ポイント: 目的地に貨物搬入口や荷積みドックが指定されている場合は、ナビゲーション ポイント トークンを使用して指定します。
ステップ 3: ルートのステータスを処理してガイダンスを開始する
setDestinations コールバックで返された GMSRouteStatus を評価します。ステータスが .OK(GMSRouteStatusOK)の場合、isGuidanceActive = true(guidanceActive = YES)を設定して、アクティブなターンバイターン ガイダンスを開始します。
サンプルコード
mapView.navigator
setDestinations メソッドを使用して、ルートトークンを Navigation SDK に渡します。このとき、ルートトークンの作成時に使用したのと同じ目的地の経由地を指定します。
// Obtain the routeToken string from your backend
let routeToken = "route token returned by Routes API"
mapView.navigator?.setDestinations([destination], routeToken: routeToken, callback: {...})
車載ディスプレイ
CarPlay のナビゲーションを使用すると、大型車両のナビゲーション セッションをインダッシュ モニターに表示できます。次のステップ
- ナビゲーション UI を変更する: コンパス、再センタリング ボタン、カメラの視点など、組み込みの UI コントロールと視覚要素をカスタマイズします。
- ナビゲーション イベントをリッスンする: ルートの進行状況、到着予定時刻の変更、ルートの変更など、ナビゲーションの更新とライフサイクル イベントを処理します。