基本的なポジショニング
NMAPositioningManager
インターフェイスを使用するアプリケーションが必要です。 位置の更新または位置不明の通知を受信するには、アプリケーションで次の場所 NMAPositioningManager.h
にある通知名 NSNotificationCenter addObserver
を使用する必要があります。 -
NMAPositioningManagerDidUpdatePositionNotification
-
NMAPositioningManagerDidLosePositionNotification
ユーザーの現在の位置は NMAPositionIndicator
、クラスを使用して簡単に地図に表示できます。 の各インスタンス NMAMapView
が positionIndicator
、プロパティを介してアクセスされるこのクラスのインスタンスを所有しています。
NMAPositioningManager
この NMAPositioningManager
クラスは、現在の位置や平均速度など、デバイスの地理的位置に関する情報を提供します。 NMAPositioningManager
はシングルトンクラスであるため、 sharedPositioningManager
クラスメソッドを使用してのみアクセスできます。
位置の更新を受け取るに NMAPositioningManager
は、オブジェクトが通知にサブスクライブする必要があります。 通知の更新頻度は dataSource
、プロパティで設定されているデータソースに従って制御できます。 デフォルトでは、 dataSource
は、以下の便利な NMADevicePositioningMethod
オプションのいずれかを使用して、デバイスの更新頻度を設定する NMADevicePositionSource
インスタンスです。
-
NMADevicePositioningMethodGPS
- 場所が変更されたときに、標準の位置更新を送信します。 これらの更新プログラムは、 iOS API によって提供CLLocationManager startUpdatingLocation
されます。 -
NMADevicePositioningMethodSignificantChanges
- ユーザーが長距離を移動した場合にのみ、位置の更新を送信します。 これらの更新プログラムは、 iOS API によって提供CLLocationManager startMonitoringSignificantLocationChanges
されます。 電力を節約する場合は、このオプションを使用します。
CLLocationManager
がユーザーの場所に正しくアクセスできるように、 NSLocationWhenInUseUsageDescription
をプロジェクト Info.plist
に追加します。 このキーの値は、システムが位置情報サービスを使用する権限を要求したときにユーザーに表示されます。 推奨される文字列については、アプリ送信要件を参照してください。 dataSource
を NMADevicePositionSource
に設定する以外に、 NMAPositionDataSource
プロトコルに準拠したカスタムデータソースに設定することもできます。 詳細については NMAPositionDataSource
、 API リファレンス を参照してください。 リアルタイムの位置更新の受信を開始するに NMAPositioningManager startPositioning
NMADevicePositioningMethodGPS
は、アプリケーションがを呼び出して、がデフォルトの更新メカニズムとして使用する必要があります。 BOOL
このメソッドは、配置が正常に開始されたかどうかを示す値を返します。
位置の更新を受信している間 NMAPositioningManager currentPosition
、アプリケーションはプロパティを介してクライアントデバイスの現在の位置を取得できます。 この現在の位置は rawPosition
、 mapMatchedPosition
現在の状況では修正されている可能性が高いかどうかに応じて、またはプロパティと同じです。 rawPosition
は、 HERE SDK エンジンによって変更されていない現在のデータソースの位置の値です。 While mapMatchedPosition
は mapMatchMode
、最寄りの自動車または徒歩道路と一致する位置データの値です(プロパティによって異なります)。 ポジショニングマネージャーがアクティブでないか、または位置が無効な場合は、 currentPosition
メソッド nil
が戻ります。
mapMatchingEnabled
をYES
に設定して手動で有効にすることもできます。 マップの一致が無効になると、 mapMatchedPosition
元の位置 nil
に戻り、 currentPosition
元の位置を返します。 アプリケーションで位置の更新が不要になった場合は、 stopPositioning
を呼び出して NMAPositioningManager
に通知する必要があります。 NMAPositionIndicator
位置の更新を必要とする他の SDK サービス ( など ) が使用されていない場合、位置の更新が停止されます。
NMAPositioningManager 通知
NMAPositioningManager
この通知を使用して、位置決めメカニズム( GPS など)によって決定されたクライアントデバイスの位置更新を追跡できます。 これらの通知を登録または登録解除するには、次の方法を使用します。
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(methodName)
name:NMAPositioningManagerDidUpdatePositionNotification
object:[NMAPositioningManager sharedPositioningManager]];
[[NSNotificationCenter defaultCenter] removeObserver:self
name:NMAPositioningManagerDidUpdatePositionNotification
object:[NMAPositioningManager sharedPositioningManager]];
アプリケーションは、次の 2 種類の通知を登録できます。
-
NMAPositioningManagerDidUpdatePositionNotification
-
NMAPositioningManagerDidLosePositionNotification
NSNotificationCenter
オブジェクトが同じ通知に登録できる回数に制限はありません。 同じオブジェクトを通知に複数回登録しないように注意してください。 それ以外の場合、オブジェクトは重複した通知を受信します。 でこれらの通知を登録して処理する例を次に示し UIViewController
ます。
// Start positioning and register for position update notifications
- (void)viewDidLoad
{
...
if ([[NMAPositioningManager sharedPositioningManager] startPositioning]) {
// Register to positioning manager notifications
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(positionDidUpdate) name:NMAPositioningManagerDidUpdatePositionNotification
object:[NMAPositioningManager sharedPositioningManager]];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(didLosePosition) name: NMAPositioningManagerDidLosePositionNotification
object:[NMAPositioningManager sharedPositioningManager]];
}
...
}
// Handle NMAPositioningManagerDidUpdatePositionNotification
- (void)positionDidUpdate
{
NMAGeoPosition *position = [[NMAPositioningManager sharedPositioningManager] currentPosition];
[_mapView setGeoCenter:position.coordinates
withAnimation:NMAMapAnimationLinear];
}
// Handle NMAPositioningManagerDidLosePositionNotification
- (void)didLosePosition
{
...
}
アプリケーションがバックグラウンドにあるときに不要な位置の更新を避ける UIApplicationDelegate
ために、プロトコルコールバックを使用して、アプリケーションがフォアグラウンドに戻るときに位置の配置を停止し、再起動できます。
次のコード スニペットでは、通知の位置決めを停止し、登録を解除する方法について説明します。
- (void)viewWillDisappear:(BOOL)animated
{
[[NMAPositioningManager sharedPositioningManager] stopPositioning];
[[NSNotificationCenter defaultCenter] removeObserver:self
name:NMAPositioningManagerDidUpdatePositionNotification
object:[NMAPositioningManager sharedPositioningManager]];
[[NSNotificationCenter defaultCenter] removeObserver:self
name:NMAPositioningManagerDidLosePositionNotification
object:[NMAPositioningManager sharedPositioningManager]];
}
NMAPositioningManager
、アクティブなナビゲーションセッションがない限り、はアプリケーションがバックグラウンドにあるときに更新を提供しません。 この動作を上書きするには、を呼び出し setBackgroundUpdatesEnabled:YES
ます NMAPositionDataSource
。 位置シミュレーション
HERE SDK には、 NMALoggedPositionSource
と NMARoutePositionSource
という 2 つのクラスがあります。これらのクラスを使用して、アプリケーション内での位置の更新をシミュレートできます。 これらのクラスは NMAPositionDataSource
プロトコルを実装します。これらのクラスを使用するには、インスタンスを作成して設定し、 NMAPositioningManager
の dataSource
プロパティに割り当てる必要があります。 一度に使用できる位置データソースは 1 つだけです。
NMALoggedPositionSource
このクラスは、ログファイルから位置データを提供します。 現在、 GPX ファイル形式がサポートされています。 ログファイルに一覧表示されている位置は、ログの末尾に達するまで 1 つずつ処理されます。 stationary
プロパティ positionLost
は、ログに記録されたパスに沿った移動の停止をシミュレートし、プロパティは位置データの損失をシミュレートします。
NMARoutePositionSource
このクラスは、計算されたからの位置データを提供 NMARoute
します。 更新は、 updateInterval
プロパティで制御された頻度で、ルートの最初から最後まで生成されます。 シミュレートされた走行速度は movementSpeed
、プロパティを使用して設定されます。 停止位置と停止位置は、 stationary
プロパティと positionLost
プロパティでそれぞれシミュレートされます。
NMALoggedPositionSource
屋内でのポジショニングはサポートされていません。 位置ログを作成しています
HERE SDK を使用して、NMALoggedPositionSource
で再生できる GPX ログを作成することもできます。 これを行うには、 NMAPositionManager
の logType
プロパティを、現在のデータソースから受信した位置をログに記録する必要があることを示す値 NMAPositionLogTypeDataSource
に設定します。 GPX ログは Documents
、アプリケーションのフォルダに作成されます。 位置ログを無効にするには NMAPositionLogType
、をに設定 NMAPositionLogTypeNone
します。
NMAPositionIndicator
NMAPositionIndicator
このクラスを使用すると、によって報告さ NMAPositioningManager
れたとおりにユーザーの現在の場所をマークするマップ オブジェクトを簡単に追加できます。 位置インジケータを設定して、未加工、マップマッチング、または現在の位置 ( 未加工の位置またはマップマッチングの間で自動的に選択される位置 ) を表示できます。 位置インジケータは、半透明の円の中に円形のオブジェクトとしてレンダリングされます。この円の直径は、示されている位置の精度を示します。 マップオブジェクトのタイプ NMAPositionIndicator
は NMAMapMarker
、、 NMAMapLocalModel
、およびのカスタマイズに使用NMAMapCircle
できます。

