iOS 開発者ガイド for SDK

地図パッケージのダウンロード

オフラインマップ機能を取得する 2 つ目の方法は NMAMapLoader 、および関連するオブジェクトを使用して有効にします。 NMAMapLoader このクラスは、デバイスに保存されているマップ データの操作を許可する API のセットを提供します。 次の操作を行います。

  • getMapPackages - デリゲートコールバックを介して、デバイスのマップ データの現在の状態を取得します。 この非同期操作が完了すると rootPackage 、パッケージ階層のルート項目もプロパティに入力されます
  • getMapPackageAtGeoCoordinates: - NMAMapPackage 特定のジオコード化された位置を含む最小の位置を検索します
  • installMapPackages: - 指定したのインストール対象のリストを要求します NMAMapPackage
  • uninstallMapPackages: - 指定したのアンインストールリストを要求します NMAMapPackage
  • checkForMapDataUpdate - 新しいマップ データバージョンが利用可能かどうかを確認します
  • getMapDataUpdateSize - 保留中のマップ データバージョンの更新のサイズを取得します
  • performMapDataUpdate - マップ データバージョンの更新を実行します ( 可能な場合 )
  • cancelCurrentOperation - 実行 MapLoader 中の操作をキャンセルします

NMAMapLoader sharedMapLoader は、メソッドを使用して取得する必要があるシングルトンです。 次のコード例は、基本 NMAMapLoader 的な使用方法を示しています。

  • 開始します NMAMaploader
    - (void) initMapLoader
    {
      NMAMapLoader *mapLoader = [NMAMapLoader sharedMapLoader];
      mapLoader.delegate = self;
      ...
      [[NMAMapLoader sharedMapLoader] getMapPackages];
      ...
     } 
  • マップパッケージをインストールします
    - (void) startInstall
    {
      ...
      NSArray *packageArray = [[NSArray alloc]
        initWithObjects:packageToModify, nil];
      [[NMAMapLoader sharedMapLoader]
        installMapPackages:packageArray];
      ...
    }
    

NMAMapLoader 操作は非同期で実行されます。 これらの操作の結果が利用可能になると、マップローダーデリゲートに渡されます。 デリゲートに NMAMapLoader delegate はプロパティを使用してアクセス NMAMapLoaderDelegate し、プロトコルを実装する必要があります。 NMAMapLoaderDelegate プロトコルのコールバックは次のとおりです。

  • mapLoader:didUpdateProgress: - NMAMapLoader 操作中に呼び出され、その操作の現在の進行状況を示します
  • mapLoader:didInstallPackagesWithResult: - NMAMapLoader installMapPackages: メソッド呼び出しに関連付けられているコールバック
  • mapLoader:didUninstallPackagesWithResult: - NMAMapLoader uninstallMapPackages: メソッド呼び出しに関連付けられているコールバック
  • mapLoader:didFindUpdate:fromVersion:toVersion:withResult: - NMAMapLoader checkForMapDataUpdate メソッド呼び出しに関連付けられているコールバック
  • mapLoader:didGetUpdateSize:withResult: - NMAMapLoader getMapDataUpdateSize メソッド呼び出しに関連付けられているコールバック
  • mapLoader:didUpdateWithResult: - NMAMapLoader performMapDataUpdate メソッド呼び出しに関連付けられているコールバック
  • mapLoader:didGetMapPackages:withResult: - NMAMapLoader getMapPackages メソッド呼び出しに関連付けられているコールバック
  • mapLoader:didGetMapPackage:atGeoCoordinates:withResult: - NMAMapLoader getMapPackageAtGeoCoordinates: メソッド呼び出しに関連付けられているコールバック
  • mapLoaderDidLoseConnection: - NMAMapLoader 操作中にがサーバ接続を失った場合に送信されるコールバック
  • mapLoaderDidFindConnection: - が NMAMapLoader 接続を再確立したときにコールバックが送信されました
注 : NMAMapLoader がマップパッケージをダウンロードしている間にアプリがバックグラウンドに切り替えられた場合、ダウンロードはバックグラウンドで最大 3 分間継続されます。 この時間内にダウンロードが完了しなかった場合、アプリが再びアクティブになるとダウンロードが再開されます。
注 : 接続が失われたためにマップローダーの操作が中断された場合、接続が復元されると自動的に再開されます ( この期間中に操作が明示的にキャンセルされていない場合 ) 。

GitHub でのマップローダの例

この機能を示す例について は、 https://github.com/heremaps/ (Obj-C) および https://github.com/heremaps/ (Swift) を参照してください。

NMAMapLoaderResult 列挙型 (enum)

