マップを使用
HERE SDK for iOS の主要なフィーチャーの 1 つ がマッピングです。マッピングには、マップ ビューの追加、マップに表示される場所の変更、およびそのプロパティの変更が含まれます。 マッピング API の主なコンポーネントはマップ ビュー UIView
です。このコンポーネントはサブクラスとして統合されています。 マップ ビューは 、 マップおよびさまざまなプロパティを表示するためのベクトルベースのビューを表します。
HERE Map Data は 毎週更新 され、常に最新のマップ データを利用できるようになっています。 マップ ビューを統合することで、このメリットを自動的に享受できます。
注
簡単なマップアプリケーションを作成する場合 は、利用開始の項を参照してください。
マップとそのプロパティを操作するには、まず [ カメラ ] セクションを確認することをお勧めします。 その他のフィーチャー :
- 一般的なマップジェスチャや、パニングや回転などのデフォルトのマップビヘイビアーを処理するためのマップジェスチャ。
- サテライトと通常のマップ レイヤーなどの既定のマップスタイルを瞬時に切り替えるマップスキーム。 利用可能なマップスキームの詳細については、以下を参照してください。
- マップ アイテムを使用してオブジェクトや図形をマップ上に配置し、それらを操作します。
- カスタムサーバーイメージを追加のマップ レイヤーとして表示する カスタムラスタータイル。
- カスタムマップスキームを読み込むカスタムマップスタイル。
デフォルトでは、MapView
は 60 フレーム / 秒( FPS )でレンダリングされます。 mapView.frameRate
最大フレームレートを使用して調整できます。たとえば、ローエンドデバイスでの CPU/GPU の使用量を削減できます。 FPS を 0 に設定することで、自動レンダリングサイクルを非アクティブ化することもできます。 負の値を設定しても効果はありません。 この値は、アプリに複数のMapView
が含まれている場合に、インスタンスごとのMapView
に個別に設定できます。
別 のオプションとして、レンダリングする要素が少ないカスタムマップスタイルを使用することもできます。
HERE SDK フレームワークのサイズを縮小するため に、未使用のフォントはアプリケーションを使用する前に削除できます。
マップスキームを読み込み
HERE SDK では、いくつかの事前設定済みのマップスキーム
-
liteDay
: 簡易版の Lite Hybrid マップ スキーム。 normalDay
のマップ要素が少なく、カラーパレットが限定されています。 -
liteNight
: 簡易版の Lite Hybrid マップ スキーム。 normalNight
のマップ要素が少なく、カラーパレットが限定されています。 -
liteHybridDay
: 簡易版の Lite Hybrid マップ スキーム。hybridDay
のマップ要素が少なく、カラーパレットが限定されています。 -
liteHybridNight
: 簡易版の Lite Hybrid マップ スキーム。 hybridNight
のマップ要素が少なく、カラーパレットが限定されています。 -
normalDay
: 昼間の使用に適したロスレスのスケーラブルなベクターベースのビューを表します。 マップ。 -
normalNight
: 夜間使用のためのロスレスでスケーラブルなベクターベースのビューを表します。 マップ。 -
hybridDay
: 衛星の画像と、ベクターストリートネットワーク、マップラベル、 POI 情報を組み合わせたハイブリッド方式の昼間バージョン。 -
hybridNight
: 衛星の画像と、ベクターストリートネットワーク、マップラベル、 POI 情報を組み合わせたハイブリッド方式の夜間バージョン。 -
satellite
: さまざまなズームステージの衛星画像を表示するビットマップベースのマップ。 -
logisticsDay
: 運行管理管理コンテンツに重点を置いた Day バージョンのマップ スキーム。
衛星画像を除き、独自のマップスタイルを完全にカスタマイズすることもできます。
マップ スキームをロードするには、次のコード スニペットを使用します。
let mapScheme = MapScheme.normalDay;
mapView.mapScene.loadScene(mapScheme: mapScheme, completion: onLoadScene)
...
private func onLoadScene(mapError: MapError?) {
guard mapError == nil else {
print("Error: Map scene not loaded, \(String(describing: mapError))")
return
}
}
周囲の光が明るい日中は、 dayのバリエーションを使用することをお勧めします。 night
バリアントは、軽量化されている場合の使用に合わせて最適化されています。 たとえば、ドライバーがトンネルを通過するときに、アプリケーションが昼間から夜間のスキームに切り替わる場合があります。Navigate Edition 使用している場合は、変更された道路属性について通知を受け、トンネルを通過するときに通知を受け取ることができます。 これにより、アプリケーションがマップ スキームをその場で切り替えることができます。 この問題は自動的には発生しません。
HERE SDK は、昼間モードと夜間モードを切り替える現在の時刻を自動的に検出するわけではありません。 アプリケーションは、ユーザーの設定に基づいて、またはデバイスのクロックを確認することによって、この処理を行うことができます。
左から右へ : MapScheme.normalDay 、 MapScheme.normalNight 、 MapScheme.hybridDay 、 MapScheme.hybridNight 利用可能なマップスタイルが最適化され、視覚的な干渉なしにコンテンツやオーバーレイをベース マップに簡単に追加できます。 マップの配色はあまりカラフルではありません。また、色覚異常が発生した場合でも読みやすさを最大限に高めるために、クリーンで中立的な色調をサポートしています。
- 街路網はグレーのスケールで設計され、明るさ、コントラスト、幅を階層構造で提供します。
- 全体的に明るい色使いでまとめられている。
- キーの色は、グレー、ブルー、グリーン、ホワイトです。
さらに、 HERE SDK では 、 ラベルを含まない衛星スキームを提供しています。
MapScheme.satellite マップレイヤーをマップフィーチャーとして追加
HERE SDK では、マップスキームに加え て、特定の種類のレイヤを追加できます。これをマップフィーチャーと呼びます。このレイヤには、現在のトラフィックフローなどの追加情報が表示されます。 以下に、このようなレイヤーを有効にする方法を示します。
mapView.mapScene.enableFeatures([MapFeatures.trafficFlow : MapFeatureModes.trafficFlowWithFreeFlow])
mapView.mapScene.enableFeatures([MapFeatures.trafficIncidents : MapFeatureModes.defaultMode])
mapView.mapScene.enableFeatures([MapFeatures.safetyCameras : MapFeatureModes.defaultMode])
mapView.mapScene.enableFeatures([MapFeatures.vehicleRestrictions : MapFeatureModes.defaultMode])
mapView.mapScene.enableFeatures([MapFeatures.terrain : MapFeatureModes.defaultMode])
mapView.mapScene.enableFeatures([MapFeatures.landmarks : MapFeatureModes.landmarksTextured])
mapView.mapScene.enableFeatures([MapFeatures.extrudedBuildings : MapFeatureModes.defaultMode])
mapView.mapScene.enableFeatures([MapFeatures.buildingFootprints : MapFeatureModes.defaultMode])
mapView.mapScene.enableFeatures([MapFeatures.roadExitLabels : MapFeatureModes.roadExitLabelsAll])
同様に、以下のようにレイヤーのリストを無効にすることもできます。
mapView.mapScene.disableFeatures([MapFeatures.trafficFlow, MapFeatures.trafficIncidents])
すべてのエディションですべてのフィーチャーのレイヤーを利用できるわけではありません。 API リファレンス で サポートされているレイヤーを確認してください。 レイヤーを追加すると、ローエンドデバイスのパフォーマンスへの影響が最小限に抑えられることに注意してください。
以下に、サポートされているすべてのマップレイヤーのスクリーンショットを示します。
交通渋滞レイヤーには、道路での交通渋滞が表示されます。 | 交通障害マップ レイヤー には、事故、建設工事などの事故が表示されます。 | スピードカメラマップ レイヤー にスピード警告カメラが表示されます。 | 車両制限マップ レイヤー には、トラック固有の情報が表示されます。 | Terrain マップ レイヤー (地形)に丘のシェーディングが表示されます。 |
3D ランドマークマップ レイヤー は、テクスチャード加工のランドマークを示しています | 押し出された Buildings マップ レイヤー には、建物の 3D 表現が表示されます。 | Buildingフットプリントマップ レイヤー には、建物の 2D フットプリントが表示されます。 | Buildingおよびフットプリントのマップレイヤーは、既定で有効になっています。 これは、無効化されたときの状態です。 |
一部のレイヤーでは、MapContentSettings
を使用して表示されたコンテンツをフィルタリングできます
-
MapFeatures.trafficIncidents
: filterTrafficIncidents(trafficIncidents: [TrafficIncidentType])
表示されている交通障害をフィルタリングするために使用します。 -
MapFeatures.vehicleRestrictions
: filterVehicleRestrictions(truckSpecifications: TruckSpecifications, hazardousMaterials: [HazardousMaterial], tunnelCategory: TunnelCategory)
表示されているトラック制限をフィルタリングするために使用します。
注 : マップレイヤー buildingFootprints
& extrudedBuildings
は、MapView
でデフォルトで有効になっています。
埋め込み POI
当然のことながら、マップには、レストラン、公共交通機関、その他の一般的な名所を表すアイコンがデフォルトでいくつか表示されています。 これらの POI は Carto POI と呼ば れ、ユーザーが選択して詳細情報を取得できます。 これらの埋め込み POI の可視性を制御することもできます。
詳細については、マップアイテムのセクションを参照してください。
未使用のフォントファイルの削除
HERE SDK には、サポートされているすべての言語のマップラベルをレンダリングするためのフォントファイルが複数含まれています。 アプリ 全体のサイズを最適化する場合は、選択したフォントを削除できます。
たとえば DroidSansFallback
、フォントでは、共有の Unicode コードポイントに簡体字中国語の表意文字が使用されます。
このフォントを削除するには 、ファイルheresdk.framework
を開き、次のファイルを削除します。
geoviz/DroidSansFallback.ttf
別の例として、日本語文字の完全なセットをレンダリングする必要がない場合は、次を削除できます。
geoviz/NotoSansJP-Regular.otf
注
フォントを削除する場合は、マップの言語を削除したフォント以外の言語に切り替えることをお勧めします。 マップラベルを表示するには、少なくとも 1 つのフォントを残す必要があります。 削除されたフォントの言語でラベルを表示する必要があるたびに、欠落している文字ごとにエラーメッセージが記録されます。
フォントファイルのサイズは、数百キロバイトから数メガバイトの範囲になることがあります。 選択したフォントを削除すると、アプリケーションがデバイスにインストールされたときに消費されるスペースが少なくなります。 これらの手順で節約できる最大容量は約 11 MB です。
マップ言語の設定
マップで使用する言語をカスタマイズして、道路、都市、その他のマップ データのラベルを表示できます。 既定では、リージョンのローカル言語が使用されます。
MapView.primaryLanguage = languageCode
を呼び出して世界の言語を設定するか、nil
を呼び出してデフォルトの動作に戻します。これ MapView
により、のすべてのインスタンスの言語が設定されます。 言語が世界のどのリージョンでもサポートされていない場合は、そのリージョンのローカル言語が代わりに表示されます。
地政学的見解
HERE SDK では、複数の地理的な政治的見解および異議を申し立てた境界をサポートしており、国際ビュー(デフォルト)またはローカルの国ビューに基づいてマップの境界を表示します。 ローカルビューは、 2 つ以上の政治組織(通常は国)が国境および所有権または支配権を主張する場合に、マップ上の特定の領域にのみ影響を与えます。
SDKOptions
経由でアクセスできる politicalView
メンバーの 3 文字の言語コードを設定することで、デフォルトの地政学的ビューを変更できます。サポートされている国コードは、カバレッジページからアクセスできます。
設定すると、マップ ビューには設定されている国の地政学的見解に従ってすべての国の境界が表示され、MapView
にはそれに応じて国境が表示されます。
このフィーチャはベータ版としてリリースされています。
実行時に地政学的ビューを変更する場合は、次のコード スニペット を使用します。
SDKCache.fromEngine(SDKNativeEngine.sharedInstance!).clearCache { (error) in
if error == nil {
}
}
var options: SDKOptions? = SDKNativeEngine.sharedInstance?.options
options?.politicalView = "ARG"
新しいオプションを設定するには、新しい共有インスタンスを作成する必要もあるため、進行中の HERE SDK 操作ではこのオプションを呼び出さないでください。 理想 的には、アプリのライフサイクル中に HERE SDK を初めて初期化する前に、オプションとpoliticalView
を 1 回のみ設定します。
マップ データの可用性
デフォルトでは、日本、中国、韓国などの世界の一部のリージョンには、限定的なマップ データ が含まれています。 マップ データ の全てのフィーチャにアクセスするには、HERE の担当者に連絡してください。
HERE SDK では、すべての種類のデータがマップタイルに保存されます。 これには、マップ ビュー でのレンダリングの目的で必要なデータが含まれている場合がありますが、これに限定されるものではありません。 たとえば、マップタイルには、マップ ビュー には表示されないが、ターン・バイ・ターンナビ (矢印ナビ) などの他の目的で必要な場所または道路の属性に関するデータも含まれています。
マップ タイル に保存されている情報は、交通情報やランドマークなどの個別のトピックの情報を保持する複数のレイヤーに分類されます。
- Navigate Edition では、フードの下で 最適化されたクライアントマップ (OCM) カタログ形式を使用して、コンパクトで高速かつ柔軟なマップを提供しています。 OCM カタログは、 HERE Map Content ( HMC )からコンパイルされます。
- 内部的には、 Explore Edition は オフラインユースケースをサポートしていない若干異なるマップ形式(ビジュアル化に最適化したマップ)を使用します。
マップキャッシュの調整
オンラインおよびオフラインのユースケースをより適切にサポートするために、 HERE SDK はダウンロードされたベクターマップ データのキャッシュをサポートしています。 これはバックグラウンドで発生します。 マップの操作中、データはローカルのデバイスに保存され、デバイスの接続が失われたり、オフライン モードで操作されたりした場合でもアクセスできます。
統合されたマップ キャッシュ メカニズムは、標準のベクターベースのマップ スキームをサポートしています。衛星画像やその他のラスター タイルもキャッシュされますが、構成できない別のキャッシュにあります。
キャッシュされたデータの量には制限があり、マップの使用中に新しいマップデータで上書きされることに注意してください。ほとんどの場合、アプリを以前と同じ場所で再起動したときに追加のデータをダウンロードする必要がないため、これでユーザーは起動時間が短縮されたように感じることができます。
キャッシュがいっぱいになる と、 LRU ( Least Recently Used )方式が適用されます。
SDKOptions
を使用して HERE SDK を手動で初期化する場合、キャッシュパスと最大サイズを指定 できます。 キャッシュパスは Info.plist
ファイルを介して設定することもできます。 詳細については、「エンジン」セクションを参照してください。
注 : 顧客のラスタレイヤには、別のキャッシュを定義できます。
マップキャッシュを消去するには、次の手順を実行します。
SDKCache.fromEngine(SDKNativeEngine.sharedInstance!).clearCache { (error) in
if error == nil {
}
}
SDKNativeEngine
の共有インスタンスをnil
に設定しても、キャッシュは消去されません。
空の文字列をキャッシュパスとして設定すると、デフォルトのキャッシュパスが保持されます。このパスには、次の方法SDKNativeEngine.sharedInstance?.options.cachePath
でもアクセスできます。
let cachePath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.path ?? ""
let sdkOptions = SDKOptions(accessKeyId: "YOUR_ACCESS_KEY_ID",
accessKeySecret: "YOUR_ACCESS_KEY_SECRET",
cachePath: cachePath)
Info.plist
ファイルからキャッシュパスを指定することもできます。 SDKNativeEngine
例については、 API リファレンス を参照してください。
マップキャッシュに関する質問と回答
-
マップ タイル とは: マップタイルはマップキャッシュに保存されます。 マップ タイル には、検索とルーティングに関連するデータと、ビジュアルリプレゼンテーションのベクターデータが含まれています。 最適化されたクライアントマップ( OCM ) 形式で保存されます。 マップのタイルは、さまざまなズームレベルで使用できます。 マップ タイル には、ズーム レベル によって異なるデータが含まれている場合があります。
-
マップキャッシュ内のデータが失われた場合、どのような影響がありますか? 通常、マップキャッシュが完了しているとは見なされず、周囲の領域にタイルが失われることがあります。 これは、マップタイルがレンダリングされている間にオンデマンドでのみロードされるためです。 マップキャッシュに不足しているタイルがある場合 、たとえば、OfflineSearchEngine
が不足しているタイルの一部である POI や道路名を見つけられず、 HERE Rendering Engine はそのようなデータをレンダリングできません。また、 不足しているタイルの周りにルートが見つからない場合、 OfflineRoutingEngine
が失敗することがあります。 OfflineSearchEngine
および OfflineRoutingEngine
は、すべてのエディションで使用できるわけではありません。
-
マップキャッシュのサイズを指定してください。 マップキャッシュのサイズは、アプリケーションによって変更できます。 256 MB 以上を使用してください ( デフォルト ) 。 512 MB 以上または 1 GB を推奨します。 ターン・バイ・ターンナビ (矢印ナビ) (などで利用可能 Navigate Edition
)の場合、ズーム レベル 14 のマップタイルが必要です。このタイルは、約 2 km の円に相当します ただし、場所によって多少異なる場合があります。
-
キャッシュの削除ポリシーは何ですか ? HERE SDK は LRU ( Least Recently Used タイル )ロジックを使用して、マップキャッシュがいっぱいになったときにタイルを削除します。 たとえば、現在の場所から離れた場所にあるタイルなど、削除する高度なロジックはありません。ユーザーが次に訪問する可能性のある世界の領域は予測できないからです。 ただし、マップキャッシュは セッション固有のものではありません。このキャッシュのデータは、最後の電源サイクルから最後にデバイスが使用されたときのものであり、次回アプリ が使用されたときからまだ残っています。 キャッシュは、デバイスごとではなく、アプリ ごとに固有のものであることに注意してください。
-
キャッシュ済みのマップ タイル はオフラインで検索できますか ? はい、OfflineSearchEngine
では常に検索できます。 ただし、すべてのマップ タイル にすべてのズーム レベル の同じ検索結果が含まれているわけではありません。 OfflineSearchEngine
は 、すべてのエディションで使用できるわけではありません。
-
一度にキャッシュされるマップ タイル は 1 つだけですか ? はい。位置が 2 つのタイルの端にない限り、一度に追加できるタイル は 1 つだけです。 ズーム レベル によっては、マップ ビュー のレンダリングに複数のタイルが必要になります。この処理は、ズーム レベル が変更された場合にのみ自動的には行われません。
-
衛星画像はキャッシュされていますか? はい。衛星マップ スキームが設定されている場合、対応する画像もキャッシュされますが、衛星画像は 1 日後 ( 契約上の理由により ) は使用できず、削除されます。 この場合、 HERE SDK は利用可能な新しい衛星マップタイルがあるかどうかを確認し、利用可能な場合はキャッシュ内のイメージが自動的に更新されます。 画像が変更されていない場合は、タイムスタンプのみが更新され、このチェック後に 1 日の別の期間にわたって画像を再利用できます。 ただし、 LRU 戦略は引き続き適用されます。 非衛星のマップタイルは 、キャッシュがいっぱいの場合にのみ削除されます。古いタイルの古さや、時間に基づいて古いタイルが自動的に削除されることはありません。
-
地球儀のような「ベース マップ 」はいつでも利用できますか? HERE SDK は、自動的に世界のタイル、つまり世界で最も多いズーム レベル タイルをダウンロードします。 これは、レンダリングの目的で非常に限られた量の情報を使用して、世界中で利用できるマップが常に存在することを意味します。 国や大陸の形が表示され、大文字がテキストラベルで表示されます。
-
キャッシュは自動的に消去されますか ? いいえ、フルキャッシュは LRU 戦略に基づいてのみ消去されます ( 上記を参照 ) 。 接続が中断されたためにタイルが完全にダウンロードされていない場合、これらのタイルは保持され、接続が再開されたときにダウンロードが続行されます。
-
接続が利用可能な場合、ルート全体が事前にキャッシュされますか。 いいえ、自動的には発生しません。 ただし、RoutePrefetcher
を使用して、ルート経路沿いのキャッシュにマップ データ をダウンロードできます。 詳細については、ターン・バイ・ターンナビ (矢印ナビ) セクションを参照してください。 RoutePrefetcher
は、すべてのエディションで使用できるわけではありません。
HERE Logo Watermark
HERE SDK を使用する場合は、 HERE ロゴがマップ ビューに常に表示されていることが必要です。 既定では、 HERE ロゴはマップの右下隅にあります。 ただし 、マップ ビューインスタンスでsetWatermarkLocation()
を呼び出すことで、アプリの設計に合わせてその場所を簡単にカスタマイズできます。 UI 要素が重複しているため、必要な場合にのみ既定の配置を変更することをお勧めします。 非常に小さいビューの場合の注意 : マップの両端の濃度が 250 の独立したピクセルサイズ未満の場合、透かしは自動的に非表示になります。
注
HERE との特別な合意がある場合にのみ、 HERE ロゴを削除できます。
CarPlay のサポートを追加
HERE SDK は、 Apple の CarPlay ソリューションとシームレスに統合できます。
たとえば、 HERE SDK のプレミアムオフラインおよびオンラインサーチフィーチャーを使用して、車の中の場所を検索したり、本格的なナビゲーションソリューションを統合したりできます。 「 HERE マップを CarPlay に統合 」チュートリアルに従って、車両のヘッドユニットディスプレイでマップ ビュー をはじめたり表示する方法を確認します。