ターンバイターン方式のデータフィードの詳細

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

  • アイコン(左折、右折、U ターン)
  • ラウンドアバウトでの曲がり角の番号
  • 道路名
  • 次のナビゲーション ステップまたは最終目的地までの推定距離と時間

ターンバイターン フィードを使用すると、Navigation SDK の UI 全体を表示するのが適切でない場合(画面が小さい場合など)に、適切なエクスペリエンスを作成できます。たとえば、二輪車のライダー向けに、ナビゲーションのみのガイダンスを投影して、気を散らすことなく、より迅速かつ確実に目的地に到着できるようにすることができます。

ナビゲーション表示の必須要素

50 フィート先で Church Street に右折することを示すモバイル画面。画面の下部には、目的地までの残り時間が 13 分、残りの距離が 2.1 マイルと表示されています。

各ナビゲーション ステップの主なフィールドは、道路の正式名称、操作、ステップの合計距離です。これらは 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 プロパティを使用して、ナビゲーションの現在の状態を取得します。状態は次のいずれかです。

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

  • ルート変更 - GMSNavigationNavStateRerouting は、ナビゲーションが進行中ですが、ナビゲーターが新しいルートを探していることを意味します。新しいルートがまだないため、次の操作ステップは利用できません。

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

車線案内

Navigation SDK では、ナビゲーション ターンカードの車線が GMSNavigationLane データ オブジェクトと GMSNavigationLaneDirection データ オブジェクトとして表されます。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 列挙型は、ナビゲーション中に発生する可能性のある各操作を定義します。特定のステップの操作は、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

生成されたアイコンを使用する

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];