m.glasesri-de-esridist

Geodaten? Überall! - Mit ArcGIS Runtime Daten offline verwalten und erfassen

Blog Post created by m.glasesri-de-esridist Employee on Jan 29, 2015

Die Anforderungen wandeln sich. War man früher bei der digitalen Datenbearbeitung ausschließlich aufs Büro festgelegt, hat man heute mehr und mehr die Möglichkeit, auch unterwegs diese Arbeit zu erledigen.

 

In vielen Szenarien ist das auch notwendig: Die Prüfung von Straßenschäden durch die Straßenmeisterei zum Beispiel – keine Nachbearbeitung von auf Papier erfassten Informationen mehr. Stattdessen eine ortsbezogene Erfassung von Daten, angereichert mit Schadensbildern und ein sofortiger Informationsfluss, auf den ein Disponent augenblicklich reagieren kann.

 

Oder am Beispiel einer Forstverwaltung: Wo keine Adressdaten zur Verfügung stehen, braucht man GPS-Daten, um Holzlagerplätze zu verwalten und wieder zu finden. Das ermöglicht es auch ortsunkundigen Lastwagenfahrern eine Lagebeschreibung oder gar eine Wegeführung anzubieten.

 

Die Technologie dafür existiert seit einigen Jahren und wird von Esri in verschiedenen Produkten angeboten, die je nach Anforderung ideal passen. Eines der jüngsten Mitglieder dieser Produktfamilie ist das ArcGIS Runtime SDK for .NET. Dabei handelt es sich um ein Entwicklerwerkzeug für die Microsoft Plattform, mit dem Anwendungen für Windows Desktop, Windows Store und Windows Phone erstellt werden können – also für das ganze Spektrum vom Telefon über Tablet bis hin zum klassischen Desktop. Und das mit nur einem Framework.

 

Allen „ArcGIS Runtime“-SDKs gemein ist die Offline-Funktionalität. Diese mit 10.2.3 eingeführte Kernfunktionalität bringt alle Werkzeuge mit, um Daten lokal und ohne Netzwerkverbindung zu verwalten und anschließend mit einem zentralen Datenbestand (wie der ArcGIS Online Cloud) zu synchronisieren. Dabei sind Architekturen möglich, welche die unterschiedlichen ArcGIS Produkte miteinander kombiniert: In einer von Esri Deutschland realisierten Collector Light Demo wird gezeigt, dass ein .Net Client und ein Java Client – jeweils basierend auf einem ArcGIS Runtime SDK – Daten offline verwalten können. Diese Demo geht sogar so weit, dass hier der Offline-Cache einheitlich aufgebaut und damit für beide Klienten gleichermaßen nutzbar ist.

 

Am Beispiel der .NET Demo sollen ein paar Abläufe erklärt und ein paar Tipps gegeben werden, die helfen können eine eigene Anwendung zu realisieren. Alle gezeigten Codeteile und Screenshots werden Sie so oder ähnlich im Demoprojekt wiederfinden.

 

Das Demoprojekt ist nach dem MVVM Konzept aufgebaut und nutzt ein 3rd Party Toolkit namens MVVM Light. Das Konzept sieht eine Entkoppelung der UI von der Business Logik vor, wodurch Oberflächen austauschbar werden und man die Logikschicht in unterschiedlichen Anwendungen auf verschiedenen Plattformen wiederverwenden kann.

 

Kurz zur Idee der Demo Anwendung: Man kann sich über einen ArcGIS Online Account an der Esri Cloud anmelden und anschließend nach Karten suchen, die für eine Offline-Nutzung eingerichtet sind. Bewegt man sich mit dem Account in einer Organisation, so sieht man nicht nur seine eigenen Karten, sondern alle, die für eine gemeinsame Nutzung von Kollegen freigegeben worden sind. Beliebig kann man eine Karte auswählen und eine Version davon offline verfügbar machen, welche man dann auch ohne Netzwerkverbindung verwenden kann. Auch Editierung von Daten ist damit möglich.

 

Die Anwendung registrieren

Die Demo nutzt Daten die in der ArcGIS Cloud liegen. Folglich benötigt man einen Zugang zu ArcGIS Online oder aber zu Portal for ArcGIS, falls Sie dieses im Einsatz haben sollten.

 

