ガイド変更履歴HERE SDK API references
ガイド

オフラインマップの使用を開始する

オフラインマップはNavigateライセンスでのみ使用できます。

インターネット接続が遅い、信頼できない、または利用できない状況では、オフラインマップが重要なソリューションとなります。外出先や意図的に帯域幅を制限する場合でも、オフライン マップを使ってシームレスで応答性の高いユーザー エクスペリエンスを確保できます。

オンライン マップは、正確な最新のデータを提供し、包括的な検索結果などの機能を備えていますが、オフライン マップは帯域幅が限られている場合に非常に便利です。事前にロードされたオフライン マップを使用すると、インターネット接続を使用したり、OTA 帯域幅を消費したりすることなく、検索、ルート検索、ナビゲーション、地図検索など、HERE SDK の重要な機能にアクセスできます。

オフラインマップは永続マップまたはプリロードマップとも呼ばれ、オンラインマップと同等の機能を提供します。場所の検索、ルートの計算、ルート案内の開始 (Navigateのみ) が可能で、オンラインデータと同様にMapViewで操作できます。

これらの地図は大陸全体や国から、州、都道府県、特定のエリアまで、さまざまな粒度レベルでRegionとして読み込みできます。また、場所、ルートに沿って、またはユーザー定義のポリゴン領域内のマップ データをプリフェッチして、詳細にカスタマイズできます。

仕組み

  1. マップ データ キャッシュは自動的に入力されます。これは永続化されず、サイズを変更することができます。
  2. MapDownloader.downloadRegions() を使用して、オフライン マップをディスクに保存されている Region データの形式で永続的にインストールできます。
  3. MapUpdater.updateCatalog() を使用して、インストールされているオフライン マップを更新できます。
  4. MapDownloader.deleteRegions() を使用して、インストールされているオフライン マップを削除できます。

インストールされているオフライン マップの後方互換性は 1 年間サポートされます。HERE SDK の新しいバージョンが 1 年以上前のマップ バージョンをサポートする保証はありません。同様に、HERE SDK の 1 年以上前のバージョンが新しいマップ バージョンをサポートする保証はありません。前方互換性は 1 年間サポートされます。これにより、お客様はインストールされているオフライン マップと HERE SDK 自体を更新するのに十分な時間を確保できます。

次のコア機能は、オフライン マップ データをサポートします。

  • 検索OfflineSearchEngineはオンライン用のSearchEngineに相当し、場所の検索に使用されます。
    • オフライン機能を使用するには、ダウンロード済みか、キャッシュに保存されたマップデータに対して実行する必要があります。
    • オンラインエンジンがオフラインで実行された場合、オフラインデータが利用できる場合でも結果を返しません。
  • ルート検索OfflineRoutingEngineはオンライン用のRoutingEngineに相当し、ルートの計算に使用されます。
    • オフライン機能を使用するには、ダウンロード済みか、キャッシュに保存されたマップデータに対して実行する必要があります。
    • オンラインエンジンがオフラインで実行された場合、オフラインデータが利用できる場合でも結果を返しません。
  • 地図検索MapView は、オフライン データを利用します。ただし、衛星画像などのラスター レイヤーの場合などの例外もあります。
    • RegionMapDownloader でダウンロードされるか、地図をパンしてエリアがキャッシュに保存されると、MapView はインターネット接続がなくても、このエリアに対して完全に動作します。ただし、SearchEngineRoutingEngineなどの専用のオンラインエンジンは、キャッシュに保存されたマップデータやダウンロードされたマップデータを使用しません。
  • ナビゲーションNavigatorVisualNavigator は、オフライン マップ データと完全に連携して、オフラインの経路誘導ガイダンスをサポートします。なお、Navigator はヘッドレスで (MapView なしで) 動作しますが、イベントを配信するにはマップ データが必要になります。

キャッシュ、オフライン、オンライン マップを区別する

オフラインでマップ データにアクセスするには、以下の 2 つの方法があります。

  • マップ キャッシュ:デフォルトでは、マップの使用中にすべてのマップ データがデバイスのキャッシュに保存されます。このストレージはセッション間で保持されますが、ストレージのサイズには制限があり、古いキャッシュ データは新しいマップ データに置き換えられる場合があります。注:デフォルトのキャッシュ パスとサイズは、HERE SDK をプログラムで初期化するときに、SDKNativeEngine に渡すことができる SDKOptions を使用して変更できます。キャッシュに保存されたマップデータは、ローカルのマップキャッシュストレージに保存されます。キャッシュの詳細については、こちらを参照してください。なお、RoutePrefetcherを使用すると能動的にキャッシュにデータを入れることができます (以下を参照)。

  • オフラインマップ:オフラインマップを使用すると、地域全体または大陸全体をダウンロードして、場所、ルート、その他のデータを含むマップデータをオフラインで使用できるように事前に読み込みできます。専用のMapDownloaderを使用すると、このデータを取得して維持できます。オフラインマップデータはセッション間で保持され、ユーザーが削除しない限りデータは削除されません。オフライン マップは、ローカルの永続マップ ストレージに保存されます。これは 2 番目のマップ ストレージであり、マップ キャッシュから完全に分離されています。通常、オフライン マップのダウンロードは、読み込まれるデータがギガバイトになるため、Wi-Fi 経由で行われます。オフライン マップ データは、接続がない場合に、オンライン サービスやキャッシュに保存されたマップの完全な代替手段として使用されます。

