Déployer des données hors connexion locales avec votre application

Deux principaux processus permettent de déployer des données hors connexion. L'un consiste à copier vos données dans un emplacement connu sur votre et à utiliser AppStudio Framework pour déterminer l'emplacement de stockage. L'autre consiste à regrouper vos données en tant que ressource Qt au sein de l'application et de copier les données dans un emplacement connu une fois l'application installée sur l'appareil. Cette rubrique décrit la procédure relative à chacun de ces workflows.

Déployer manuellement des données avec votre application

Pour déployer manuellement des données sur votre appareil, procédez comme suit :

  1. Créez vos paquetages de tuiles (TPK), géodatabases, localisateurs hors connexion et jeux de données réseau hors connexion dans ArcGIS Pro.
  2. Lorsque vous référencez ces fichiers dans le code QML, désignez l'emplacement relatif dans lequel vos données sont stockées.
    import ArcGIS.AppFramework 1.0
    
    property string localTPK: AppFramework.userHomePath + "/ArcGIS/Runtime/data/Topographic.tpk"
  3. Avant de générer votre application, dans l'outil Paramètres accessible sur le volet latéral, activez Stockage externe sur l'onglet Fonctionnalités.
  4. A l'aide d'un explorateur de fichiers, copiez les données dans l'emplacement de données spécifié.

    Chaque système d'exploitation possède un emplacement de données similaire, tout en étant légèrement différent, comme suit :

    • 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. En veillant à stocker les données à ces emplacements et à utiliser la fonction AppFramework.userHomeFolder, vous êtes certain que votre application sera en mesure de lire et d'écrire les données sur n'importe quel système d'exploitation déployé.

    Remarque :

    Si vous utilisez un appareil iOS, vous devez utiliser une application de navigateur de fichiers iOS. Sur macOS version 10.15 Catalina ou version ultérieure, vous pouvez utiliser Finder comme navigateur de fichiers. Sur les versions antérieures de macOS ou sur Windows, vous pouvez utiliser iTunes ou une autre application de navigateur de fichiers.

Regrouper vos données en tant que ressource Qt

Même si Qt prend en charge la lecture à partir de ressources intégrées, ce n'est pas le cas du module Runtime Core sous-jacent de Esri, car il repose sur la norme C E/S, qui ne prend pas en charge les ressources Qt. En d'autres termes, vous pouvez regrouper vos données hors connexion avec votre application en vue du déploiement, mais vous devrez copier les données à partir de la ressource intégrée vers un emplacement physique sur l'appareil. AppStudio Framework contient une fonction copyFile qui copie les fichiers du fichier de ressources intégrées vers un emplacement physique.

Pour regrouper vos données avec votre application, procédez comme suit :

  1. Ajoutez une fonction JavaScript à votre application, qui utilise la fonction copyFile et renvoie le chemin vers vos données en sortie.
  2. Définissez la propriété de chemin d'accès de votre composant de façon à ce qu'elle corresponde à la fonction JavaScript qui effectue la copie.

    Au lancement de l'application, elle exécute la fonction copyFile et le composant qui fait appel aux données locales se charge correctement.

  3. Avant de générer votre application, sur le volet latéral, accédez à Settings (Paramètres) > Capabilities (Fonctionnalités) et activez External Storage (Stockage externe).

Le code suivant illustre la copie de données à partir de la ressource intégrée vers un emplacement physique . Pour que cet exemple de code fonctionne, ajoutez le fichier source (dans cet exemple, Topographic.tpk) à votre projet, dans un sous-dossier nommé Data (Données).

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

L’emplacement en sortie de cet exemple pour chaque plateforme est le même que ce qui est indiqué dans la section Déployer manuellement des données avec votre application ci-dessus. Ce workflow est optimal avec des fichiers de plus petite taille (par exemple, de petites géodatabases ou de petits paquetages de tuiles). Pour des raisons de performances, il n'est pas conseillé pour les jeux de données volumineux.