Sollten Sie noch keinen ArcGIS Online Zugang haben ist hier die gute Nachricht: Sie können sich einen kostenfreien ArcGIS for Developers Account einrichten, mit dem Sie nicht nur die Demo ausprobieren sondern eigene Anwendungen programmieren und Daten nutzen können. Weitere Informationen zur Einrichtung und den Möglichkeiten mit einem ArcGIS for Developers Account erfahren Sie unter https://developers.arcgis.com/en/sign-up.

 

Sobald Sie sich einen ArcGIS for Developers Account eingerichtet haben können Sie sich  damit unter http://www.arcgis.com einloggen („Sign In“). Wechseln Sie zu „Eigene Inhalte“, hier sehen Sie ihre individuell angelegten ArcGIS Online Inhalte. Damit eine Anwendung mit ArcGIS Online kommunizieren und dort Daten holen darf muss diese zunächst erst registriert werden. Um dies durchzuführen wählen Sie unter „Elemente Hinzufügen“ den Punkt „Eine Anwendung“ aus. Im folgenden Dialog selektieren Sie „Anwendung“ und geben anschließend unter Titel einen von Ihnen frei vergebenen Titel ein (wenn Sie später eine Anwendung selbst entwickeln möchten, dann natürlich den Namen Ihrer eigenen Anwendung). Die Freitext-Eingabe bei Tags ist verpflichtend, da in ArcGIS Online über Schlagwörter gesucht werden kann und so thematisch ähnliche Objekte zu finden sind. Was Sie hier eingeben bleibt Ihnen überlassen, ein thematischer oder technologischer Bezug ist in jedem Fall sinnvoll.

1.png

Mit „Element hinzufügen“ wird die Registrierung abgeschlossen.

 

Entscheidend für uns ist die sogenannte Client ID. Dies ist eine in ArcGIS Online eindeutig vergebene ID, mit der eine Anwendung sich bei ArcGIS Online authentifizieren kann. Dies ist Teil der notwendigen Anwendungslizenzierung, über die festgelegt wird, welche Funktionalitäten Sie in der Anwendung nutzen können.

 

Wenn Sie das Element „My cool App“ in der Übersicht „Eigene Inhalte“ öffnen, dann sehen Sie die Elementeigenschaften. Hier gibt es die Rubrik „App-Registrierung“, die man mit Klick auf „Registrierte Informationen“ ausklappen kann, dann erscheint eine Übersicht über die Registrierungsinformationen. Die oben erwähnte Client ID entspricht hier der App-ID und ist für uns die Referenz, welche wir fortan für unsere Demoanwendung benötigen werden:

2.png

 

Hat mal jemand eine Karte?

Dies war der erste Teil der Vorbereitungen, damit haben wir einen Benutzer-Account und wir haben eine Client ID für unsere Anwendung. Was aber noch fehlt sind Karten, die wir anschließend auch offline nutzen können. Denn würden wir jetzt mit der Demo arbeiten, so könnten wir uns zwar erfolgreich anmelden, hätten anschließend bei der Suche aber keine Treffer.

 

Also erzeugen wir uns nun noch eine Karte, genauer gesagt, eine Web Map. Gehen Sie dazu zu den „Eigenen Inhalten“. Hier sehen Sie bereits Ihre registrierte Anwendung.

3.png

Eine neue Karte erstellen Sie nun mit „Erstellen->Karte“. Im folgenden Eingabefenster geben wir der Karte einen Titel (um ein einheitliches Schema beizubehalten: „My cool Map“) und definieren Tags. Tags sind auch hier wieder notwendig, über diese lassen sich Karten später durch Stichworte finden. Es empfehlen sich thematische und örtliche Schlagwörter wie „offline“ und „München“.

 

Wenn Sie die Karte abschließend mit „Ok“ anlegen, so sehen Sie als nächstes eine leere Weltkarte. Hier können Sie die Grundkarte nach Belieben ändern, vor allem aber Kartenlayer mit Daten hinzufügen. Das können Ihre eigenen Daten sein oder aber öffentlich verfügbare Daten.

Gehen Sie auf „Hinzufügen->Layer suchen“. Geben Sie in der Suche „Schadensmeldung Freising“ und bei Ort „ArcGIS Online“ ein. Entfernen Sie den Haken bei „Innerhalb der Kartenausdehnung“, falls Sie kein Ergebnis erhalten. Fügen Sie diese Daten mit „Hinzufügen“ Ihrer Karte hinzu. Wählen sie den Schadenslayer an und klicken auf „Zoomen auf“, dadurch wird der aktuelle und auch künftige Start-Kartenausschnitt geändert. Speichern Sie die Karte und wechseln Sie zurück in die Ansicht „Eigene Inhalte“.

 