NMAMapLoaderResult NMAMapLoader 操作のステータスを表す 列挙型 (enum) データ型です。 ステータスは NMAMapLoaderDelegate プロトコルを介して返されます。

  • NMAMapLoaderResultSuccess - NMAMapLoader 操作がエラーなしで完了しました。
  • NMAMapLoaderResultInvalidParameters - NMAMapLoader 無効なパラメータで操作が呼び出されました。
  • NMAMapLoaderResultOperationCancelled - NMAMapLoader cancelCurrentOperation の呼び出しによって操作がキャンセルされました。
  • NMAMapLoaderResultConnectionFailed - マップ データサーバーへの接続を確立できません。
  • NMAMapLoaderResultInitializationFailed - NMAMapLoader を初期化できませんでした。

NMAMapLoader デバイスに接続がある場合にのみ操作が実行されるように、アプリケーションレベルでネットワーク接続を確認することをお勧めします。

NMAMapPackage インターフェイス

ダウンロード可能なマップ データパッケージは、ワールドマップを表すルートマップパッケージを含むツリー構造で表されます。 NMAMapPackage インタフェースは、このツリー構造へのアクセスに使用されるモデルを表します。 クラスのプロパティ NMAMapPackage は次のとおりです。

  • parent
  • children
  • packageld
  • sizeOnDisk
  • installed

installed 特定 NMAMapPackage のインスタンスの状態は、ディスク上のマップ データへの変更を反映するように動的に更新されません。 たとえば NMAMapPackage 、を使用してインスタンスを取得 getMapPackages し、 installMapPackages このパッケージをパラメータとしてメソッドを呼び出した場合 didInstallPackagesWithResult 、コールバックが発生してもこのパッケージの状態は変わりません。 代わりに、最新のインストール状態の NMAMapPackage を取得する場合は、 NMAMapLoader rootPackage プロパティにアクセスします。 rootPackage このプロパティは、インストール操作のたびに新しいオブジェクトインスタンスで更新されます。

差分アップデート

MapLoader では、マップ データバージョンを更新して、利用可能な最新のマップ データをユーザーに提供する機能が提供されます。 マップ データバージョンは、 MapLoader を使用してプレインストールされたマップ データだけでなく、オンデマンドでダウンロードされたデータにも適用されます。

マップ データバージョンは、マップ データがダウンロードされているかどうかにかかわらず、システム全体のすべてのマップ データで一貫性があります。 あるマップバージョンのデータと別のマップバージョンのデータの一部をディスクキャッシュで同時に使用することはできません。 そのため、地図のバージョンを最新の状態に保つことが重要です。

2 つの以前のリリースから最新のマップ データリリースに更新する場合は、差分更新を実行できます。 変更内容のみがダウンロードされるため、通常は差分アップデートのダウンロードは小規模です。 たとえば、 2017 年第 4 四半期または 2017 年第 3 四半期のリリースから 2018 年第 1 四半期のマップ データリリースに更新する場合、増分更新またはパッチが使用されます。 パッチが利用できない場合( 2017 年第 2 四半期から 2018 年第 1 四半期までのアップデートなど)、すべてのマップ データパッケージが再ダウンロードされ、ダウンロードサイズが大幅に増加します。 マップバージョンの更新は checkForMapDataUpdate 、および performMapDataUpdate のメソッドを使用して公開 NMAMapLoaderされます。

注 : マップ データの更新を実行する際には、マップ データを使用する可能性のあるすべての HERE SDK 機能 ( マップのパン、検索、ルーティングなど ) を一時停止し、操作が完了したら再開することをお勧めします。

データグループ

マップパッケージは複数のグループで構成され、各グループには異なるタイプのマップ データが含まれています。 これらのグループの一部は、オフラインで使用するためにマップパッケージをダウンロードする前に、アプリケーションのニーズに応じて選択または選択解除できます。 オプションのデータグループは NMAMapDataGroup 列挙型 (enum) で指定します。 ダウンロードするデータグループを選択または選択解除するには、 NMAMapLoader selectDataGroup: または deselectDataGroup: メソッドに適切な 列挙型 (enum) 値を渡します。 isDataGroupSelected: メソッドを使用して、データグループの現在の選択状態を照会できます。

選択したマップローダーのデータグループは、今後のすべてのインストール操作に使用されます。 ただし、データグループの選択内容を変更しても、以前にインストールされたパッケージには影響がありません。 これらのパッケージを更新する performMapDataUpdate には、データグループの選択内容を変更した後でを呼び出します。

注 : 既定のデータグループの選択は、一部のアプリケーションに適していない可能性があります。 ディスク容量の使用量を最小限に抑えるために、オフライン マップのダウンロードを許可するすべてのアプリケーションが、必要なデータグループのみをダウンロードするようにすることをお勧めします。 たとえば、アプリが CAR のみをサポートしている場合、NMAMapDataGroupTruckAttributesNMAMapDataGroupScooterAttributesなどのデータグループを除外できます。
注 : すべてのデータグループが使用するディスク容量は、マップ領域とマップバージョンに注意を払う必要があります。 たとえば、 2020 年第 4 四半期の地図リリースのためのベルリン / ブランデンブルク地域のすべてのデータグループの合計サイズは、利用可能なすべてのデータグループでパッケージをダウンロードした場合、約 5% ( 20 MB )になります。