オフライン データの配置に使用できる、2 つの主なワークフローがあります。 1 つは、データをデバイス上の既知の場所にコピーし、AppStudio Framework を使用して格納場所を特定するワークフローです。 もう 1 つは、アプリがデバイスにインストールされたら、データをアプリ内で Qt リソースとしてバンドルして、既知の場所にコピーするワークフローです。 このトピックでは、これらの各ワークフローの手順について説明します。
アプリへの手動によるデータ配置
デバイスにデータを手動で配置するには、次の手順に従います。
- ArcGIS Pro で、TPK、ジオデータベース、オフライン ロケーター、およびオフライン ネットワーク データセットを作成します。
- QML コードでこれらのファイルを参照する場合は、データが格納される相対的な場所を参照します。
import ArcGIS.AppFramework 1.0 property string localTPK: AppFramework.userHomePath + "/ArcGIS/Runtime/data/Topographic.tpk"
- アプリを構築する前に、サイド パネルから [設定] ツールにアクセスして、[機能] タブで [外部記憶装置] を有効にします。
- ファイル エクスプローラー アプリを使用して、指定されたデータの場所にデータをコピーします。
各オペレーティング システムには、次のように、少しだけ異なるデータの場所が用意されています。
- 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
これらの場所にデータが格納されていることを確認し、AppFramework.userHomeFolder 関数を使用することによって、配置された任意のオペレーティング システム上でアプリがデータを確実に読み書きできるようになります。
注意:
iOS デバイスを使用している場合は、iOS ファイル ブラウザー アプリを使用する必要があります。macOS バージョン 10.15 Catalina 以降では、ファイル ブラウザーとして Finder を使用できます。 以前のバージョンの macOS や Windows では、iTunes や別のファイル ブラウザー アプリを使用できます。
Qt リソースとしてのデータのバンドル
Qt は埋め込みリソースからの読み取りをサポートしますが、Esri の基本 Runtime Core はこれをサポートしません。これは、Runtime Core が、Qt リソースをサポートしない標準の C I/O に依存するためです。 つまり、配置に向けてオフライン データをアプリとバンドルできますが、埋め込みリソースからデバイス上の物理的な場所にデータをコピーする必要があります。 AppStudio Framework には、埋め込みリソース ファイルから物理的な場所にファイルをコピーする copyFile 関数が含まれています。
データをアプリとバンドルするには、次の手順に従います。
- copyFile 関数を使用して出力データへのパスを返す JavaScript 関数をアプリに追加します。
- コンポーネントのパス プロパティを、コピーを実行する JavaScript 関数と同じに設定します。
アプリを起動すると、copyFile 関数が実行され、ローカル データを使用するコンポーネントが適切に読み込まれます。
- アプリを構築する前に、サイド パネルから [設定] > [機能] の順に移動して、 [外部記憶装置] を有効にします。
次のコードは、埋め込みリソースから物理的な場所へのデータのコピーを示しています。 このサンプル コードを実行するには、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) に最適です。パフォーマンス上の理由から、大きなデータセットにはお勧めできません。