Implementar datos sin conexión locales con la aplicación

Se pueden usar dos flujos de trabajo principales para implementar datos sin conexión. Una opción es copiar los datos en una ubicación conocida del dispositivo y usar el marco de AppStudio para determinar la ubicación de almacenamiento. La segunda opción es agrupar los datos como un recurso de Qt dentro de la aplicación y copiar los datos a una ubicación conocida una vez que la aplicación esté instalada en el dispositivo. En este tema se describen los pasos para cada uno de estos flujos de trabajo.

Implementar manualmente los datos con la aplicación

Para implementar manualmente los datos en el dispositivo, siga estos pasos:

  1. Cree los paquetes de teselas, las geodatabases, los localizadores sin conexión y los datasets de red sin conexión en ArcGIS Pro.
  2. Cuando haga referencia a estos archivos en el código QML, haga referencia a la ubicación relativa donde se guardarán los datos.
    import ArcGIS.AppFramework 1.0
    
    property string localTPK: AppFramework.userHomePath + "/ArcGIS/Runtime/data/Topographic.tpk"
  3. Antes de crear la aplicación, en la herramienta Configuración disponible en el panel lateral, elija habilitar Almacenamiento externo en la pestaña Capacidades.
  4. Usando una aplicación de explorador de archivos, copie los datos en la ubicación de datos especificada.

    Cada sistema operativo dispone de una ubicación de datos similar pero ligeramente distinta, tal como se muestra a continuación:

    • 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. Al asegurarse de que los datos se almacenan en estas ubicaciones y usando la función AppFramework.userHomeFolder puede estar seguro de que la aplicación puede leer y escribir datos en cualquier sistema operativo implementado.

    Nota:

    Si está utilizando un dispositivo iOS, debe utilizar una aplicación de explorador de archivos de iOS. En macOS versión 10.15 Catalina o posterior, puede usar Finder como explorador de archivos. En versiones anteriores de macOS, o en Windows, puede utilizar iTunes u otra aplicación de explorador de archivos.

Agrupar los datos como un recurso de Qt

Aunque Qt admite la lectura desde recursos integrados, el núcleo en tiempo de ejecución subyacente de Esri no lo admite, ya que se base en la E/S estándar de C, que no es compatible con los recursos de Qt. Esto significa que puede agrupar los datos sin conexión con la aplicación para la implementación, pero tendrá que copiar los datos del recurso integrado en una ubicación física en el dispositivo. El marco de AppStudio contiene una función copyFile que copia los archivos del archivo de recursos integrado en una ubicación física.

Para agrupar los datos con la aplicación, haga lo siguiente:

  1. Agregue una función de JavaScript a la aplicación que usa la función copyFile y devuelve la ruta a los datos de salida.
  2. Establezca la propiedad de la ruta del componente igual a la función de JavaScript que realiza la copia.

    Cuando se inicia la aplicación, se ejecuta la función copyFile y el componente que utiliza los datos locales se carga correctamente.

  3. Antes de compilar la aplicación, en el panel lateral, vaya a Configuración > Funcionalidades y habilite Almacenamiento externo.

El código siguiente demuestra la copia de datos del recurso integrado en una ubicación física. Debe agregar el archivo fuente (en este ejemplo, Topographic.tpk) a su proyecto, en una subcarpeta denominada Data, para que esta muestra de código funcione.

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

La ubicación de salida de este ejemplo para cada plataforma es la misma que se enumeró en la sección Implementar manualmente los datos con la aplicación anterior. Este flujo de trabajo funciona mejor con los archivos más pequeños (por ejemplo, geodatabases pequeñas o paquetes de teselas); por razones de rendimiento, no se recomienda para los datasets grandes.