Sie sehen nun einen weiteren Eintrag vom Typ Web Map, die eben angelegte Karte. Klicken Sie auf den Namen der Karte, dadurch gelangen Sie in die Eigenschaftsansicht. Eine dieser Eigenschaften nennt sich „Offline-Modus“, hinter der bereits „Aktiviert“ steht. Um die Karte offline nutzen zu können ist diese Einstellung notwendig. Sollte bei Ihnen „Deaktiviert“ stehen, so klicken Sie auf „Bearbeiten“ und setzen Sie den Haken bei „Offline-Modus aktivieren“.

 

Wer bin ich?

Die notwendigen Vorbereitungen sind damit abgeschlossen, nun können wir uns der Demo Anwendung widmen. Wird diese das erste Mal gestartet so verlangt sie die Eingabe einer App ID. Geben Sie hier die Client ID an, die wir bei der Registrierung der Anwendung bekommen haben.

4.png

Nach dem Speichern der App ID gelangen Sie zum Startbildschirm.

 

Der erste Weg führt zur Anmeldung, wo es zum ersten Mal spannend wird. Hier erscheint nämlich eine Anmeldeseite:

5.png

Was daran ist nun interessant? Nun, bei der Anmeldeseite handelt es sich um dynamisch geladenen Webcontent, der in einem Browser-Control angezeigt wird. Je nach angefragter URL wird der Inhalt sich etwas vom abgebildeten Screenshot unterscheiden, zum Beispiel hinsichtlich Anwendungs-Titel, Autor oder auch Sprache. Im Wesentlichen ist der Aufbau aber gleich.

 

Genutzt wird dabei ein Standardverfahren für die Anmeldung, welches auf den ArcGIS Developerseiten genauer beschrieben ist. Dabei wird lediglich eine ArcGIS-URL angefragt:

https://www.arcgis.com/sharing/oauth2/authorize?client_id=P61TE38ydg2L7y30&response_type=code&redirect_uri=urn:ietf:wg:o…

 

Es handelt sich dabei um einen Rest Endpoint, der den Benutzer gegen ArcGIS autorisiert. Dieser benötigt eine Client ID, die wir eingangs unter unserem Account registriert haben und als Teil der URI mitgegeben wird. Der Rest der URL ist fest definiert und unter der Developer-Website erläutert.

 

Das hat einige Vorzüge: Dieses Verfahren nimmt einem einiges an Entwicklungsaufwand ab, denn die Seite wird automatisch serverseitig erzeugt und passt sich der Konfiguration an. Auch der Anmeldbereich ist inkludiert, als Entwickler muss ich keine Fehlerbehandlung für falsche Login-Versuche handhaben und ob ich nun gegen die ArcGIS Cloud oder eine Portallösung autorisieren möchte ist dabei auch unerheblich.

 

Wenn die Autorisation erfolgt ist wird der Token, der als Antwort von der ArcGIS Plattform zurückkommt, in einem zentralen, übergreifenden (=statischem Singleton) Objekt gespeichert, dem IdentityManager:

6.png

Er agiert – wie der Name sagt – als zentrale Identitätsverwaltung. Sobald ein ArcGIS Dienst angefragt wird, wird hier automatisch nachgeschaut, ob es für diesen Dienst bereits eine hinterlegte Berechtigung gibt. Falls nicht, oder falls eine Berechtigung abgelaufen ist, wird der Zugang zum Dienst nicht gestattet.

 

Zeig mir was du hast

Wir sind also jetzt in der Lage uns mit der Anwendung anzumelden. Nun wollen wir dem eigentlichen Zweck der Anwendung auf den Grund gehen: der Möglichkeit, Karten offline zu nutzen.

 

Zunächst müssen wir erstmal nach verfügbaren Objekten suchen, die von unserer Anwendung genutzt werden können. Dies passiert in der Methode SearchArcgisOnline() der Klasse ArcGisPortalWebMapItemsViewModel. Als erstes wird eine ArcGIS Portal Instanz angelegt, welche ganz allgemein für Anfragen gegen die ArcGIS Plattform (also ArcGIS Online oder Portal for ArcGIS) zur Verfügung steht:

7.png

Sieht man sich nach der Ausführung des Statements mal das _arcGisPortal Objekt an, so stellt man fest, dass die Anmeldung unter unserem zuvor genutzten Login stattgefunden hat:

8.png