デフォルトでは、マップ ビューを操作するときに、HERE SDK はオンライン データ、ローカル マップ キャッシュ、永続マップ ストレージを自動的に使用して、可能な限り最高のユーザー エクスペリエンスを提供します。

  1. HERE SDK は、デバイスがオンラインであっても、現在のビューポート エリアのマップ キャッシュ ストレージからマップ データを表示できるかどうかを最初に確認します。
  2. 現在のビューポートで利用できるキャッシュ データがない場合、HERE SDK は、デバイスがオンラインであっても、永続マップ ストレージ内でオフライン マップ データを検索します。オフライン マップ データが見つからない場合は以下のとおりです。
  • デバイスがオフラインの場合:地図の詳細が少なく表示されるか、詳細が表示されなくなります。
  • デバイスがオンラインの場合:オフライン スイッチがアクティブでない限り、新しいマップ データが表示され、キャッシュにダウンロードされます。キャッシュがいっぱいになると、Least Recently Used (LRU) 方式が適用され、最も長い時間アクセスされていないキャッシュ内のデータが削除されます。

たとえば、ベルリン地域がデバイスにインストールされており、デバイスがオンラインの場合、ベルリンのマップ エリアをパンするときにマップ データはマップ キャッシュにダウンロードされず、代わりにインストールされている地域データが使用されます。

HERE SDK を検索やルート検索にオフラインで使用する場合は、専用のオフライン エンジンを使用して、キャッシュに保存されたオフライン マップ データまたは事前ダウンロードされたオフライン マップ データにアクセスします。オフラインでマップ データにアクセスするには OfflineSearchEngineOfflineRoutingEngine を使用します。対応するSearchEngineRoutingEngineは、オンライン接続が利用できる場合にのみ結果を提供します。それ以外の場合はエラーが発生します。したがって、どのエンジンを使用するかを決定する必要があります。

OfflineRoutingEngine のような専用のオフライン エンジンは、デバイスやグローバル オフライン スイッチの接続に関係なく、オンライン データをダウンロードしません。

HERE SDK は専用のオンラインとオフラインの機能エンジンを提供していますが、ターン・バイ・ターンナビにはそのような区別はありません。Navigator エンジンと VisualNavigator エンジンには、マップ キャッシュからのマップ データ、または永続マップ ストレージのオフライン マップ データ (利用できる場合) からのマップ データが必要です。データが見つからない場合、グローバル オフライン スイッチがアクティブでない限り、データは自動的にキャッシュにダウンロードされます。

オフライン マップは、ベクター ベースのすべてのマップ スキームで動作します。衛星ベースのマップ スキームは、ダウンロードされたマップ データの一部ではありません。

グローバル オフライン スイッチを使用する

HERE SDK には、HERE SDK を無線封止にするためのグローバル オフライン スイッチが備わっています。このオフライン モードでは、HERE SDK によるオンライン接続の開始が阻止されます。

SDKNativeEngine.getSharedInstance().setOfflineMode(true);

デフォルトは false であり、HERE SDK はオンライン接続を使用します。trueに設定されている場合、これによりHERE SDKがオンライン接続を開始できなくなります。ただし、PassThroughFeature項目が設定されている場合は除きます。

たとえば、このモードでは新しいマップタイルがキャッシュに読み込まれなくなります。HERE SDK (Navigate) を使用している場合は、オフライン検索 (専用エンジン経由)、オフラインのルート検索 (専用エンジン経由)、オフラインガイダンスなどの機能を引き続き使用できます。

デバイス自体が機内モードになっているかどうかは関係ありません。スイッチがオンになっている場合、HERE SDKが試行するリクエストはブロックされます。そのため、オフライン モードを再度無効にするまで、オンライン データは消費されません。

ただし、HERE SDK を初期化する際に、いくつかのリクエストが行われることがあります。HERE SDK を初期化する前からアプリケーションをオフラインで起動するには、SDKOptionsofflineMode のフラグを true に設定します。ランタイム中にこれを変更する予定がない場合は、このフラグのみで完全にオフラインで動作します。

HERE SDKがオフラインに切り替わると、進行中のリクエストとキューに入れられたリクエストはすべて停止します。SDKNativeEngineでは、引き続きオンラインデータへのアクセスが許可されるPassThroughFeatureの項目 (交通データの取得など) のリストを設定することで、このルールの例外を定義できます。デフォルトでは、例外は設定されていません。

1つ以上のパススルー機能を有効にするには、目的の機能を含むSet<PassThroughFeature>を作成し、それを任意の時点でsdkNativeEngineに設定します。

