ターンバイターン方式のデータフィードは、地図ベースのナビゲーション ガイダンス用に設計されていないデバイスに、ナビゲーションのみの情報を提供します。次の要素を使用して今後の操作を提供します。
- アイコン(左、右、U ターン)
- ロータリーで番号を曲がる
- 道路名
- 次のナビゲーションステップや最終目的地までの推定距離と時間
ターンバイターン フィードを使用すると、完全な Navigation SDK UI が適さないエクスペリエンス(小さな画面ディスプレイなど)を作成できます。たとえば、二輪車のライダーの場合に、ナビゲーションのみの案内を投影して、気を散らすことなくすばやく自信を持って目的地に到着できるようサポートできます。
重要なナビゲーション表示要素
各ナビゲーション ステップの主なフィールドは、道路名、操作手順、ステップの合計距離です。これらの情報は GMSNavigationStepInfo で確認できます。
ルート全体で、現在のステップまたは目的地までの残り時間と距離を表示できます。これらはすべて GMSNavigationNavInfo で確認できます。右の画像は、これらの重要なナビゲーション要素の例を示しています。
イベント リスナーをセットアップする
ナビゲーションのみのデータを使用するには、didChangeNavInfo
イベントのイベント リスナーを実装する必要があります。イベント リスナー内でルートとステップの情報にアクセスして、ターンバイターン方式のナビゲーションをユーザーに提供します。
イベント ハンドラを実装するには、地図のビュー コントローラで GMSNavigatorListener
プロトコルを実装する必要があります。Navigation SDK for iOS でのイベント処理について詳しくは、ナビゲーション イベントをリッスンするをご覧ください。
DidChangeNavInfo イベントを処理する
didChangeNavInfo
イベントのリスナーを作成して、アプリにターンバイターンのサポートを追加します。イベント リスナーで次のクラスと列挙型を使用して、ターンバイターン ナビゲーションを制御します。
GMSNavigationNavInfo - ナビゲーションの状態に関する情報を定義するクラス。
GMSNavigationStepInfo - ナビゲーション ルートに沿った 1 つのステップに関する情報を定義するクラス。
GMSNavigationNavState - ナビゲーションの現在の状態(経路中、再ルーティング、停止など)を定義する列挙型。
GMSNavigationDrivingSide - このステップが右運転ルートか左運転ルートかを定義する列挙型。
GMSNavigationManeuver - 実行するナビゲーション アクション(左を向く、右を向くなど)を定義する列挙型です。
didChangeNavInfo
イベントのイベント リスナーの例を以下に示します。
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; ... } } ... }
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 ... } } } }
ナビゲーションの状態
GMSNavigationNavInfo の navState
プロパティを使用して、ナビゲーションの現在の状態(次のいずれか)を取得します。
Enroute -
GMSNavigationNavStateEnroute
状態は、ガイド付きナビゲーションが現在有効で、ユーザーが指定されたルート上にいることを意味します。現在予定されている操作ステップに関する情報を確認できます。再検索 -
GMSNavigationNavStateRerouting
は、ナビゲーションが進行中であるものの、ナビゲータが新しいルートを探していることを意味します。新しいルートがまだないため、次の運転ステップは使用できません。停止 -
GMSNavigationNavStateStopped
はナビゲーションが終了したことを意味します。たとえば、ユーザーがアプリ内でナビゲーションを終了すると、ナビゲーションは停止します。サンプルアプリでは、GMSNavigationNavStateStopped
状態によってナビゲーション情報の表示がクリアされ、残りのステップの指示が表示されなくなります。
操縦用のアイコンを作成する
GMSNavigationManeuver 列挙型は、ナビゲーション中に発生する可能性のある操作をそれぞれ定義します。特定のステップに対する操作は、GMSNavigationStepInfo の maneuver
プロパティから取得できます。
操作アイコンを作成し、関連する操作と組み合わせる必要があります。
一部の操作では、GMSNavigationManeuverDestinationLeft
や GMSNavigationManeuverDestinationRight
など、アイコンへの 1 対 1 のマッピングをセットアップできます。ただし、操作の中には他の操作と同じ特性を持つものもあるため、1 つのアイコンに複数の操作方法をマッピングしたほうがよい場合もあります。たとえば、GMSNavigationManeuverTurnLeft
と GMSNavigationManeuverOnRampLeft
はどちらも左左折アイコンにマッピングできます。
一部の操作には「時計回り」または「反時計回り」のラベルが追加されます。これは、SDK が国の運転側に基づいて判断します。たとえば、車が道路の左側を走行している国では、ドライバーはロータリー交差点や U ターンで時計回りに走行しますが、道路脇にある国では反時計回りに走行します。Navigation SDK は、左右のトラフィックのどちらで操作が発生したかを検出し、適切な操作を出力します。そのため、時計回りと反時計回りで操作アイコンが異なる場合があります。
開いて、さまざまな操作のアイコンの例を見る
サンプル アイコン | ターンバイターン方式 |
---|---|
DEPART UNKNOWN |
|
STRAIGHT ON_RAMP_UNSPECIFIED OFF_RAMP_UNSPECIFIED NAME_CHANGE
|
|
TURN_RIGHT ON_RAMP_RIGHT
|
|
TURN_LEFT ON_RAMP_LEFT
|
|
TURN_SLIGHT_RIGHT ON_RAMP_SLIGHT_RIGHT OFF_RAMP_SLIGHT_RIGHT
|
|
TURN_SLIGHT_LEFT ON_RAMP_SLIGHT_LEFT OFF_RAMP_SLIGHT_LEFT
|
|
TURN_SHARP_RIGHT ON_RAMP_SHARP_RIGHT OFF_RAMP_SHARP_RIGHT
|
|
TURN_SHARP_LEFT ON_RAMP_SHARP_LEFT OFF_RAMP_SHARP_LEFT
|
|
TURN_U_TURN_COUNTERCLOCKWISE ON_RAMP_U_TURN_COUNTERCLOCKWISE OFF_RAMP_U_TURN_COUNTERCLOCKWISE
|
|
TURN_U_TURN_CLOCKWISE ON_RAMP_U_TURN_CLOCKWISE OFF_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_RIGHT OFF_RAMP_RIGHT
|
|
MERGE_LEFT OFF_RAMP_LEFT
|
|
FORK_RIGHT TURN_KEEP_RIGHT ON_RAMP_KEEP_RIGHT OFF_RAMP_KEEP_RIGHT
|
|
FORK_LEFT TURN_KEEP_LEFT ON_RAMP_KEEP_LEFT OFF_RAMP_KEEP_LEFT
|
|
MERGE_UNSPECIFIED
|
|
DESTINATION
|
|
DESTINATION_RIGHT
|
|
DESTINATION_LEFT
|
|
FERRY_BOAT
|
|
FERRY_TRAIN
|