Implantar dados offline locais com seu aplicativo

Há dois fluxos de trabalho principais que você pode usar para implantar dados offline. Uma opção é copiar seus dados para um local conhecido no seu dispositivo e utilizar o AppStudio Framework para determinar o local de armazenamento. A segunda opção é agrupar seus dados como um recurso Qt dentro do aplicativo e copiar os dados para um local conhecido após o aplicativo ser instalado no dispositivo. Este tópico descreve as etapas para cada um destes fluxos de trabalho.

Implantar dados manualmente com seu aplicativo

Para implantar dados manualmente no seu dispositivo, siga estas etapas:

  1. Crie seus TPKs, geodatabases, localizadores offline e conjuntos de dados de rede offline no ArcGIS Pro.
  2. Quando você referenciar estes arquivos no código QML, consulte o local relativo onde seus dados serão armazenados.
    import ArcGIS.AppFramework 1.0
    
    property string localTPK: AppFramework.userHomePath + "/ArcGIS/Runtime/data/Topographic.tpk"
  3. Antes de construir seu aplicativo, na ferramenta Configurações acessível no painel lateral, escolha habilitar Armazenamento Externo na guia Recursos.
  4. Usando um aplicativo explorador de arquivos, copie os dados para o local de dados especificado.

    Cada sistema operacional tem uma localização de dados similar, mas ligeiramente diferente, da seguinte forma:

    • 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. Garantindo que os dados sejam armazenados nesses locais e usando a função AppFramework.userHomeFolder, você pode ter certeza de que seu aplicativo pode ler e gravar dados em qualquer sistema operacional implantado.

    Anotação:

    Se você estiver utilizando um dispositivo iOS, você deve utilizar um aplicativo de navegador de arquivo do iOS. Na versão 10.15 Catalina macOS ou posterior, você pode utilizar Finder como um navegador de arquivo. Em versões anteriores do macOS, ou Windows, você pode utilizar iTunes ou outro aplicativo navegador de arquivo.

Agrupar seus dados como um recurso Qt

Embora o Qt suporte a leitura de recursos embutidos, o Core Runtime subjacente da Esri não, pois depende do padrão C I/O, que não suporta recursos do Qt. Isto significa que você pode agrupar seus dados offline com seu aplicativo para implantação, mas você precisará copiar os dados do recurso embutido para um local físico no dispositivo. O AppStudio Framework contém a função copyFile que copia arquivos do arquivo de recurso embutido para um local físico.

Para agrupar seus dados com seu aplicativo, faça o seguinte:

  1. Adicione uma função do JavaScript mo seu aplicativo que utiliza a função copyFile e retorna o caminho para seus dados de saída.
  2. Configure a propriedade de caminho do seu componente igual à função do JavaScript que executa a cópia.

    Quando seu aplicativo é iniciado, ele executa a função copyFile e o componente que usa os dados locais é carregado corretamente.

  3. Antes de construir seu aplicativo, no painel lateral, vá para Configurações > Recursos, e habilite Armazenamento Externo.

O seguinte código demonstra a cópia de dados do recurso embutido para um local físico. Você deve adicionar o arquivo de origem (neste exemplo Topographic.tpk) ao seu projeto, em uma subpasta chamada Dados, para que este exemplo 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()
                }
            }
        }
    }
}

O local de saída deste exemplo para cada plataforma é o mesmo que está listado na seção Implantar dados manualmente com seu aplicativo acima. Este fluxo de trabalho funciona melhor com arquivos menores (por exemplo, pequenos geodatabases ou TPKs); por razões de desempenho, não é recomendado para grandes conjuntos de dados.