ターンバイターン方式のデータフィードは、地図ベースのナビゲーション ガイダンス用に設計されていないデバイスにナビゲーション専用の情報を提供します。提供されるのは、ユーザーが指定した要素を含む次の操作です。
- アイコン(左、右、U ターン)
- ラウンドアバウトのターン数
- 道路名
- 次のナビゲーション ステップまたは最終目的地までの推定距離と時間
ターンバイターン方式のフィードを使用すると、小画面表示など、Navigation SDK の完全な UI が適切でない場合に、エクスペリエンスを作成できます。たとえば、二輪車のライダー向けに、ナビゲーション専用のガイダンスを投影して、最小限の注意散漫で目的地にすばやく安心して到着できるようにします。
ナビゲーション表示の必須要素
各ナビゲーション ステップの主要なフィールドは、道路名、
操作、ステップの合計距離で、
GMSNavigationStepInfoで確認できます。
移動全体については、現在のステップまたは目的地までの残り時間と距離を表示することをおすすめします。これらはすべて
GMSNavigationNavInfoで確認できます。右の画像は、これらの必須ナビゲーション要素の例を示しています。
イベント リスナーを設定する
ナビゲーション専用のデータを使用するには、didChangeNavInfo イベントのイベント リスナーを実装する必要があります。イベント リスナー内で、移動とステップの情報にアクセスして、ターンバイターン方式のナビゲーションをユーザーに提供します。
イベント ハンドラを実装するには、地図のビュー コントローラで
GMSNavigatorListener
プロトコルを実装する必要があります。Navigation SDK for iOS でのイベント処理について詳しくは、ナビゲーション イベントをリッスンするをご覧ください。
didChangeNavInfo イベントの処理
didChangeNavInfo イベントのイベント リスナーを作成して、アプリにターンバイターン方式のサポートを追加します。イベント リスナーでは、次のクラスと列挙型を使用してターンバイターン方式のナビを制御します。
GMSNavigationNavInfo\- ナビゲーションの状態に関する情報を定義するクラス。GMSNavigationStepInfo\- ナビゲーション ルートに沿った 1 つのステップに関する情報を定義するクラス。GMSNavigationNavState- 走行中、ルート変更中、停止など、ナビゲーションの現在の状態を定義する列挙型。GMSNavigationDrivingSide\- このステップが右側通行のルートか左側通行のルートかを定義する列挙型。GMSNavigationManeuver\- 左折や右折など、実行するナビゲーション アクションを定義する列挙型。
以下に、didChangeNavInfo イベントのイベント リスナーの例を示します。
Swift
// ViewController.swift class SomeViewController: UIViewController { ... mapView.navigator?.add(self); ... } extension SomeViewController: GMSNavigatorListener { func navigator(_ navigator: GMSNavigator, didUpdateNavInfo navInfo: GMSNavigationNavInfo) { // Get the current step information if navInfo.navState == .enroute { if let currentStep = navInfo.currentStep { ... roadNameLabel.text = currentStep.simpleRoadName ... } } } }
Objective-C
// ViewController.h @interface SomeViewController () <GMSNavigatorListener> @end // ViewController.m @implementation SomeViewController // Some initialization code. ... { ... [_mapView.navigator addListener:self]; ... } #pragma mark GMSNavigatorListener - (void)navigator:(GMSNavigator *)navigator didUpdateNavInfo:(GMSNavigationNavInfo *)navInfo { // Get the current step information if (navInfo.navState == GMSNavigationNavStateEnroute) { GMSNavigationStepInfo *currentStep = navInfo.currentStep; if (currentStep) { ... roadNameLabel.text = currentStep.simpleRoadName; ... } } ... }
ナビゲーションの状態
GMSNavigationNavInfo
の navState プロパティを使用して、Navigation の現在の状態を取得します。これは次のいずれかになります。
走行中 -
GMSNavigationNavStateEnroute状態は、ガイド付き ナビゲーションが有効で、ユーザーが提供されたルートを走行していることを意味します。 現在の次の操作ステップに関する情報を確認できます。ルート変更中 -
GMSNavigationNavStateReroutingは、ナビゲーションが 進行中だが、ナビゲーターが新しいルートを探していることを意味します。新しいルートがまだないため、次の操作ステップは利用できません。停止 -
GMSNavigationNavStateStoppedは、ナビゲーションが終了したことを意味します。たとえば、ユーザーがアプリでナビゲーションを終了すると、ナビゲーションが停止します。サンプルアプリでは、GMSNavigationNavStateStopped状態になるとナビゲーション情報表示がクリアされ、ステップの説明が残らないようにします。
車線案内
Navigation SDK は、ナビゲーション ターンカードの車線を
GMSNavigationLane と GMSNavigationLaneDirection のデータ オブジェクトとして表します。A
GMSNavigationLane オブジェクトは、ナビゲーション中の特定の車線を表し、
この車線から行えるすべてのターンを記述する GMSNavigationLaneDirection オブジェクトのリストがあります。
車線でドライバーが取るべき推奨方向は、recommended フィールドを使用してマークされます。

