Существуют два основных рабочих процесса, которые можно использовать для развертывания автономных данных. Один из вариантов – скопировать данные в известное местоположение на устройстве и использовать AppStudio Framework для определения места хранения. Второй вариант – собрать данные в качестве ресурса Qt в приложении и скопировать эти данные в известное местоположение уже после установки приложения на устройство. Ниже дается пошаговое описание каждой из этих процедур.
Ручное развертывание данных в вашим приложении
Для ручного развертывания данных в вашем устройстве выполните следующие действия:
- Создайте свои TPK, базы геоданных, автономные локаторы и автономные наборы сетевых данных в ArcGIS Pro.
- Когда вы будете ссылаться на эти файлы в коде QML, укажите место, в котором будут храниться ваши данные.
import ArcGIS.AppFramework 1.0 property string localTPK: AppFramework.userHomePath + "/ArcGIS/Runtime/data/Topographic.tpk"
- Перед созданием своего приложения выберите в инструменте Настройки боковой панели выберите Внешнее хранилище на вкладке Возможности.
- Используя проводник файлов, скопируйте эти данные в указанное местоположение данных.
Для разных операционных системы местоположения данных немного различаются:
- 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.
Убедитесь в том, что данные находятся в соответствующих папках и, используя функцию AppFramework.userHomeFolder, вы можете быть уверены, что приложение может считывать и записывать данные в любой операционной системе.
Примечание:
Если вы работаете на устройстве iOS, необходимо использовать приложение для управления файлами iOS. В версии macOS 10.15 Catalina или более новой, для управления файлами можно использовать Finder. В предыдущих версиях macOS или на Windows, можно использовать iTunes или другое приложение для работы с файлами.
Привязка данных в качестве ресурсов Qt
Хотя Qt поддерживает чтение из вложенных ресурсов, код базового ядра Runtime Esri – не поддерживает, поскольку основывается на стандартном I/O, не поддерживающем ресурсы Qt. Это означает, что вы можете связать свои автономные данные с развертываемым вами приложением, но для этого вам потребуется скопировать данные с вложенного ресурса в имеющуюся на устройстве папку. AppStudio Framework содержит функцию copyFile, копирующую файлы из связанного ресурса в физическое местоположение.
Чтобы связать ваши данные с приложением, выполните следующие действия.
- Добавьте функцию JavaScript в свое приложение, использующую функцию copyFile и возвращающую путь к выходным данным.
- Задайте свойство path вашего компонента равным функции JavaScript, которая выполняет копирование.
При запуске приложения оно выполнит функцию copyFile, и компонент, использующий локальные данные, будет загружен правильно.
- Перед созданием приложения в боковой панели перейдите в Настройки > Возможности и включите Внешнее хранилище.
В приведенном ниже коде показано копирование данных из встроенного источника в физическое местоположение. Чтобы этот пример кода сработал, вам потребуется добавить в проект, в подпапку с именем 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); из соображений производительности не рекомендуем вам использовать большие наборы данных.