ターンバイターン データフィードは、地図ベースのナビゲーション ガイダンス用に設計されていないデバイスに、ナビゲーション専用情報を提供します。指定した要素を使用して、今後の操作を指定します。
- アイコン(左折、右折、U ターン)
- ロータリーの交差点の番号
- 道路名
- 次のナビゲーション ステップまたは最終目的地までの推定距離と推定時間
ターンバイターン フィードを使用すると、小画面ディスプレイなど、Navigation SDK の完全な UI が適切でないエクスペリエンスを作成できます。たとえば、2 輪車の運転手向けに、ナビゲーションのみのガイダンスを投影して、気を散らすことなく、より速く、より確実に目的地に到着できるようにすることができます。
必須のナビゲーション表示要素
各ナビゲーション ステップの主なフィールドは、道路のフルネーム、操作、ステップの合計距離です。これらは 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
状態によりナビゲーション情報の表示が消去され、残りの手順が表示されないようにします。
車線案内
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];