アプリへのローカル オフライン データの配置

オフライン データの配置に使用できる、2 つの主なワークフローがあります。 1 つは、データをデバイス上の既知の場所にコピーし、AppStudio Framework を使用して格納場所を特定するワークフローです。 もう 1 つは、アプリがデバイスにインストールされたら、データをアプリ内で Qt リソースとしてバンドルして、既知の場所にコピーするワークフローです。 このトピックでは、これらの各ワークフローの手順について説明します。

アプリへの手動によるデータ配置

デバイスにデータを手動で配置するには、次の手順に従います。

  1. ArcGIS Pro で、TPK、ジオデータベース、オフライン ロケーター、およびオフライン ネットワーク データセットを作成します。
  2. QML コードでこれらのファイルを参照する場合は、データが格納される相対的な場所を参照します。
    import ArcGIS.AppFramework 1.0
    
    property string localTPK: AppFramework.userHomePath + "/ArcGIS/Runtime/data/Topographic.tpk"
  3. アプリを構築する前に、サイド パネルから [設定] ツールにアクセスして、[機能] タブで [外部記憶装置] を有効にします。
  4. ファイル エクスプローラー アプリを使用して、指定されたデータの場所にデータをコピーします。

    各オペレーティング システムには、次のように、少しだけ異なるデータの場所が用意されています。

    • Android: Android/data/<your_app>/files/ArcGIS/Runtime/Data
    • iOS: <your_app>/Documents/ArcGIS/Runtime/Data
    • macOS: ~/ArcGIS/Runtime/Data
    • Windows: %userprofile%\ArcGIS\Runtime\Data
    • Ubuntu: $HOME/ArcGIS/Runtime/Data

  5. これらの場所にデータが格納されていることを確認し、AppFramework.userHomeFolder 関数を使用することによって、配置された任意のオペレーティング システム上でアプリがデータを確実に読み書きできるようになります。

    注意:

    iOS デバイスを使用している場合は、iOS ファイル ブラウザー アプリを使用する必要があります。macOS バージョン 10.15 Catalina 以降では、ファイル ブラウザーとして Finder を使用できます。 以前のバージョンの macOSWindows では、iTunes や別のファイル ブラウザー アプリを使用できます。

Qt リソースとしてのデータのバンドル

Qt は埋め込みリソースからの読み取りをサポートしますが、Esri の基本 Runtime Core はこれをサポートしません。これは、Runtime Core が、Qt リソースをサポートしない標準の C I/O に依存するためです。 つまり、配置に向けてオフライン データをアプリとバンドルできますが、埋め込みリソースからデバイス上の物理的な場所にデータをコピーする必要があります。 AppStudio Framework には、埋め込みリソース ファイルから物理的な場所にファイルをコピーする copyFile 関数が含まれています。

データをアプリとバンドルするには、次の手順に従います。

  1. copyFile 関数を使用して出力データへのパスを返す JavaScript 関数をアプリに追加します。
  2. コンポーネントのパス プロパティを、コピーを実行する JavaScript 関数と同じに設定します。

    アプリを起動すると、copyFile 関数が実行され、ローカル データを使用するコンポーネントが適切に読み込まれます。

  3. アプリを構築する前に、サイド パネルから [設定] > [機能] の順に移動して、 [外部記憶装置] を有効にします。

次のコードは、埋め込みリソースから物理的な場所へのデータのコピーを示しています。 このサンプル コードを実行するには、Data というサブフォルダーにあるプロジェクトにソース ファイル (このサンプルでは Topographic.tpk) を追加する必要があります。

import QtQuick 2.7
import QtQuick.Controls 2.1
import ArcGIS.AppFramework 1.0
import Esri.ArcGISRuntime 100.8

App {
    id: app
    width: 640 * AppFramework.displayScaleFactor
    height: 480 * AppFramework.displayScaleFactor

    property string fileName: "Topographic.tpk"
    property FileFolder sourceFolder: app.folder.folder("Data")
    property FileFolder destFolder: AppFramework.userHomeFolder.folder("ArcGIS/Runtime/Data")
    property string destPath: destFolder.filePath(fileName)
    property url destUrl: destFolder.fileUrl(fileName)

    function copyLocalData() {
        destFolder.makeFolder();
        sourceFolder.copyFile(fileName, destPath);
        return destUrl;
    }

    MapView {
        anchors.fill: parent

        Map {
            Basemap {
                ArcGISTiledLayer {
                    url: copyLocalData()
                }
            }
        }
    }
}

この例では、各プラットフォームの出力場所は、上記のセクション「アプリへの手動によるデータ配置」にリストされているものと同じです。 このワークフローは、小さなファイル (たとえば、小さなジオデータベースや TPK) に最適です。パフォーマンス上の理由から、大きなデータセットにはお勧めできません。