Die Zuordnung hat hier durch den IdentityManager stattgefunden, der für die Anfrage gegen ArcGIS Online passende Anmeldeinformationen gefunden hat.

 

Als nächstes wollen wir in der Anwendung alle Karten sehen, die man offline speichern kann. Die folgende Abfrage sucht nach allen Karten (=Web Maps), die für die Offlinespeicherung vorgesehen sind. Um zu demonstrieren wie man die Suche weiter einschränken kann, wird auch nur innerhalb der Organisation nach solchen Karten gesucht. Der „SearchText“ ist dabei ein Suchtext aus der Anwendungs-Oberfläche, mit dem man die Suche weiter einschränken kann:

9.png

Schließlich geben wir noch ein paar Sucheinstellungen mit und schicken die Suchanfrage ab:

10.png

Da wir anfangs eine Web Map namens „My cool Map“ angelegt haben suchen wir mal nach dem Stichwort „cool“. Die Suche liefert in unserem Fall genau ein Ergebnis:

11.png

Warum genau ein Ergebnis? Nun, natürlich sehen wir unsere eigene Karte, die wir angelegt hatten. Sicher finden noch zahlreiche weitere Leute das Arbeiten mit ArcGIS „cool“, so dass es vermutlich mehrere „coole Karten“ geben würde. Diese werden bei der Suche jedoch nicht angezeigt, da ein Teil unserer Suchkriterien eine Beschränkung auf alle Objekte unserer eigenen Organisation definiert hat. Auch wenn wir nicht Teil einer großen Firma sind sondern nur ein „1-Mann“ Unternehmen, so werden wir als eigene Organisation geführt.

 

Her damit!

So – auf geht’s. Jetzt laden wir uns diese Web Map lokal herunter. Dazu auf die Schaltfläche „Get the map offline“ innerhalb des Kartenobjektes geklickt und schon wechseln wir zu einer neuen Seite, in der sogleich der Inhalt der Web Map zur Anzeige gebracht wird. In drei Schritten kommen wir zu unserer Offline-Karte: Zunächst geben wir unserem zukünftigen Cache einen eindeutigen Namen, markieren anschließend ein (Teil-)Gebiet, welches offline verfügbar sein soll und starten den Download dann mit der Schaltfläche „Export Map“:

12.png

Ein weiterer Seitenwechsel bringt uns automatisch in die Ansicht aller offline verfügbaren Caches. Diese Sammlung ist – je nachdem wie viel Sie mit der Anwendung schon gearbeitet haben – mehr oder weniger umfangreich, in meinem Fall gibt es schon einige Caches. Caches werden gruppiert nach Web Maps dargestellt, denn es ist durchaus möglich, für dieselbe Web Map unterschiedliche Caches zu laden (zum Beispiel mit unterschiedlichen Kartenausschnitten). Die Gruppe lässt sich minimieren, so dass nur noch ein paar Informationen zur Web Map zu erkennen sind.

 

Der neue Cache, der sich gerade im Download befindet, wird durch einen Laufbalken als aktiv markiert, zudem gibt eine Statusleiste im Cache-Objekt Auskunft über den aktuellen Vorgang. Jedes Cache-Objekt verfügt außerdem über Schaltflächen zum Löschen, Synchronisieren und Laden des Caches.

13.png

Während wir auf den Cache warten schauen wir uns kurz im Code an, was da eigentlich passiert.

 

Die Musik spielt vor allem in der Klasse CreateOfflineMapViewModel. Diese ist zuständig für die Erzeugung der Caches. Zentraler Einstiegspunkt ist die Methode ExportMap(), welche beim Klick auf „Export Map“ ausgelöst wurde. Natürlich finden sich hier die zentralen Funktionen, die das Wichtigste aus der Web Map speichern:#_msocom_1 die geographischen Daten, also die Grundkarte und die Feature Daten.

14.png

Wer schon mit Esri Offline Daten gearbeitet hat (z.B. dem ArcGIS for Windows MobileSDK oder der App Collector for ArcGIS), der kennt diesen Vorgang grundsätzlich schon. Grundkarte und Vektordaten werden getrennt voneinander gespeichert. Das liegt zum einen an der unterschiedlichen Verarbeitung von Raster- und Featuredaten, aber natürlich auch an der unterschiedlichen Datenstruktur: Die Grundkarte liegt als sogenanntes Tiled Package vor, einem gezippten Ordner mit einer Struktur von Kachelbildern. Die Vektordaten dagegen liegen in einer Datenbankstruktur vor, genauer gesagt einem SQLite Format. In unserem Fall endet die SQLite Datenbank im Filesystem auf „geodatabase“, dies ist jedoch frei wählbar.