各 NMAMapView
インスタンスには、 NMAMapView positionIndicator
プロパティからアクセスできる NMAPositionIndicator
インスタンスがあります。 によって表示されるマップ オブジェクト NMAPositionIndicator
は displayObject
、そのプロパティで変更 visible
でき、インジケータはそのプロパティで表示または非表示にできます。
tracksCourse
プロパティを使用して、位置インジケーターを現在の移動方向に自動的に向けるかどうかを制御できます。 有効にする と、 HERE SDK がpositionIndicator
を回転させて、車両が走行している方向に合わせる。 つまり、車両がアイドル状態の場合、変更はありません。 代わり に、位置インジケータがデバイスのコンパス方向を指すようにする必要がある場合は、 CLLocationManagerDelegate を使用します。 orientationOffset
ポジションインジケータのヨーが車両の動きに基づいて変更された場合にのみ適用されることに注意してください。
精度の円の色、 accuracyIndicatorColor
および accuracyIndicatorVisible
プロパティを使用して表示するかどうかをカスタマイズできます。
// Display position indicator
mapView.positionIndicator.visible = YES;
NMAPositionIndicator
表示に設定 NMAPositioningManager
すると、更新が自動的に有効になります。 位置インジケーターを地図の中央に置き、デバイス位置のリアルタイムの更新を表示するには、新しい位置更新を受信するたびに地図センターを更新する必要があります。 この方法で頻繁に地図を再描画すると、デバイスのバッテリー寿命が節約されることに注意してください。 リアルタイムの更新を実行する際に、バッテリーの消費電力が及ぼす影響に注意してください。 次のコードを使用して、位置の更新を受信したときに地図の位置を更新できます。
- (void)positionDidUpdate
{
NMAGeoPosition *position = [[NMAPositioningManager sharedPositioningManager] currentPosition];
[_mapView setGeoCenter:position.coordinates
withAnimation:NMAMapAnimationLinear];
}
このセクションで紹介およびデモンストレーションされたクラスの詳細については 、 API リファレンス のドキュメントを参照してください。