Istnieją dwie główne procedury wykonywania zadań, które umożliwiają wdrożenie danych w trybie offline. Pierwszą z nich jest skopiowanie danych do znanej lokalizacji na urządzeniu i określenie miejsca w pamięci za pomocą środowiska AppStudio Framework. Drugi sposób polega na utworzeniu pakietu danych w postaci zasobu Qt w aplikacji i skopiowaniu tych danych do znanej lokalizacji po zainstalowaniu aplikacji na urządzeniu. W tym temacie omówiono etapy obu tych procedur wykonywania zadań.
Ręczne wdrażanie danych z aplikacją
Aby ręcznie wdrożyć dane na urządzeniu, postępuj zgodnie z podanymi wskazówkami:
- Utwórz pliki TPK, geobazy, lokalizatory offline oraz zestawy danych sieciowych offline za pomocą oprogramowania ArcGIS Pro.
- Odwołując się do tych plików w kodzie QML, należy stosować względną lokalizację miejsca zapisu danych.
import ArcGIS.AppFramework 1.0 property string localTPK: AppFramework.userHomePath + "/ArcGIS/Runtime/data/Topographic.tpk"
- Przed utworzeniem aplikacji, w narzędziu Ustawienia dostępnym w panelu bocznym włącz opcję Pamięć zewnętrzna na karcie Funkcje.
- Korzystając z eksploratora plików, skopiuj dane do podanej lokalizacji danych.
W każdym systemie operacyjnym lokalizacja danych jest podobna, ale występują pewne różnice:
- 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.
Jeśli dane są przechowywane w tych lokalizacjach oraz używana jest funkcja AppFramework.userHomeFolder, można mieć pewność, że aplikacja może odczytywać i zapisywać dane w każdym wdrożonym systemie operacyjnym.
Notatka:
W przypadku urządzenia z systemem iOS należy użyć aplikacji do przeglądania plików iOS. W systemie macOS 10.15 Catalina lub nowszym można używać aplikacji Finder jako przeglądarki plików. We wcześniejszych wersjach systemu macOS lub w systemie Windows można używać aplikacji iTunes lub innej aplikacji do przeglądania plików.
Tworzenie pakietu danych w postaci zasobu Qt
Mimo że środowisko Qt obsługuje odczyt z osadzonych zasobów, podstawowe środowisko wykonawcze Esri nie zapewnia tej możliwości, ponieważ jego działanie opiera się na standardowych operacjach wejścia/wyjścia języka C, które nie obsługują zasobów Qt. Oznacza to, że można utworzyć pakiet danych w trybie offline do wdrożenia z aplikacją, jednak dane z osadzonego zasobu należy skopiować do lokalizacji fizycznej na urządzeniu. Środowisko AppStudio Framework zawiera funkcję copyFile, która kopiuje pliki z osadzonego pliku zasobu do lokalizacji fizycznej.
Aby utworzyć pakiet danych z aplikacją, wykonaj następujące czynności:
- Dodaj do aplikacji funkcję JavaScript, która korzysta z funkcji copyFile i zwraca ścieżkę do danych wynikowych.
- Ustaw właściwość ścieżki (path) komponentu na taką samą, jaka jest używana w funkcji JavaScript wykonującej kopiowanie.
Po uruchomieniu aplikacji wykonywana jest funkcja copyFile i komponent używający danych lokalnych jest poprawnie ładowany.
- Przed utworzeniem aplikacji przejdź na panelu bocznym do opcji Ustawienia > Funkcje, a następnie włącz opcję Pamięć zewnętrzna.
Poniższy kod przedstawia kopiowanie danych z osadzonego zasobu do lokalizacji fizycznej. Wymagane jest dodanie pliku źródłowego (w tym przykładzie jest to Topographic.tpk) do projektu w podfolderze o nazwie Data, aby ten kod przykładowy zadziałał.
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()
}
}
}
}
}
Lokalizacja wynikowa w tym przykładzie jest w przypadku każdej platformy taka sama, jak wymieniona w powyższej sekcji Ręczne wdrażanie danych z aplikacją. Ta procedura wykonywania zadań daje najlepsze rezultaty w przypadku mniejszych plików (na przykład małe geobazy lub pliki tpk). Ze względu na wydajność nie jest zalecana w przypadku dużych zestawów danych.