Skip navigation
All Places > GeoDev Germany > Blog > Author: c.brunneresri-de-esridist

Gestern ist die neue Version 3.14 der JavaScript API erschienen. Heute folgte die erste Beta für die JavaScript API 4.0.

 

ArcGIS API for JavaScript 3.14

 

Grundlegende Neuerungen sind 2 neue Schnittstellen bzw. Workflows, die jetzt unterstützt werden:

  • Erweiterungen für Operations Dashboard

Bisher waren diese nur für die Windows Version des Dashboards mit ArcGIS Runtime SDK for WPF möglich. Jetzt können Widgets, Map Tools und Feature Actions auch mit Hilfe der JavaScript API programmiert werden. Und diese Erweiterungen können in beiden Versionen des Dashboards (Windows und Browser) verwendet werden. https://developers.arcgis.com/javascript/jshelp/operations-dashboard-extensibility-overview.html

  • Anbindung DataReviewer

Eine Reihe von Tasks, um die ArcGIS Data Reviewer for Server Funktionen in eine Webanwendung zu integrieren. https://developers.arcgis.com/javascript/jshelp/intro_datareviewer.html

 

Darüber hinaus gibt es auch einige funktionale Anpassungen:

  • Anpassungen und Erweiterungen der Smart Mapping Funktionen (u.a. ein neuer Renderer namens BlendRenderer)
  • 2 neue Widgets, allerdings noch in Beta: Elevation Provile und Layer List (Absolut revolutionär und noch nie nachgefragt, ein TOC in der JavaScript API)
  • Unterstützung WFS und Anpassungen bei der Unterstützung von Image Server

 

Alle Änderungen findet man wie immer unter folgendem Link https://developers.arcgis.com/javascript/jshelp/whats_new.html

 

 

ArcGIS API for JavaScript – the next generation

 

Zumindest als Beta ist die JavaScript API 4.0 seit heute verfügbar. Die größte Neuerung ist natürlich die 3D Unterstützung. Darüber hinaus wird die API aber auch überarbeitet, so dass diese einfacher und durchgängiger wird.

WICHTIGE Infos:

Es handelt sich um die 1. Beta Version, eine „developer preview“ mit eingeschränkter Funktionalität. Es gibt keinen Support während der Beta Phase. Für Feedback und Fragen soll Forum genutzt werden. Im Laufe des Jahres wird es weitere Betas geben. Das finale Release ist erst für nächstes Jahr geplant. Deshalb wird auch die momentane Version weiterentwickelt und es wird vermutlich noch weitere 3.X Releases geben.

Link zur API

https://developers.arcgis.com/javascript/beta/

Link zum Blog

http://blogs.esri.com/esri/arcgis/2015/07/16/arcgis-api-for-javascript-version-4-0-beta-1-released/

 

ViewpointCamera3d.png

Die Produktfamilie der ArcGIS Runtime SDKs ist seit der Version 10.2 offline-fähig. Dabei können Hintergrundkarten und Vektordaten von Diensten exportiert, und im Falle der Vektordaten auch synchronisiert werden. Um diese Funktionen zu veranschaulichen hat Esri Deutschland eine Demoanwendung entwickelt, welche die Offline Funktionalität von Collector for ArcGIS mit dem ArcGIS Runtime SDK for .NET und Java nachbildet. Diese Demo trägt den Namen Collector Light und ist auf GitHub veröffentlicht. Außerdem ist bereits ein Blog dazu erschienen.

In diesem Artikel wird jetzt, am Beispiel der Java Demo, der Ablauf zum Exportieren und Synchronisieren von Vektordaten genauer betrachtet.

Ein paar Vorbereitungen müssen sein

Die Demo verwendet als Datenquelle eine WebMap. Diese wäre aber nicht zwingend nötig. Um Vektordaten exportieren zu können wird lediglich ein FeatureService benötigt. Dieser kann sowohl bei ArcGIS Online, in Portal for ArcGIS oder auf einem eigenen ArcGIS for Server gehostet sein. Dabei ist zu beachten dass im Dienst der Vorgang „Synchronisieren“ aktiviert ist. Am ArcGIS for Server kann dies im ArcGIS Server Manager im jeweiligen Dienst unter Funktionen -> Feature Access gemacht werden.

