Distribuire i dati offline in locale con l'app

È possibile scegliere tra due flussi di lavoro principali per distribuire i dati offline. Uno prevede la copia dei dati su un'ubicazione nota del dispositivo e impiegare il framework AppStudio per determinare il percorso di archiviazione. L'altro prevede invece di raggruppare i dati come risorsa Qt nell'ambito dell'app, quindi copiarli in un'ubicazione nota dopo aver installato l'app sul dispositivo. La procedura da seguire per ciascun flusso di lavoro è descritta in questa stessa sezione.

Distribuire i dati manualmente con l'app

Per distribuire i dati manualmente sul dispositivo, attenersi alla procedura seguente:

  1. Creare i TPK, i geodatabase, i localizzatori offline e i set di dati di rete offline in ArcGIS Pro.
  2. Per fare riferimento a questi file nel codice QML, fare riferimento all'ubicazione in cui i dati saranno archiviati.
    import ArcGIS.AppFramework 1.0
    
    property string localTPK: AppFramework.userHomePath + "/ArcGIS/Runtime/data/Topographic.tpk"
  3. Prima di creare l'app, nello strumento Impostazioni accessibile nel pannello laterale, scegliere di abilitare Archivio esterno nella scheda Funzionalità.
  4. Utilizzando un'app per l'esplorazione dei file, copiare i dati nella posizione dati specificata.

    Ogni sistema operativo dispone di un'ubicazione dati leggermente diversa:

    • 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. Archiviando i dati in queste ubicazioni e impiegando la funzione AppFramework.userHomeFolder, si garantisce che l'app sarà in grado di leggere e scrivere i dati su qualsiasi sistema operativo distribuito.

    Nota:

    Se si usa un dispositivo iOS, è necessario usare un'app browser di file iOS. Sulla versione macOS 10.15 Catalina o successivi, è possibile usare Finder come browser di file. Nelle versioni precedenti di macOS o su Windows, è possibile utilizzare iTunes o un'altra applicazione di ricerca file.

Raggruppare i dati come risorsa Qt

Sebbene Qt supporti la lettura da risorse incorporate, il runtime core sottostante di Esri non la supporta, poiché si basa su C I/O standard, che non supporta le risorse Qt. Ciò significa che è possibile raggruppare i dati offline con l'app per distribuirli, ma occorre copiare i dati dalla risorsa incorporata su un'ubicazione fisica sul dispositivo. Il framework AppStudio contiene una funzione copyFile che copia i file dal file della risorsa incorporata a un'ubicazione fisica.

Per raggruppare i dati con l'app, procedere come segue:

  1. Aggiungere una funzione di JavaScript all'app che impiega la funzione copyFile e restituisce il percorso dei dati di output.
  2. Sul componente, impostare la stessa proprietà percorso della funzione JavaScript che esegue la copia.

    Quando si avvia l'app, questa eseguirà la funzione copyFile e il componente che utilizza i dati in locale verrà caricato correttamente.

  3. Prima di creare l'app, nel pannello laterale, passare alla scheda Impostazioni > Funzionalità, e abilitare Archivio esterno.

Il codice seguente mostra la copia dei dati dalla risorsa incorporata in un'ubicazione fisica. È necessario aggiungere al progetto il file di origine (in questo esempio, Topographic.tpk), in una sottocartella denominata Dati, affinché questo esempio di codice funzioni.

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'ubicazione di output di questo esempio per ciascuna piattaforma è la stessa di quella elencata nella sezione Distribuire i dati manualmente con l'app sopra riportata. Questo flusso di lavoro funziona al meglio con file più piccoli (ad esempio, piccoli geodatabase o TPK); per motivi di prestazioni, non è consigliato per grandi set di dati.