ターンバイターン方式のデータフィードを有効にする

ターンバイターン方式のデータフィードは、地図ベースのナビゲーション ガイダンス用に設計されていないデバイスに、ナビゲーションのみの情報を提供します。次の要素を使用して今後の操作を提供します。

  • アイコン(左、右、U ターン)
  • ロータリーで番号を曲がる
  • 道路名
  • 次のナビゲーションステップや最終目的地までの推定距離と時間

ターンバイターン フィードを使用すると、完全な Navigation SDK UI が適さないエクスペリエンス(小さな画面ディスプレイなど)を作成できます。たとえば、二輪車のライダーの場合に、ナビゲーションのみの案内を投影して、気を散らすことなくすばやく自信を持って目的地に到着できるようサポートできます。

重要なナビゲーション表示要素

W Ahwanee Ave まで 100 フィート先で左左折すると表示されるモバイル画面。画面下部で、目的地までの残り時間は 46 分、残り距離は 39 マイルです。

各ナビゲーション ステップの主なフィールドは、道路名、操作手順、ステップの合計距離です。これらの情報は 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
          ...
        }
      }
    }
  }

GMSNavigationNavInfonavState プロパティを使用して、ナビゲーションの現在の状態(次のいずれか)を取得します。

  • Enroute - GMSNavigationNavStateEnroute 状態は、ガイド付きナビゲーションが現在有効で、ユーザーが指定されたルート上にいることを意味します。現在予定されている操作ステップに関する情報を確認できます。

  • 再検索 - GMSNavigationNavStateRerouting は、ナビゲーションが進行中であるものの、ナビゲータが新しいルートを探していることを意味します。新しいルートがまだないため、次の運転ステップは使用できません。

  • 停止 - GMSNavigationNavStateStopped はナビゲーションが終了したことを意味します。たとえば、ユーザーがアプリ内でナビゲーションを終了すると、ナビゲーションは停止します。サンプルアプリでは、GMSNavigationNavStateStopped 状態によってナビゲーション情報の表示がクリアされ、残りのステップの指示が表示されなくなります。

操縦用のアイコンを作成する

GMSNavigationManeuver 列挙型は、ナビゲーション中に発生する可能性のある操作をそれぞれ定義します。特定のステップに対する操作は、GMSNavigationStepInfomaneuver プロパティから取得できます。

操作アイコンを作成し、関連する操作と組み合わせる必要があります。 一部の操作では、GMSNavigationManeuverDestinationLeftGMSNavigationManeuverDestinationRight など、アイコンへの 1 対 1 のマッピングをセットアップできます。ただし、操作の中には他の操作と同じ特性を持つものもあるため、1 つのアイコンに複数の操作方法をマッピングしたほうがよい場合もあります。たとえば、GMSNavigationManeuverTurnLeftGMSNavigationManeuverOnRampLeft はどちらも左左折アイコンにマッピングできます。

一部の操作には「時計回り」または「反時計回り」のラベルが追加されます。これは、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