Lokalne wdrażanie danych w trybie offline z aplikacją

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:

  1. Utwórz pliki TPK, geobazy, lokalizatory offline oraz zestawy danych sieciowych offline za pomocą oprogramowania ArcGIS Pro.
  2. 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"
  3. Przed utworzeniem aplikacji, w narzędziu Ustawienia dostępnym w panelu bocznym włącz opcję Pamięć zewnętrzna na karcie Funkcje.
  4. 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.

  5. 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:

  1. Dodaj do aplikacji funkcję JavaScript, która korzysta z funkcji copyFile i zwraca ścieżkę do danych wynikowych.
  2. 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.

  3. 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.