SyncEnabled_ArcGISServer.png

In ArcGIS Online und Portal for ArcGIS in den Properties des Dienstes.

SyncEnabled_ArcGISOnline.png

Wird diese Funktion aktiviert bietet der Dienst zusätzliche REST-Schnittstellen an. Mit Hilfe der Operation „Create Replica“ können die Daten offline geholte werden. „Synchronize Replica“ ist für die Synchronisation der Daten und mit „Unregister Replica“ können die Daten gelöscht werden. Dazu aber später mehr.

ServiceDirectory_MitSync.png

Jetzt startet endlich die Programmierung

Wir müssen diese REST-Schnittstellen aber nicht direkt implementieren. Diese werden bereits vom ArcGIS Runtime SDK for Java gekapselt, so dass wir hierfür Java-Klassen und Methoden zur Verfügung haben. Die Verwendung zum Exportieren von Vektordaten findet man in der Demo in der Klasse action.CreateOfflineProject. Genauer gesagt in der Methode createGeodatabaseFromService.

Nach einer kleinen Aufbereitung der Daten, was der Verwendung einer WebMap geschuldet ist, beginnt der spannende Teil in Zeile 330 mit dem Erzeugen der GenerateGeodatabaseParameters.

 

//set up the parameters
  GenerateGeodatabaseParameters params = new GenerateGeodatabaseParameters(
       ArrayUtils.toPrimitive(layerIds.toArray(new Integer[layerIds.size()])),
       extent,
       map.getSpatialReference(),
       false,  
       SyncModel.GEODATABASE,
       map.getSpatialReference());

 

Hier zeigt sich, dass man die zu-exportierenden Daten einschränken kann. Zum einen besteht die Möglichkeit einzelne Layer des Diensts zu selektieren. Zum anderen kann ein Extent mitgegeben werden, so dass der Bereich eingeschränkt wird. Auch Anhänge können, müssen aber nicht geladen werden. Zudem ist es wichtig ein gewünschtes Koordinatensystem als Parameter mitzugeben, damit die Daten hinterher auch richtig auf unserer Karte dargestellt werden können. Anschließend werden zwei Callback Klassen benötigt. Eine wird verwendet um Statusinformationen während der Laufzeit entgegen zu nehmen. Die andere wird aufgerufen wenn der Task beendet ist und nimmt schlussendlich das Ergebnis entgegen. Jetzt kommt auch schon die Klasse GeodatabaseSyncTask ins Spiel, die den eigentlichen Aufruf generateGeodatabase macht.

 

// ------------------------------------------------------------------------ 
// Generate the geodatabase from the service and download 
// ------------------------------------------------------------------------ 
GeodatabaseSyncTask gdbTask = new GeodatabaseSyncTask(featureServiceUrl, PortalConnector.getUser(true));
gdbTask.generateGeodatabase(params, pathToGdb, false, statusCallback, gdbResponseCallback);

 

Zum Erzeugen dieser Klasse benötigt man nur die URL zum FeatureService. Falls es sich um einen abgesicherten Dienst handelt, muss man, wie in diesem Beispiel, zudem Credentials mit übergeben. Details zum Thema Autorisierung und Authentifizierung gibt es einem eigenen Blog.

 

Wo sind denn jetzt meine Daten?

Im gdbResponseCallback in diesem Beispiel wird lediglich einem ProjectManager gesagt, dass neue Daten verfügbar sind. Deshalb stellt sich jetzt die Frage: Wo sind denn meine Daten? Die finden wir unter dem Pfad und Namen, der beim Aufruf als Parameter (pathToGdb) übergeben wurde. An den Namen wird noch die Dateiendung .geodatabse angehängt. Die Daten liegen in einer Datenbankstruktur vor, genauer gesagt einem SQLite Format, und können mit jedem gängigen SQLite-Tool betrachtet werden.