車線案内の例
次のスニペットは、前のスクリーンショットに表示されている車線のデータ表現を示しています。
// Lane 1
GMSNavigationLaneDirections =
[{/*GMSNavigationLaneShape=*/
GMSNavigationLaneShapeNormalLeft, /*recommended=*/ true}]
// Lane 2
GMSNavigationLaneDirections =
[{/*GMSNavigationLaneShape=*/
GMSNavigationLaneShapeNormalLeft, /*recommended=*/ true}]
// Lane 3
GMSNavigationLaneDirections =
[{/*GMSNavigationLaneShape=*/
GMSNavigationLaneShapeStraight, /*recommended=*/ false}]
// Lane 4
GMSNavigationLaneDirections =
[{/*GMSNavigationLaneShape=*/
GMSNavigationLaneShapeStraight, /*recommended=*/ false},
{/*GMSNavigationLaneShape=*/ GMSNavigationLaneShapeNormalRight, /*recommended=*/ false}]
車線案内の画像
Navigation SDK は、GMSNavigationStepInfo で伝達されるように、ナビゲーション ステップごとに車線画像を生成することをサポートしています。これらのアイコンは、CarPlay の画像サイズ設定
ガイドラインに適合しています。
Swift
let currentStepInfo = navInfo.currentStep let options = GMSNavigationStepImageOptions() options.maneuverImageSize = .square96 options.screenMetrics = UIScreen.mainScreen let maneuverImage = currentStepinfo.maneuverImage(options: options)
Objective-C
GMSNavigationStepInfo *stepInfo = navInfo.currentStep; GMSNavigationStepImageOptions *options = [[GMSNavigationStepImageOptions alloc] init]; options.maneuverImageSize = GMSNavigationManeuverImageSizeSquare96; options.screenMetrics = UIScreen.mainScreen; UIImage* maneuverImage = [stepInfo maneuverImageWithOptions:options];
操作のアイコンを作成する
![]()
GMSNavigationManeuver
列挙型は、ナビゲーション中に発生する可能性のある各操作を定義します。特定のステップの操作は、maneuver プロパティから取得できます
GMSNavigationStepInfo。
操作アイコンを作成し、関連する操作とペアにする必要があります。
GMSNavigationManeuverDestinationLeft や GMSNavigationManeuverDestinationRight など、一部の操作では、アイコンへの 1 対 1 のマッピングを設定できます。ただし、一部の操作は他の操作と特性を共有しているため、複数の操作を 1 つのアイコンにマッピングすることをおすすめします。たとえば、GMSNavigationManeuverTurnLeft と GMSNavigationManeuverOnRampLeft はどちらも左折アイコンにマッピングできます。
一部の操作には、追加の「時計回り」または「反時計回り」のラベルが含まれています。これは、SDK が国の通行区分に基づいて決定します。たとえば、道路の左側通行の国では、ドライバーはラウンドアバウトまたは U ターンを時計回りに走行しますが、右側通行の国では反時計回りに走行します。Navigation SDK は、操作が左側通行か右側通行のどちらで発生するかを検出し、適切な操作を出力します。そのため、操作アイコンは、時計回りの操作と反時計回りの操作で異なる場合があります。
展開して、さまざまな操作のアイコンの例を表示する
| サンプルアイコン | ターンバイターン方式の操作 |
|---|---|
![]() |
DEPARTUNKNOWN |
![]() |
STRAIGHTON_RAMP_UNSPECIFIEDOFF_RAMP_UNSPECIFIEDNAME_CHANGE
|
![]() |
TURN_RIGHTON_RAMP_RIGHT
|
![]() |
TURN_LEFTON_RAMP_LEFT
|
![]() |
TURN_SLIGHT_RIGHTON_RAMP_SLIGHT_RIGHTOFF_RAMP_SLIGHT_RIGHT
|
![]() |
TURN_SLIGHT_LEFTON_RAMP_SLIGHT_LEFTOFF_RAMP_SLIGHT_LEFT
|
![]() |
TURN_SHARP_RIGHTON_RAMP_SHARP_RIGHTOFF_RAMP_SHARP_RIGHT
|
![]() |
TURN_SHARP_LEFTON_RAMP_SHARP_LEFTOFF_RAMP_SHARP_LEFT
|
![]() |
TURN_U_TURN_COUNTERCLOCKWISEON_RAMP_U_TURN_COUNTERCLOCKWISEOFF_RAMP_U_TURN_COUNTERCLOCKWISE
|
![]() |
TURN_U_TURN_CLOCKWISEON_RAMP_U_TURN_CLOCKWISEOFF_RAMP_U_TURN_CLOCKWISE
|
![]() |
ROUNDABOUT_SHARP_RIGHT_COUNTERCLOCKWISE
|
![]() |
ROUNDABOUT_SHARP_RIGHT_CLOCKWISE
|
![]() |
ROUNDABOUT_RIGHT_COUNTERCLOCKWISE
|
![]() |
ROUNDABOUT_RIGHT_CLOCKWISE
|
![]() |
ROUNDABOUT_SLIGHT_RIGHT_COUNTERCLOCKWISE
|
![]() |
ROUNDABOUT_SLIGHT_RIGHT_CLOCKWISE
|
![]() |
ROUNDABOUT_STRAIGHT_COUNTERCLOCKWISE
|
![]() |
ROUNDABOUT_STRAIGHT_CLOCKWISE
|
![]() |
ROUNDABOUT_SLIGHT_LEFT_COUNTERCLOCKWISE
|
![]() |
ROUNDABOUT_SLIGHT_LEFT_CLOCKWISE
|
![]() |
ROUNDABOUT_LEFT_COUNTERCLOCKWISE
|
![]() |
ROUNDABOUT_LEFT_CLOCKWISE
|
![]() |
ROUNDABOUT_SHARP_LEFT_COUNTERCLOCKWISE
|
![]() |
ROUNDABOUT_SHARP_LEFT_CLOCKWISE
|
![]() |
ROUNDABOUT_U_TURN_COUNTERCLOCKWISE
|
![]() |
ROUNDABOUT_U_TURN_CLOCKWISE
|
![]() |
ROUNDABOUT_COUNTERCLOCKWISE
|
![]() |
ROUNDABOUT_CLOCKWISE
|
![]() |
ROUNDABOUT_EXIT_COUNTERCLOCKWISE
|
![]() |
ROUNDABOUT_EXIT_CLOCKWISE
|
![]() |
MERGE_RIGHTOFF_RAMP_RIGHT
|
![]() |
MERGE_LEFTOFF_RAMP_LEFT
|
![]() |
FORK_RIGHTTURN_KEEP_RIGHTON_RAMP_KEEP_RIGHTOFF_RAMP_KEEP_RIGHT
|
![]() |
FORK_LEFTTURN_KEEP_LEFTON_RAMP_KEEP_LEFTOFF_RAMP_KEEP_LEFT
|
![]() |
MERGE_UNSPECIFIED
|
![]() |
DESTINATION
|
![]() |
DESTINATION_RIGHT
|
![]() |
DESTINATION_LEFT
|
![]() |
FERRY_BOAT
|
![]() |
FERRY_TRAIN
|
生成されたアイコンを使用する
Navigation SDK は、指定された GMSNavigationStepInfo の操作アイコンの生成をサポートしています。これらのアイコンは、CarPlay の画像サイズ設定
ガイドラインに適合しています。
Swift
let currentStepInfo = navInfo.currentStep let options = GMSNavigationStepImageOptions() options.maneuverImageSize = .square96 options.screenMetrics = UIScreen.mainScreen let maneuverImage = currentStepinfo.maneuverImage(options: options)
Objective-C
GMSNavigationStepInfo *stepInfo = navInfo.currentStep; GMSNavigationStepImageOptions *options = [[GMSNavigationStepImageOptions alloc] init]; options.maneuverImageSize = GMSNavigationManeuverImageSizeSquare96; options.screenMetrics = UIScreen.mainScreen; UIImage* maneuverImage = [stepInfo maneuverImageWithOptions:options];







