15.png

Doch bevor der eigentliche Geodatenexport gestartet wird passiert noch etwas anderes:

16.png

Hier werden Informationen der Web Map lokal gespeichert. Dazu muss man wissen, dass eine Web Map im Grunde genommen eine Konfigurationsdatei im JSON-Format ist, die selbst keine Daten beinhaltet sondern vielmehr die Informationen, wo die Daten liegen. Ebenso werden Informationen zur Kartendefinition selbst wie Id, Titel, Besitzer, Erstellungsdatum etc. gespeichert. Diese beiden Informationen bekommt man von der Web Map, einem online definierten Objekt, auf welches man keinen Zugriff hat, wenn man offline arbeitet. Um diese Informationen trotzdem auch offline verfügbar zu haben wurde in der Demo ein Mechanismus eingebaut, der die Web Map Definitionen beim Export lokal abspeichert und so in jeder Situation verfügbar macht.

 

Alles neu macht die App

So, zwischenzeitlich ist der Cache vollständig geladen. Nun können wir drei Dinge damit anstellen: Wir können ihn in einer Karte darstellen, synchronisieren und löschen.

 

Wir konzentrieren uns zunächst auf die Anzeige des geladenen Caches und klicken daher auf „Load map“.

17.png

Es öffnet sich ein neuer Reiter namens „Map“ und in der Anzeige sehen wir eine Karte und eine Liste aller editierbaren Layer. Wählt man einen Layer aus, so kann man in der Karte einen Punkt anklicken und so neue Objekte in diesem Layer erzeugen. Der Einfachheit halber wird in der Demo auf die Eingabe von Attributen verzichtet, es wird lediglich eine Geometrie erzeugt, dies wäre aber der nächste Schritt in einer vollständigen Anwendung.

 

Dass auf dem Layer Änderungen gemacht wurden wird dadurch kenntlich gemacht, dass in der Layerliste hinter den betroffenen Layern eine Anzahl an Editierungen angegeben wird. Sobald es Änderungen an einem Cache gibt macht es Sinn, diesen zu synchronisieren, was dann auch der letzte Schritt ist, den die Demo zeigen will.

 

Um das zu erledigen wechseln wir wieder in den „Config“-Reiter und wählen auf unserem Cache die „Sync“-Funktion aus. Erneut zeigt sich der Ladebalken, diesmal allerdings nicht mit einer Export-Beschreibung, sondern mit einem Synchronisations-Titel. Im Unterschied zum Export wird bei der Synchronisation verglichen, welche Änderungen es gegeben hat und diese werden zentral eingespielt. Lokale Änderungen werden dabei hochgeladen, Änderungen anderer Klienten heruntergeladen.

18.png

 

Finale, oh oh

Was wollte dieser Artikel bezwecken? Zum einen sollten ein paar typische Fragestellungen und Abläufe einer Offline-Anwendung veranschaulicht werden. Verbunden mit dem Verweis auf die Collector Light Demo Anwendung sind Sie so in der Lage, sich die Schritte einzeln anzuschauen und auch nachzuvollziehen. Dies mag Ihnen helfen, Ihre Fragen bezüglich zu lösen, gibt Ihnen aber zumindest ein paar Ideen, wie Sie bestimmte Dinge angehen könnten.

 

Zur Demo sei noch folgendes angemerkt: Die Entwicklung begann bereits basierend auf einer ArcGIS Runtime for .NET Beta Version. So haben wir von Esri Deutschland bereits früh Einblicke in die Entwicklung bekommen und konnten auch schon Erfahrung sammeln. Seit der frühen Betaversionen sind einige neue Versionen erschienen, die zahlreiche wertvolle Änderungen mitgebracht haben. Daneben gibt es inzwischen zusätzliche Toolkits und Beispiele, die zahlreiche Lösungsansätze aufzeigen. Seien Sie daher nicht verwundert, wenn Sie für ein und dasselbe Problem verschiedene Lösungen finden. Manchmal sind diese gleichwertig, manchmal haben die Lösungen unterschiedliche Vorteile.

 

Wenn Sie über diese Informationen hinaus weitere Fragen haben und individuelle Beratung wünschen, so wenden Sie sich gerne an Esri Deutschland, unser Consulting Team steht Ihnen kompetent zur Seite.

Outcomes