地図
iOS for SDK のコア機能 は、マッピングです。 このセクションで説明する主な概念には、 iOS アプリケーションへのマップの追加、マップによって表示される場所の変更、およびそのプロパティの変更が含まれます。 マッピング API の主なコンポーネントは NMAMapView
です。このコンポーネントは、 Cocoa Touch フレームワークと UIView
サブクラスとして統合されています。 NMAMapView
マップおよびさまざまなプロパティを表示するビューを表します。 NMAMapView
は iOS Cocoa Touch フレームワーク UIView
から派生したもので、その一部です。
マップをアプリケーションに統合する最初の手順は、 Interface Builder を使用して View Controller .xib
ファイルまたはアプリケーションのストーリーボードに NMAMapView
を挿入することです。 または NMAMapView
、次のようにプログラムで View Controller に追加することもできます。
- (void)viewDidLoad
{
mapView = [[NMAMapView alloc] initWithFrame:self.view.frame];
[self.view addSubview:mapView];
}
NMAMapView
このクラスは、すべてのユーザーの操作をタッチジェスチャの形式で処理します。 サポートされているジェスチャの種類の詳細については、「マップジェスチャ」セクションを参照してください。
GitHub でのマップレンダリングの例
この機能を示す例について は、 https://github.com/heremaps/ (Obj-C) および https://github.com/heremaps/ (Swift) を参照してください。
NMAMapView の操作
NMAMapView
が初期化されると、さまざまな方法で操作および操作できます。 の主な属性に NMAMapView
は、その向き、傾き、地理的中心 ()geoCenter
、およびズーム レベル () がありzoomLevel
ます。 これらのプロパティを使用 NMAMapView
して、表示をカスタマイズできます。 たとえば、カナダのバンクーバーのビューを表示する方法を次のコードで示します。
NMAGeoCoordinates *geoCoordCenter = [[NMAGeoCoordinates alloc]
initWithLatitude:49.260327 longitude:-123.115025];
[self.mapView setGeoCenter:geoCoordCenter withAnimation:NMAMapAnimationNone];
-
[NMAGeoCoordinates]
新しい地図センターの地理的な場所は(id)initWithLatitude:(double)aLatitude longitude:(double)aLongitude
、メソッドを呼び出すことによって作成されます。 - マップの中心を設定する場合、
NMAMapAnimationLinear
またはNMAMapAnimationBow
列挙型 (enum) 値をanimation
パラメータに渡すことで、トランジションをアニメーション化できます。NMAMapAnimationNone
値を使用してアニメーションを抑制することもできます。
これらのイベントの開始および終了は、 NMAMapView
デリゲートプロパティにオブジェクトを割り当てることによって監視できます。 オブジェクトは NMAMapViewDelegate
、受け取るイベントに対応するプロトコルのメソッドを実装する必要があります。 このデリゲートを使用 して、マップ オブジェクトの選択を検出することもできます。
地図投影モード
projectionType
プロパティを設定することで、メルカトル図法を使用するように変更できます。 例 : mapView.projectionType = NMAProjectionTypeMercator;
カスタムラスタタイルなどの特定の種類のマップ情報を予想どおりに表示する必要がある場合は、投影法モードを設定すると便利です。 ![]() | ![]() |
スナップショットをマップします
NMAMapView
このクラスは、マップのスナップショットを作成するためのクラスメソッドおよびインスタンスメソッドを提供します。 これらのメソッドを使用 すると、開発者は、 HERE SDK の最新データを使用する小さな静的マップ ( サムネイルなど ) を作成できます。 -
+(void)snapshotWithGeoCoordinates:(NMAGeoCoordinates*)coordinates zoomLevel:(float)zoom orientation:(float)orientation size:(CGSize)size block:(void (^)(UIImage *snapshot))resultBlock;
-
-(void)snapshotWithBlock:(void (^)(UIImage *snapshot))resultBlock;
NMAMapView のプロパティ
次の例は、の一部のプロパティの操作方法を示し NMAMapView
ています。
地図の中央
地図の中央によって、表示する地理的領域が決まります。 NMAMapView
geoCenter
プロパティを使用して読み取り、いずれかの setGeoCenter:
メソッドを使用して設定できます。 タイプはです NMAGeoCoordinates
。
// Move the map to London
NMAGeoCoordinates *geoCoordCenter = [[NMAGeoCoordinates alloc]
initWithLatitude:51.51 longitude:-0.11];
[self.mapView setGeoCenter:geoCoordCenter withAnimation:NMAMapAnimationNone];
ズーム レベル
地図に表示される地理的領域のサイズは、ズーム レベルを変更して制御できます。 ズーム レベルの範囲は NMAMapView::minimumZoomLevel
~ NMAMapViewMaximumZoomLevel
で、ズーム値が高いほど地面に近づきます。 次のコードでは、ズーム レベルを Median ズーム レベルに設定します。
// Set the zoom level to the median
mapView.zoomLevel =
(mapView.minimumZoomLevel + NMAMapViewMaximumZoomLevel)/2.0f;
NMAMapView::minimumZoomLevel
プロパティは、現在のマップおよび表示解像度などのデバイス表示パラメータに応じて、実効最小ズーム レベルを提供します。 これらのパラメータを考慮しない最小ズーム レベルを取得するに NMAMapViewMinimumZoomLevel
は、を使用します。 方向
表示方向によって、のどの基本方向がのどの画面方向に対応する NMAMapView
かが決まります。 有効な範囲は 0 ~ 360 度です。 デフォルト値の 0 を指定すると、真の北がビューの上端に向くようにマップの向きが変更されます。 次のコードは、南向きを南向きに設定する方法を示しています。
// Rotate by 180 degrees
mapView.orientation = 180;
傾斜
チルト値は、地図が表示されている角度を表します。 デフォルトでは、地図の傾きの値は 0 です。 これにより、地図の上下の 2 次元ビューが提供されます。 の tilt
プロパティを使用してチルト値を設定 NMAMapView
できますが、有効なチルト値の範囲は現在のズーム レベルに依存するため、この tilt
プロパティは画面で使用される前に変換されます。 maximumTiltProfile
のプロパティを使用 NMAMapView
して、ブロックを指定し、ズームレベルが最大チルトに与える影響を定義することもできます。
実際に使用されているチルト値を見つけるに clippedTilt
は、アクセサメソッドを呼び出します。 特定のズーム レベルのチルト制限を見つけるには、 minimumTiltAtZoomLevel:
メソッドおよび maximumTiltAtZoomLevel:
メソッドを呼び出します。
// Set the tilt to 45 degrees
mapView.tilt = 45;
アニメーション
で NMAMapView
は NMAMapAnimation
、 列挙型 (enum) によって定義されたプロパティの変更時に使用される次のアニメーション設定がサポートされています。
-
NMAMapAnimationNone
-
NMAMapAnimationLinear
-
NMAMapAnimationRocket
-
NMAMapAnimationBow
// Rotate by 90 degrees using a linear animation
[mapView setOrientation:90 withAnimation:NMAMapAnimationLinear];
// Move to London using bow animation
NMAGeoCoordinates *geoCoordCenter = [[NMAGeoCoordinates alloc]
initWithLatitude:51.51 longitude:-0.11];
[mapView setGeoCenter:geoCoordCenter withAnimation:NMAMapAnimationLinear];
複数の属性の設定
1 つ以上の属性を同時に変更する拡張 API が提供されます。
-(void) setGeoCenter:(NMAGeoCoordinates*) coordinates
zoomLevel:(float) level
orientation:(float) orientation
tilt:(float) tilt
withAnimation:(NMAMapAnimation) animation
マップ属性を変更しない場合 NMAMapViewPreserveValue
は、該当するメソッドパラメータに定数を渡します。
// Move to Vancouver using bow animation, zoom level 17, 180
// degree orientation and preserve tilt
NMAGeoCoordinates* coord = [[NMAGeoCoordinates alloc]
initWithLatitude:49.1
longitude:123.0];
[mapView setGeoCenter:coord
zoomLevel:17.0f
orientation:180
tilt:NMAMapViewPreserveValue
withAnimation:NMAMapAnimationBow];
イベントブロックをマップします
マップイベントブロックを使用すると、マップイベントのカスタム処理を簡単かつ多用途に追加できます。 このメカニズムを使用すると、特定のマップイベントが発生したときにアプリケーションで任意のコードを実行できます。 アプリケーションでは、を使用してこのコードを定義でき NMAMapEventBlock
ます。 各ブロックは、 1 つ以上のイベントに応答するように登録できます。また、特定のイベントタイプへの応答を継続するかどうかを動的に制御できます。
NMAMapViewDelegate
コールバックと重複している可能性があります。 このような状況で NMAMapEventBlock
は、を使用してカスタムのマップイベント処理を実装することをお勧めします。 NMAMapEvent
列挙型 (enum) で表され、次のものが含まれます。 -
geoCenter
が変更されました -
zoomLevel
が変更されました -
orientation
が変更されました -
tilt
が変更されました - ジェスチャーが開始されました
- ジェスチャーが終了しました
- アニメーションが開始されました
- アニメーションが終了しました
- 変革が開始されました
- 変換が終了しました
変換とは、ユーザーまたはアプリケーションが変更を行ったかどうかにかかわらず、地図のジオエンター、ズーム レベル、方向、およびチルトの値に対する変更を指します。 1 つの変換開始イベントと変換終了イベントのセットの間に、アニメーション、ジェスチャなど、さまざまなソースからの複数の変換が存在する場合があります。 たとえば、アプリケーションがマップのアニメーションをトリガーし、マップが静止状態の場合、 NMAMapEventTransformationBegan
NMAMapEventAnimationBegan
イベントが発生します。 ユーザーがアニメーションが完了する前にジェスチャを実行すると、 NMAMapEventAnimationEnded
NMAMapEventGestureBegan
イベントが発生します。 最後に、ユーザーがジェスチャを終了すると、 NMAMapEventGestureEnded
NMAMapEventTransformationEnded
イベントが発生します。
マップイベントブロックを登録するに respondToEvents:withBlock:
は、メソッドを使用して、ブロックが応答するイベントを設定します。 たとえば、地図のジェスチャまたはアニメーションがあるときにオーバーレイを非表示にするには、次のようにします。
[_mapView respondToEvents:(NMAMapEventGestureBegan | NMAMapEventAnimationBegan) withBlock:^(NMAMapEvent event, NMAMapView *mapView, id eventData) {
// _myOverlay is an informative overlay on the map
_myOverlay.hidden = YES;
return YES;
}];
[_mapView respondToEvents:(NMAMapEventGestureEnded | NMAMapEventAnimationEnded) withBlock:^(NMAMapEvent event, NMAMapView *mapView, id eventData) {
// _myOverlay is an informative overlay on the map
_myOverlay.hidden = NO;
return YES;
}];
イベントブロックが戻ると YES
、関連するイベントがトリガーされたときにイベントブロックが引き続き実行されます。 イベントブロックが戻ると NO
、その特定のトリガーイベントのイベントブロックが削除されます。 ( 同じブロックが他のイベントタイプにも登録されている場合は、それらのイベントに応答します ) 。 たとえば、次のコードでは、現在のアニメーションが終了したときに 1 回限りのアクションを実行します。
[_mapView respondToEvents:NMAMapEventAnimationEnded withBlock:^(NMAMapEvent event, NMAMapView *mapView, id eventData) {
// Do something...
return NO; // This block will be removed after being called once
}];
respondToEvents:withBlock:
メソッドは、登録されているブロックを識別する一意の整数値を返します。 ブロックの登録を解除するに removeEventBlockWithIdentifier:
は、この整数値でを呼び出します。
self
れます。 ブロック内の厳密に参照されているすべてのオブジェクトが、そのブロック内に存在する限り存続するようにしてください。存在しない場合は、弱い参照を使用してください。 地図表示レイヤー
道路ラベルや公園名などの地図情報は、表示レイヤーにグループ化されます。 これらのレイヤーはカテゴリとしてグループ化 NMAMapLayerCategory
され、列挙体で表されます。 デフォルト NMAMapView
では、すべてのレイヤーがマップ ビューに表示されるように設定されています。また、次の方法を使用して、非表示にするかどうかを制御できます。
-
isMapLayerCategoryVisible:
- マップレイヤーのカテゴリが表示されているかどうかを確認します -
setVisibility:forMapLayerCategories:
- マップレイヤーの指定したカテゴリを表示するかどうかを設定します -
visibleMapLayerCategories
-NSArray
マップレイヤーの現在表示されているカテゴリを表すを取得します
地図表示レイヤーカテゴリの全リストについて NMAMapLayerCategory
は、 API リファレンス for を参照してください。
場所のカテゴリ
NMAMapView
地図上の場所のカテゴリを表示または非表示にするには、次の方法を使用します。 場所のカテゴリは NMAMapPoiCategory
列挙型 (enum) で表されます。 -
poiCategories
- すべてのプレースカテゴリの名前を取得します -
setVisibility:forPoiCategory:
- 場所のカテゴリを表示するかどうかを設定します -
isPoiCategoryVisible:
- 場所のカテゴリが表示されているかどうかを確認します
[mapview setVisibility:NO forPoiCategory:NMAMapPoiCategoryPetrolStation];
歩行者機能
デフォルト NMAMapView
では、歩行者アクセス機能(階段やエスカレーターなど)を示すアイコンはに表示されません。 マップ ビューに歩行者機能を表示するには、 NMAMapPedestrianFeatureType
必要に応じて showPedestrianFeature:pedestrianFeature
メソッドを呼び出します。 同様 hidePedestrianFeature:pedestrianFeature
に、メソッドを呼び出して徒歩機能を非表示にできます。 機能タイプが有効になっているかどうかを確認するに isPedestrianFeatureShown:pedestrianFeature
は、メソッドを呼び出します。

割り込み処理
デフォルト NMAMapView
では、 Control Center メニューの表示中やシステム通知の受信中など、アプリケーションがアクティブ状態でなくなったときにマップのレンダリングを一時停止します。 pauseOnWillResignActive
この動作を無効にするには、プロパティをに設定し NO
ます。 自動一時停止が無効になっている場合、アプリケーションは、 renderAllowed
プロパティを NO
に設定して、バックグラウンドに移動したときにマップ ビューレンダリングを手動で一時停止する必要があります。
applicationDidEnterBackground
メソッドから戻る前に、レンダリングを一時停止する必要 UIApplicationDelegate
があります。 このセクションで紹介およびデモンストレーションされた API の詳細については、 API リファレンス のドキュメントを参照してください。