Wie kommen die Daten in meine Karte?

Aber wir wollen die Daten ja in unserer Karte betrachten und nicht in irgendeinem anderen Tool. Hierfür bietet das ArcGIS Runtime SDK for Java die Klasse FeatureLayer. Dieser kann mit Hilfe von verschiedenen Datenquellen als Basis erzeugt werden. Das ist das Schöne an dieser Klasse. Unabhängig von der Datenquelle ist das Handling immer das Gleiche. Eine von diesen Datenquellen ist die GeodatabaseFeatureTable. An diese Tables kommen wir, indem wir unsere SQLite Datenbank mit Hilfe der Klasse Geodatabse initialisieren. Für jeden einzelnen Layer wird dabei eine GeodatabseFeatureTable erzeugt.

 

Geodatabase localGeodatabase = new Geodatabase("PathToGeodatabase");
  for (GeodatabaseFeatureTable table : localGeodatabase.getGeodatabaseTables()) {
  FeatureLayer featureLayer = new FeatureLayer(table);
  featureLayer.initializeAsync();
}

 

Ich will wieder nach Hause telefonieren

So, jetzt sind die Daten offline. Wir können uns nun frei, fernab der digitalen Zivilisation, bewegen und Daten erfassen, ändern oder löschen. Irgendwann wird aber der Moment kommen, in dem wir unsere Änderungen mit unseren Kollegen teilen wollen. Außerdem interessiert mich ja vielleicht auch was diese in meiner Abwesenheit getrieben haben. Wir müssen also mit dem Mutterschiff (dem FeatureService) Kontakt aufnehmen. In der Demo passiert dies in der Klasse action.SyncProject. Die Methode syncGeodatabase in der bereits bekannten Klasse GeodatabaseSyncTask hilft uns dabei.

 

gdbTask.syncGeodatabase(syncParams, gdb, statusCallback, syncResponseCallback);

 

Wir sehen wieder die zwei Callbacks für Statusmeldungen und für das Ergebnis. Als weitere Parameter brauchen wir die Geodatabase (gdb) und spezielle SyncGeodatabaseParameters. Die Geodatabase haben wir ja bereits im vorherigen Schritt zur Visualisierung der Daten erzeugt. Und auch wegen der SyncParameter müssen wir uns keine Gedanken machen, denn die werden von der Geodatabase erzeugt.

 

final SyncGeodatabaseParameters syncParams = gdb.getSyncParameters();

 

Das hat den Vorteil dass wir die komplexe Datenbankstruktur nicht kennen müssen, um unsere Änderungen zu extrahieren. Denn übertragen wird immer nur das Delta, nicht die komplette Datenbank. Bei der Synchronisation werden außerdem alle Änderungen am Dienst in meine lokale Datenbank übertragen, so dass ich auf dem aktuellsten Stand weiterarbeiten kann. Hier wird ebenfalls nur das Delta übertragen. Dies ist auch auf der folgenden Grafik erkennbar, die den gesamten Workflow schematisch darstellt.

 

SyncProcess.png

Haben mehrere Kollegen Änderungen an einem Datensatz vorgenommen, so gewinnt immer die letzte Änderung. Wobei dabei der Zeitstempel der Synchronisation und nicht der Zeitstempel der Änderung zählt. Zukünftig soll es auch andere Optionen zum Lösen von Konflikten geben, die dann pro Dienst eingestellt werden können. Aktuell ist das jedoch noch nicht möglich.

Beenden wir das Einsiedlerleben

Irgendwann kehrt man hoffentlich wieder zurück ins Büro und benötigt die lokale Kopie der Daten nicht mehr. Dann ist es wichtig diese nicht einfach zu löschen, sondern vorher einen Unregister am Dienst zu machen. Natürlich steht uns hierfür wieder die Klasse GeodatabaseSyncTask zur Verfügung, diesmal mit der Methode unregisterGeodatabase.

 

