地図を使用します
HERE SDK for Android の主要な機能の 1 つ がマッピングです。マッピングには、マップ ビューの追加、マップに表示される場所の変更、およびそのプロパティの変更が含まれます。 マッピング API の主なコンポーネントはマップ ビュー View
です。このコンポーネントはサブクラスとして統合されています。 マップ ビューは 、 マップおよびさまざまなプロパティを表示するためのベクトルベースのビューを表します。
HERE Map Data は 毎週更新 され、常に最新のマップ データを利用できるようになっています。 マップ ビューを統合することで、このメリットを自動的に享受できます。 地図がベクトルベースである間 、他のプロバイダのカスタム地図タイルを統合することもできます。
注
簡単なマップアプリケーションを作成する場合 は、はじめにの項を参照してください。
地図とそのプロパティを操作するには 、まず [ カメラ ] セクションを確認することをお勧めします。 その他の機能 :
- 一般的なマップジェスチャや、パニングや回転などのデフォルトのマップビヘイビアーを処理するためのマップジェスチャ。
- サテライトと通常のマップ レイヤーなどの既定のマップスタイルを瞬時に切り替えるマップスキーム。 利用可能な地図スキームの詳細については、以下を参照してください。
- アイテムをマップ して、オブジェクトと図形をマップに配置し、それらを操作します。
- カスタムサーバーイメージを追加のマップ レイヤーとして表示するカスタムのラスタータイル。
- 既存 のマップスキームの外観を完全にカスタマイズするカスタムマップスタイル。
デフォルト MapView
では、は 60 フレーム / 秒( FPS )でレンダリングされます。 mapView.get/setFrameRate()
最大フレームレートを使用して調整できます。たとえば、ローエンドデバイスでの CPU/GPU の使用量を削減できます。 FPS を 0 に設定することで、自動レンダリングサイクルを非アクティブ化することもできます。 負の値を設定しても効果はありません。 MapView
この値は、アプリに複数 MapView
のが含まれている場合に、インスタンスごとに個別に設定できます。
別 のオプションとして、レンダリングする要素が少ないカスタムマップスタイルを使用することもできます。
HERE SDK フレームワークのサイズを縮小するため に、未使用のフォントはアプリケーションを出荷する前に削除できます。
地図スキームを読み込みます
HERE SDK では、 5 つの事前設定済みマップスキームがサポートされて
-
NORMAL_DAY
: 昼間の使用に適したロスレスのスケーラブルなベクトルベース マップ。 -
NORMAL_NIGHT
: 夜間使用のためのロスレスでスケーラブルなベクトルベース マップ。 -
HYBRID_DAY
: 衛星の画像と、ベクトルストリートネットワーク、地図ラベル、 POI 情報を組み合わせたハイブリッド方式の昼間バージョン。 -
HYBRID_NIGHT
: 衛星の画像と、ベクトルストリートネットワーク、地図ラベル、 POI 情報を組み合わせたハイブリッド方式の夜間バージョン。 -
SATELLITE
: さまざまなズームステージの衛星画像を表示するビットマップベースのマップ。
衛星画像を除き、独自の地図スタイルを完全にカスタマイズすることもできます。
マップ スキームをロードするには、次のコード スニペットを使用します。
MapScheme mapScheme = MapScheme.NORMAL_DAY;
mapView.getMapScene().loadScene(mapScheme, new MapScene.LoadSceneCallback(){
@Override
public void onLoadScene(@Nullable MapError mapError) {
if (mapError == null) {
} else {
Log.d(TAG, "Loading of map scheme failed: mapError: " + mapError.name());
}
}
});
周囲の光が明るい日中は、昼間の日付のバリエーションを使用することをお勧めします。 night
バリアントは、軽量化されている場合の使用に合わせて最適化されています。 たとえば、ドライバーがトンネルを通過するときに、アプリケーションが昼間から夜間のスキームに切り替わる場合 があります。 Navigate Edition を使用している場合は、変更された道路属性について通知を受け、トンネルを通過するときに通知を受け取ることができます。 これにより、アプリケーションがマップ スキームをその場で切り替えることができます。 この問題は自動的には発生しません。
HERE SDK は、昼間モードと夜間モードを切り替える現在の時刻を自動的に検出するわけではありません。 アプリケーションは、ユーザーの設定に基づいて、またはデバイスのクロックを確認することによって、この処理を行うことができます。
左から右へ : MapScheme.normalDay 、 MapScheme.normalNight 、 MapScheme.hybridDay 、 MapScheme.hybridNight 利用可能な地図スタイルが最適化され、視覚的な干渉なしにコンテンツやオーバーレイをベース マップに簡単に追加できます。 地図の配色はあまりカラフルではありません。また、色覚異常が発生した場合でも読みやすさを最大限に高めるために、クリーンで中立的な色調をサポートしています。
- 街路網はグレーのスケールで設計され、明るさ、コントラスト、幅を階層構造で提供します。
- 全体的に明るい色使いでまとめられている。
- キーの色は、グレー、ブルー、グリーン、ホワイトです。
さらに、 HERE SDK では 、 ラベルを含まない衛星スキームを提供しています。
MapScheme.satellite 地図レイヤーを地図機能として追加します
HERE SDK では、マップスキームに加え て、特定の種類のレイヤを追加できます。これをマップ機能と呼びます。このレイヤには、現在のトラフィックフローなどの追加情報が表示されます。 以下に、このようなレイヤーを有効にする方法を示します。
Map<String, String> mapFeatures = new HashMap<>();
mapFeatures.put(MapFeatures.TRAFFIC_FLOW, MapFeatureModes.TRAFFIC_FLOW_WITH_FREE_FLOW);
mapFeatures.put(MapFeatures.TRAFFIC_INCIDENTS, MapFeatureModes.DEFAULT);
mapFeatures.put(MapFeatures.SAFETY_CAMERAS, MapFeatureModes.DEFAULT);
mapFeatures.put(MapFeatures.VEHICLE_RESTRICTIONS, MapFeatureModes.DEFAULT);
mapFeatures.put(MapFeatures.TERRAIN, MapFeatureModes.DEFAULT);
mapFeatures.put(MapFeatures.LANDMARKS, MapFeatureModes.LANDMARKS_TEXTURED);
mapFeatures.put(MapFeatures.EXTRUDED_BUILDINGS, MapFeatureModes.DEFAULT);
mapFeatures.put(MapFeatures.BUILDING_FOOTPRINTS, MapFeatureModes.DEFAULT);
mapView.getMapScene().enableFeatures(mapFeatures);
同様に、以下のようにレイヤーのリストを無効にすることもできます。
List<String> mapFeatures = new ArrayList<>();
mapFeatures.add(MapFeatures.TRAFFIC_FLOW);
mapFeatures.add(MapFeatures.TRAFFIC_INCIDENTS);
mapView.getMapScene().disableFeatures(mapFeatures);
すべてのエディションですべての機能レイヤーを利用できるわけではありません。 API リファレンス で サポートされているレイヤーを確認してください。 レイヤーを追加すると、ローエンドデバイスのパフォーマンスへの影響が最小限に抑えられることに注意してください。
以下に、サポートされているすべてのマップレイヤーのスクリーンショットを示します。
交通渋滞レイヤーには、道路での交通渋滞が表示されます。 | 交通事故マップ レイヤー には、事故、建設工事などの事故が表示されます。 | スピードカメラマップ レイヤー にスピード警告カメラが表示されます。 | 車両制限マップ レイヤー には、トラック固有の情報が表示されます。 | Terrain マップ レイヤー (地形)に丘のシェーディングが表示されます。 |
3D ランドマークマップ レイヤー は、テクスチャード加工のランドマークを示しています | 押し出された Buildings マップ レイヤー には、建物の 3D リプレゼンテーションが表示されます。 | 建物フットプリントマップ レイヤー には、建物の 2D フットプリントが表示されます。 | 建物およびフットプリントのマップレイヤーは、既定で有効になっています。 これは、無効化されたときの状態です。 |
一部のレイヤーでは、次の方法で表示されているコンテンツをフィルタリングでき MapContentSettings
-
MapFeatures.TRAFFIC_INCIDENTS
: filterTrafficIncidents(List<TrafficIncidentType> trafficIncidents)
表示されている交通事故をフィルタリングするために使用します。 -
MapFeatures.VEHICLE_RESTRICTIONS
: filterVehicleRestrictions(TruckSpecifications truckSpecifications, List<HazardousMaterial> hazardousMaterials, TunnelCategory tunnelCategory)
表示されているトラック制限をフィルタリングするために使用します。
注 : マップレイヤー BUILDING_FOOTPRINTS
& EXTRUDED_BUILDINGS
は、でデフォルトで有効 MapView
になっています。
HERE Rendering Engine は 、onResume()
が呼び出されるたびに添付されます。 この OnReadyListener
状況が発生すると、によって通知されます。
mapView.setOnReadyListener(new MapView.OnReadyListener() {
@Override
public void onMapViewReady() {
Log.d(TAG, "HERE Rendering Engine attached.");
}
});
ほとんどの場合、このイベントを待つ必要はありません。 たとえば、地図アイテムはいつでも追加できます。 HERE Rendering Engine
が添付されると、地図が表示されます。 マップ ビューからの地図アイテムの選択など、マップ データがこのイベントを待機して期待どおりの結果を得る必要があるコードのみが含まれます。
未使用のフォントファイルを削除します
HERE SDK には、サポートされているすべての言語のマップラベルをレンダリングするためのフォントファイルが複数含まれています。 アプリ 全体のサイズを最適化する場合は、選択したフォントを削除できます。
たとえば DroidSansFallback
、フォントでは、共有の Unicode コードポイントに簡体字中国語の表意文字が使用されます。
このフォントを削除するに AAR
は、 HERE SDK ファイルを開き、次のファイルを削除します (AAR は ZIP 形式であることに注意してください ) 。
assets/geoviz/DroidSansFallback.ttf
別の例として、日本語文字の完全なセットをレンダリングする必要がない場合は、次を削除できます。
assets/geoviz/NotoSansJP-Regular.otf
次に、 Android Studio を使用して AAR を再アーカイブします。
または、アプリ build.gradle
のファイルを編集します。 android { ... }
セクションで、 packagingOptions
選択したフォントを削除するために追加します。
android {
...
packagingOptions {
exclude '/lib/assets/geoviz/fonts/DroidSansFallback.ttf'
exclude '/lib/assets/geoviz/NotoSansJP-Regular.otf'
}
...
}
注
フォントを削除する場合は、地図の言語を削除したフォント以外の言語に切り替えることをお勧めします。 マップラベルを表示するには、少なくとも 1 つのフォントを残す必要があります。 削除されたフォントの言語でラベルを表示する必要があるたびに、欠落している文字ごとにエラーメッセージが記録されます。
フォントファイルのサイズは、数百キロバイトから数メガバイトの範囲になることがあります。 選択したフォントを削除すると、アプリケーションがデバイスにインストールされたときに消費されるスペースが少なくなります。 これらの手順で節約できる最大容量は約 11 MB です。
地図の言語を設定します
地図で使用する言語をカスタマイズして、道路、都市、その他のマップ データのラベルを表示できます。 既定では、リージョンのローカル言語が使用されます。
MapView.setPrimaryLanguage(languageCode)
ワールドの言語を設定するか、 null
またはデフォルトの動作に戻すように設定するには、を呼び出します。 これ MapView
により、のすべてのインスタンスの言語が設定されます。 言語が世界のどの地域でもサポートされていない場合は、その地域のローカル言語が代わりに表示されます。
マップ データの可用性
デフォルトでは、日本、中国、韓国などの世界の一部の地域には、限定的なマップ データ が含まれています。 マップ データ の全機能にアクセスするには、HERE の担当者に連絡してください。
HERE SDK では、すべての種類のデータがマップタイルに保存されます。 これには、マップ ビュー でのレンダリングの目的で必要なデータが含まれている場合がありますが、これに限定されるものではありません。 たとえば、マップタイルには、マップ ビュー には表示されないが、ターン・バイ・ターンナビ (矢印ナビ) などの他の目的で必要な場所または道路の属性に関するデータも含まれています。
マップ タイル に保存されている情報は、交通情報やランドマークなどの個別のトピックの情報を保持する複数のレイヤーに分類されます。
Navigate Edition では、フードの下 で 最適化されたクライアントマップ (OCM) カタログ形式を使用して、コンパクトで高速かつ柔軟なマップを提供しています。 OCM カタログは、 HERE Map Content ( HMC )からコンパイルされます。
OCM 形式では、使用されているすべてのデータをデバイスストレージに永続的に保存することも、マップキャッシュに一時的に保存することもできます。 このようにして、アプリケーションは、デバイスがオンラインかどうかに関係なく、同じ機能にアクセスできます。
Explore Edition 内部 では、オフラインユースケース をサポートしていない若干異なるマップ形式が使用されていることに注意してください。
地政学的見解
HERE SDK では、複数の地理的な政治的見解および異議を申し立てた境界をサポートしており、国際ビュー(デフォルト)またはローカルの国ビューに基づいてマップの境界を表示します。 ローカルビューは、 2 つ以上の政治組織(通常は国)が国境および所有権または支配権を主張する場合に、地図上の特定の領域にのみ影響を与えます。
politicalView
経由でアクセスできるメンバーの 3 文字の言語コードを設定することで、デフォルトの地政学的ビューを変更 SDKOptions
できます。 サポートされている国コードは 、カバレッジページからアクセスできます。
設定されている場合、マップ ビュー は設定されている国の地政学的な観点に基づいてすべての国の境界を表示 MapView
し、によってそれに応じて境界が表示されます。
この機能はベータ版としてリリースされています。
実行時に地政学的ビューを変更する場合は、次のコード スニペット を使用します。
SDKCache.fromEngine(SDKNativeEngine.getSharedInstance()).clearCache(error -> {
if (error != null) {
}
});
SDKOptions options = SDKNativeEngine.getSharedInstance().getOptions();
options.politicalView = "ARG";
SDKNativeEngine.getSharedInstance().dispose();
新しいオプションを設定するには、新しい共有インスタンスを作成する必要もあるため、進行中の HERE SDK 操作ではこのオプションを呼び出さないでください。 理想 的には、アプリのライフサイクル中に HERE SDK を初めて初期化する前に、オプションとpoliticalView
を 1 回のみ設定します。
地図のキャッシュを調整します
オンラインおよびオフラインのユースケースをより適切にサポートするために、 HERE SDK はダウンロードされたベクターマップ データのキャッシュをサポートしています。 これはバックグラウンドで発生します。 地図の操作中、データはローカルのデバイスに保存され、デバイスの接続が失われたり、オフライン モードで操作されたりした場合でもアクセスできます。
統合されたマップキャッシュメカニズムは、標準的なベクトルベースのマップスキームをサポートしています。衛星イメージやその他のラスタタイルもキャッシュされますが、設定できない別のキャッシュに保存されます。
キャッシュされるデータの量は制限され、地図の使用中に新しいマップ データで上書きされます。 ほとんどの場合、アプリを以前と同じ場所で再起動したときに追加のデータをダウンロードする必要がないため、これでユーザーは起動時間が短縮されたように感じることができます。
キャッシュがいっぱいになる と、 LRU ( Least Recently Used )方式が適用されます。
を使用して HERE SDK を手動で初期化する場合、絶対キャッシュパスと最大サイズを指定 SDKOptions
できます。 キャッシュパスは AndroidManifest
ファイルを介して設定することもできます。 詳細については、「エンジン」セクションを参照してください。
注 : 顧客のラスタレイヤには、別のキャッシュを定義できます。
マップキャッシュを消去するには、次の手順を実行します。
SDKCache.fromEngine(SDKNativeEngine.getSharedInstance()).clearCache(error -> {
if (error != null) {
}
});
の共有インスタンスを廃棄 SDKNativeEngine
しても 、キャッシュは消去されません。
空の文字列をキャッシュパスとして設定すると、デフォルトのキャッシュパスが保持されます。このパスには context.getCacheDir().getPath()
、または SDKNativeEngine.getSharedInstance().getOptions().cachePath
を使用してアクセスすることもできます。
SDKOptions sdkOptions = new SDKOptions("YOUR_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_SECRET", "");
AndroidManifest.xml
ファイルからキャッシュパスを指定することもできます。 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 つだけです。 ズーム レベル によっては、マップ ビュー のレンダリングに複数のタイルが必要になります。この処理は、ズーム レベル が変更された場合にのみ自動的には行われません。
-
衛星画像はキャッシュされていますか? はい。衛星マップ スキーム が設定されている場合、対応する画像もキャッシュされますが、衛星画像は 90 日後(契約上の理由により)使用できず、削除されます。 この場合、 HERE SDK は利用可能な新しい衛星マップタイルがあるかどうかを確認し、ある場合はキャッシュ内のイメージが自動的に更新されます。 画像が変更されていない場合は、タイムスタンプ のみが更新され、この確認後 90 日間画像を再利用できます。 ただし、 LRU 戦略は引き続き適用されます。 非衛星の地図タイル は、キャッシュがいっぱいの場合にのみ削除されます。古いタイルの古さや、時間に基づいて古いタイルが自動的に削除されることはありません。
-
地球儀のような「ベース マップ 」はいつでも利用できますか? HERE SDK は、自動的に世界のタイル、つまり世界で最も多いズーム レベル タイルをダウンロードします。 これは、レンダリングの目的で非常に限られた量の情報を使用して、世界中で利用できるマップが常に存在することを意味します。 国や大陸の形が表示され、大文字がテキストラベルで表示されます。
-
キャッシュは自動的に消去されますか ? いいえ、フルキャッシュは LRU 戦略に基づいてのみ消去されます ( 上記を参照 ) 。 接続が中断されたためにタイルが完全にダウンロードされていない場合、これらのタイルは保持され、接続が再開されたときにダウンロードが続行されます。
-
接続が利用可能な場合、ルート全体が事前にキャッシュされますか。 いいえ、自動的には発生しません。 ただし、を使用し RoutePrefetcher
て、ルート経路沿いのキャッシュにマップ データ をダウンロードできます。 詳細については、ターン・バイ・ターンナビ (矢印ナビ) セクションを参照してください。 は RoutePrefetcher
、すべてのエディションで使用できるわけではありません。
HERE Logo Watermark
HERE SDK を使用する場合は、 HERE ロゴがマップ ビューに常に表示されていることが必要です。 既定では、 HERE ロゴは地図の右下隅にあります。 ただし setWatermarkLocation()
、マップ ビューインスタンスでを呼び出すことで、アプリの設計に合わせてその場所を簡単にカスタマイズできます。 UI 要素が重複しているため、必要な場合にのみ既定の配置を変更することをお勧めします。 非常に小さいビューの場合の注意 : 地図の両端の濃度が 250 の独立したピクセルサイズ未満の場合、透かしは自動的に非表示になります。
注
HERE との特別な合意がある場合にのみ、 HERE ロゴを削除できます。
Android Auto のサポートを追加します
HERE SDK は 、 Android Auto および Android Automotive とシームレスに統合できます。
たとえば、 HERE SDK のプレミアムオフラインおよびオンライン検索機能を使用して、車の中の場所を検索したり、本格的なナビゲーションソリューションを統合したりできます。 デスクトップヘッドユニットにマップ ビュー を表示する場合MapSurface
は、インスタンスを使用してマップをレンダリングする必要があります。 「 HERE マップを Android Auto に統合 する」チュートリアルに従って、この方法を確認してください。