Развертывание данных офлайн с вашим приложением

Существуют два основных рабочих процесса, которые можно использовать для развертывания автономных данных. Один из вариантов – скопировать данные в известное местоположение на устройстве и использовать AppStudio Framework для определения места хранения. Второй вариант – собрать данные в качестве ресурса Qt в приложении и скопировать эти данные в известное местоположение уже после установки приложения на устройство. Ниже дается пошаговое описание каждой из этих процедур.

Ручное развертывание данных в вашим приложении

Для ручного развертывания данных в вашем устройстве выполните следующие действия:

  1. Создайте свои TPK, базы геоданных, автономные локаторы и автономные наборы сетевых данных в ArcGIS Pro.
  2. Когда вы будете ссылаться на эти файлы в коде QML, укажите место, в котором будут храниться ваши данные.
    import ArcGIS.AppFramework 1.0
    
    property string localTPK: AppFramework.userHomePath + "/ArcGIS/Runtime/data/Topographic.tpk"
  3. Перед созданием своего приложения выберите в инструменте Настройки боковой панели выберите Внешнее хранилище на вкладке Возможности.
  4. Используя проводник файлов, скопируйте эти данные в указанное местоположение данных.

    Для разных операционных системы местоположения данных немного различаются:

    • 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. Убедитесь в том, что данные находятся в соответствующих папках и, используя функцию AppFramework.userHomeFolder, вы можете быть уверены, что приложение может считывать и записывать данные в любой операционной системе.

    Примечание:

    Если вы работаете на устройстве iOS, необходимо использовать приложение для управления файлами iOS. В версии macOS 10.15 Catalina или более новой, для управления файлами можно использовать Finder. В предыдущих версиях macOS или на Windows, можно использовать iTunes или другое приложение для работы с файлами.

Привязка данных в качестве ресурсов Qt

Хотя Qt поддерживает чтение из вложенных ресурсов, код базового ядра Runtime Esri – не поддерживает, поскольку основывается на стандартном I/O, не поддерживающем ресурсы Qt. Это означает, что вы можете связать свои автономные данные с развертываемым вами приложением, но для этого вам потребуется скопировать данные с вложенного ресурса в имеющуюся на устройстве папку. AppStudio Framework содержит функцию copyFile, копирующую файлы из связанного ресурса в физическое местоположение.

Чтобы связать ваши данные с приложением, выполните следующие действия.

  1. Добавьте функцию JavaScript в свое приложение, использующую функцию copyFile и возвращающую путь к выходным данным.
  2. Задайте свойство path вашего компонента равным функции JavaScript, которая выполняет копирование.

    При запуске приложения оно выполнит функцию copyFile, и компонент, использующий локальные данные, будет загружен правильно.

  3. Перед созданием приложения в боковой панели перейдите в Настройки > Возможности и включите Внешнее хранилище.

В приведенном ниже коде показано копирование данных из встроенного источника в физическое местоположение. Чтобы этот пример кода сработал, вам потребуется добавить в проект, в подпапку с именем Data, исходный файл (в этом примере – Topographic.tpk).

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

В этом примере выходное местоположение одинаково для всех платформ, как показано в расположенном выше разделе Ручное развертывание данных в вашем приложении. Этот рабочий процесс лучше всего подходит для небольших файлов (к примеру, небольших баз геоданных или TPK); из соображений производительности не рекомендуем вам использовать большие наборы данных.