gdbTask.unregisterGeodatabase(gdb, unregisterCallback);

 

In der Demo findet man diesen Aufruf in der Klasse action.DeleteProject. Aber warum ist dieser Aufruf so wichtig? Der FeatureService erzeugt für jede Kopie ein sogenanntes Replica. Darin sind Informationen zur Kopie abgelegt, wie z.B. der Zeitpunkt der letzten Synchronisation. Diese Daten werden benötigt um den Synchronisationsmechanismus bewerkstelligen zu können. Beim Unregister wird dieses Replica gelöscht, da der Dienst dann weiß dass die lokale Kopie nicht mehr benötigt wird. Die Replicas eines Dienstes kann man sich auch in dessen Service Directory ansehen.

 

Replicas.png

Am Dienstag, den 03. März 2015 fand ein Webinar für Entwickler zum Thema Mobile Apps mit JavaScript statt.

 

Falls ihr es nicht zum Webinar geschafft habt, könnt ihr euch nachträglich das Video weiter unten anschauen und auch die Folien herunterladen.

Auf GitHub haben wir euch alle Beispiele bereitgestellt.

 

Diesmal habt ihr keine Fragen gestellt. Wir werten das einfach mal als gutes Zeichen. Falls ihr dennoch Fragen habt, könnt ihr sie gerne an developers@esri.de schicken.

 

Am 19. März 2015 geht es mit dem GeoDev Meet-up in Berlin weiter. Weitere Meet-ups folgen in Köln und München.

 

Im Mai ist es soweit, dann öffnet die deutschsprachige Esri Anwenderkonferenz GIS Talk in München wieder ihre Tore. Entwickler-Themen widmen wir einen eigenen Developer Track. Darüber hinaus wird es erstmalig eine Startup-Corner geben.

 

Wir würden uns freuen, euch bei einer der nächsten Veranstaltungen zu treffen.

 

Die neue Version 10.2.5 beinhaltet nun die finale Version des QML API. QML ist eine deklarative Sprache auf Basis von Qt, die es ermöglicht Apps für verschiedene Plattformen, wie z.B. Android oder iOS, zu entwickeln.

 

Neben dem neuen QML API sind auch kleinere Verbesserungen für Qt-Entwickler im neuen Release enthalten.

Detaillierte Informationen findet man wie immer auf der Developer Seite.

Collector for ArcGIS ist eine fokussierte App für iOS und Android zur Datenerfassung im Außendienst. Eine der Stärken dieser App ist die Möglichkeit, die Karten auch offline auf dem Gerät vorzuhalten. Mit einem Sync-Framework können offline erfasste Daten mit dem zentralen Datenbestand synchronisiert werden.

 

Collector for ArcGIS basiert auf ArcGIS Runtime Technologie. ArcGIS Runtime ist eine Familie von SDKs zum Entwickeln nativer Apps für verschiedene Plattformen und Programmiersprachen. Diese SDKs haben die gleiche Basisfunktionalität, so auch die Offline Funktionalität.

 

Um zu zeigen was mit ArcGIS Runtime möglich ist, haben wir beispielhaft eine Anwendung entwickelt, welche die Offline Funktionalität von Collector for ArcGIS mit dem ArcGIS Runtime SDK for .NET und Java nachbildet - deshalb auch der pfiffige Projektname „Collector Light“

 

Der Code und Dokumentation ist auf GitHub verfügbar. Zu den Inhalten gibt es einen ausführlichen Blog. In den nächsten Wochen werden weitere Artikel hier auf GeoDev Germany erscheinen, die einzelne Funktionen genauer beleuchten.

18.png

Am Dienstag, den 03. Februar 2015 fand ein Webinar für Entwickler zur ArcGIS GeoEvent Extension for Server statt.

 

Falls ihr es nicht zum Webinar geschafft habt, könnt ihr euch nachträglich das Video weiter unten anschauen und auch die Folien herunterladen.