private void enablePassThroughFeatures(SDKNativeEngine sdkNativeEngine) {
    Set<PassThroughFeature> passThroughFeatureSet = new HashSet<>();
    passThroughFeatureSet.add(PassThroughFeature.TRAFFIC_TILES_FLOW);
    passThroughFeatureSet.add(PassThroughFeature.TRAFFIC_TILES_INCIDENTS);
    sdkNativeEngine.setPassThroughFeatures(passThroughFeatureSet);
}

上の例では、グローバルオフラインスイッチがアクティブな場合でも、TRAFFIC_FLOWおよびTRAFFIC_INCIDENTSのマップ機能を使用して、マップビューに交通データをレンダリングできます。

HERE SDKがオフラインモードで動作するように切り替えられると、MapViewにレンダリングされたすべてのマップデータがキャッシュまたは永続ストレージから取得されます。後者の場合は、Navigateなどのライセンスでのみ利用可能な、事前にダウンロードされたマップデータが必要です。

HERE SDKがオフラインモードで動作するように切り替えられ、かつ特定のマップレイヤー (VEHICLE_RESTRICTIONSなど) がMapFeaturesの上で有効になっている場合、このデータはすでにキャッシュに保存されているか、永続ストレージにRegionの一部としてダウンロードされている場合にのみ使用できます。このルールは、使用可能なすべてのマップ フィーチャーに適用されます。

デフォルトでは、一部の MapFeatures レイヤーはオフラインでの使用が有効になっていません。たとえば、TERRAIN レイヤーは「FeatureConfiguration」で有効化して、ダウンロード可能な Region の一部とする必要があります。概要については、最適化に関するガイドを参照してください。ただし、事前にキャッシュに保存されているすべてのレイヤーには、基本的には画面上の地図をパンすることで、オフラインでアクセスできます。

Offline Mapsサンプルアプリを試す

Java版とKotlinの版サンプルアプリで提供されている「OfflineMaps」アプリを試して、オフラインマップの主要機能とベストプラクティスのコード例をご確認ください。このサンプルアプリは、GitHubでお好みのプラットフォームのものを見つけることができます。

FAQ - よくある質問

  • オフライン検索はどのように動作しますか?デフォルトでは、OfflineSearchEngine は永続オフライン マップ データを検索しますが、Region が読み込まれていない場合は、マップ キャッシュを使用しようとします。

  • オフラインのルート検索はどのように動作しますか?オフラインのルート検索は、キャッシュに保存されたマップ データだけでなく、オフライン マップで使用することを目的としています。利用できるオフライン マップ データがない場合、OfflineRoutingEngine はマップ キャッシュ内で不足しているデータを見つけようとします。ルートの一部のマップ データが欠落している場合、ルート計算は失敗します。

  • マップ キャッシュはオフライン マップとどう違うのですか?キャッシュは、マップ ビューがパンされると自動的に実行されます。また、RoutePrefetcher を使用すると、データをマップ キャッシュにフェッチするようリクエストできます。マップ キャッシュ内のデータは永続的に保存されるものではなく、キャッシュがいっぱいになった場合など、必要に応じて新しいデータに置き換えることができます。一方、オフライン マップは永続的にデバイスの別のパスに保存されます。MapDownloader のような専用のAPIを使用すると、世界の特定の地域を永続的にダウンロードできる他、ユーザーのリクエストに応じて更新したり、削除したりできます。

  • オンライン RoutingEngine を使用すると、データの不一致が発生する可能性がありますか?RoutingEngine を使用している場合、計算されたルートは利用できる最新のマップ データに常に基づいています。デバイス自体に古い地図バージョンが使用されている場合でも同様です。たとえば、古いバージョンの地図では知られていない、新しく建設された橋をルートが通ることがあります。これは、主にマップの外観に影響します。たとえば、橋がマップ ビューに期待どおりにレンダリングされない場合があります。ただし、デバイスが完全にオフラインで動作している場合や、その地域のオフライン マップがすでにインストールされている (かつ、まだ更新されていない) 場合でも、ナビゲーション体験は新しいルートに基づいて行われます。どちらの場合でも、navigator はルートに基づいてガイダンスを提供し、橋の上を移動します。また、navigator は、デバイスがオンラインであっても、既存のオフラインのマップ データかキャッシュに保存されたマップ データを見つけた場合は、新しいデータをリクエストしません。ただし、潜在的な不一致を回避するために、旅行の開始前に MapUpdater で最新の地図バージョンに更新しておくとよいでしょう。GPS ソースから提供された位置情報がルートに十分近い場合、リソースの節約のため、マップマッチングは実行されません。その場所がルートから離れている場合にのみ、HERE SDK はその場所と道路のマップマッチングを試みます。

  • デバイスにオフライン マップをプレインストールできますか?リクエストに応じて、手動でそのようなパッケージを作成し、あらかじめマップ データを読み込みできます。ただし、このために利用できる API がないため、詳細については、当社にご連絡いただく必要があります。