Bereitstellen lokaler Offline-Daten mit Ihrer App

Es gibt zwei Haupt-Workflows, mit denen Sie Offline-Daten bereitstellen können. Eine Möglichkeit besteht darin, Ihre Daten in ein bekanntes Verzeichnis auf Ihrem Gerät zu kopieren und das Verzeichnis mit dem AppStudio-Framework festzulegen. Die zweite Möglichkeit ist die Erstellung eines Pakets Ihrer Daten als Qt-Ressource in der App und das Kopieren der Daten in ein bekanntes Verzeichnis, nachdem die App auf dem Gerät installiert wurde. In diesem Themenbereich werden die Schritte für jeden dieser Workflows veranschaulicht.

Manuelles Bereitstellen von Daten mit Ihrer App

Um Daten manuell auf Ihrem Gerät bereitzustellen, führen Sie die folgenden Schritte aus:

  1. Erstellen Sie TPKs, Geodatabases, Offline-Locators und Offline-Netzwerk-Datasets in ArcGIS Pro.
  2. Wenn Sie diese Dateien in QML-Code referenzieren, verweisen Sie auf den relativen Speicherort, in dem Ihre Daten gespeichert werden.
    import ArcGIS.AppFramework 1.0
    
    property string localTPK: AppFramework.userHomePath + "/ArcGIS/Runtime/data/Topographic.tpk"
  3. Aktivieren Sie vor dem Erstellen der App im Werkzeug Einstellungen, das über den Seitenbereich verfügbar ist, die Option Externer Speicher auf der Registerkarte Funktionen.
  4. Kopieren Sie die Daten mithilfe einer Datei-Explorer-App in das angegebene Verzeichnis.

    Die einzelnen Betriebssysteme verfügen über die folgenden ähnlichen, aber leicht abweichenden Datenverzeichnisse:

    • 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. Durch die Speicherung der Daten in diesen Verzeichnissen und die Verwendung der Funktion AppFramework.userHomeFolder wird sichergestellt, dass die App Daten in jedem bereitgestellten Betriebssystem lesen und speichern kann.

    Hinweis:

    Wenn Sie ein iOS-Gerät nutzen, müssen Sie eine iOS-Datei-Browser-App verwenden. Unter macOS ab Version 10.15 Catalina können Sie Finder als Datei-Browser verwenden. In älteren Versionen von macOS oder unter Windows können Sie iTunes oder eine andere Datei-Browser-App verwenden.

Erstellen eines Pakets Ihrer Daten als Qt-Ressource

Obwohl Qt das Lesen aus eingebetteten Ressourcen unterstützt, trifft dies für das zugrunde liegende Laufzeitmodul von Esri nicht zu, da es auf Standard-C-I/O basiert, das keine Qt-Ressourcen unterstützt. Dies bedeutet, dass Sie mit Ihrer App ein Paket Ihrer Offline-Daten zur Bereitstellung erstellen können, die Daten jedoch aus der eingebetteten Ressource in ein physisches Verzeichnis auf dem Gerät kopieren müssen. Das AppStudio-Framework enthält die Funktion copyFile, mit der die Dateien aus der eingebetteten Ressourcendatei in ein physisches Verzeichnis kopiert werden.

Zum Erstellen eines Pakets Ihrer Daten mit Ihrer App führen Sie die folgenden Schritte aus:

  1. Fügen Sie der App eine JavaScript-Funktion hinzu, die die Funktion copyFile verwendet und den Pfad zu Ihren Ausgabedaten zurückgibt.
  2. Legen Sie die Pfadeigenschaft Ihrer Komponente entsprechend der JavaScript-Funktion fest, die den Kopiervorgang ausführt.

    Wenn Ihre App gestartet wird, führt sie die Funktion copyFile aus, und die Komponente, die die lokalen Daten nutzt, wird ordnungsgemäß geladen.

  3. Bevor Sie die App erstellen, navigieren Sie im Seitenbereich zu Einstellungen > Funktionen, und aktivieren Sie Externer Speicher.

Der folgende Code veranschaulicht das Kopieren von Daten aus der eingebetteten Ressource in einen physischen Speicherort. Damit dieses Codebeispiel funktioniert, müssen Sie dem Projekt die Quelldatei (in diesem Beispiel: Topographic.tpk) in einem Unterordner namens "Data" hinzufügen.

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()
                }
            }
        }
    }
}

Das Ausgabeverzeichnis dieses Beispiels für die jeweilige Plattform entspricht dem im Abschnitt Manuelles Bereitstellen von Daten mit Ihrer App weiter oben. Dieser Workflow funktioniert am besten mit kleineren Dateien (z. B. kleinen Geodatabases oder TPKs); aus Performance-Gründen wird er nicht für größere Datasets empfohlen.