Auf GitHub haben wir euch unsere Beispiele zur Konfiguration von GeoEvent Services und zur Nutzung von Echtzeitdaten in JavaScript Klienten bereitgestellt.

 

Nun zu euren Fragen:

 

  • Gibt es die Möglichkeit, einen Kartenbereich, inkl. Koordinaten, auch offline zu nutzen, also ohne Internet-Verbindung, z.B. wenn die Event-Daten aus einer Datenbank ausgelesen werden und in diesem Kartenabschnitt offline dargestellt werden sollen?

Die GeoEvent Extension for ArcGIS kann natürlich auch offline betrieben werden. Es muss nur eine Verbindung zur Datenquelle möglich sein, z.B. über ein internes Netzwerk. Sollen die Daten in einem Klienten auf einer Karte dargestellt werden, ist dies ebenfalls offline möglich. Der Klient muss lediglich auf den Ausgangskanal der GeoEvent Extension zugreifen können. Die Hintergrundkarte muss dann allerdings ebenfalls auf einem lokalen Server zur Verfügung stehen, da eine Verbindung zu ArcGIS Online nicht möglich ist. Bei einem JavaScript Klienten muss man zudem die API herunterladen und lokal hosten.

 

Am Dienstag, den 3. März 2015 um 16 Uhr geht es in unserer Webinar-Reihe mit dem Thema „Mobile Apps mit JavaScript“ weiter.

 

Wir freuen uns auf eure Teilnahme!

 

Parallel zur Developer Edition des Web AppBuilder ist auch eine neue Version der JavaScript API erschienen. Die größten Neuerungen sind:

- Neue Analyse Widgets

- DataAdapterFeatureLayer und Location Providers (beides in Beta) um Daten ohne geografischen Bezug um diesen zu erweitern

- FeatureTable Widget (beta) um Daten in Tabellenform darzustellen

feature_table.png

Eine detaillierte Liste aller Änderungen findet man hier:https://developers.arcgis.com/javascript/jshelp/whats_new.html

Die Version steht auf https://developers.arcgis.com/web-appbuilder/ zum Download bereit und kann auf einem eigenen Server betrieben werden. Dadurch werden die Anpassung von konfigurierten Anwendungen und das Entwickeln von eigenen Widgets und Themes ermöglicht.

widget-theme-300x183.png

Trotz dem Betrieb auf eigener Hardware wird für die Lizenzierung eine ArcGIS Online Organizational Subscription, Portal for ArcGIS oder eine Developer Subscription benötigt.

 

Für Diskussionen, Fragen und Community-Building gibt es eine eigene Gruppe auf GeoNet. Außerdem können Widgets und Themes in einem GitHub Repository geteilt werden.

 

Den originalen Blog Eintrag mit vielen nützlichen Links findet man hier: http://blogs.esri.com/esri/arcgis/2014/12/18/web-appbuilder-developer-edition-released/

In der neuen Version 10.2.4 des ArcGIS Runtime SDKs for Java ist jetzt ein JavaFX map control enthalten. Allerdings befindet sich dieses noch in Beta.

Ansonsten wurde vor allem an den Datenquellen gearbeitet. So ist jetzt z.B. das direkte Laden von lokalen Rastern und Shapefiles möglich. Auch WMTS wird nun unterstützt.

Eine Übersicht aller Neuerungen findet man hier: Release notes for 10.2.4—ArcGIS Runtime SDK for Java | ArcGIS for Developers

Die Version beinhaltet kleinere Verbesserungen und Bugfixes in verschiedenen Bereichen. Auch die Dokumentation wurde teilweise überarbeitet.

Neu hinzugekommen sind ein HeatmapRenderer, ein DataBrowser zur Unterstützung von GeoEnrichment und die OpacityInfo zur Steuerung der Transparenz anhand von Attributen.

 

Alle Änderungen finden sich unter folgendem Link https://developers.arcgis.com/javascript/jshelp/whats_new.html

Filter Blog

By date: By tag: