Skip navigation
All Places > GeoDev Germany > Blog > 2018 > February
2018

Dezember 2017 wurde das Major Release ArcGIS Runtime 100.2 veröffentlicht. Die nun veröffentlichte Version 100.2.1 ist ein darauf aufbauendes fokussiertes Release, in dem einige kritische Bugs gefixt und kleinere Verbesserungen an bestehenden Funktionen vorgenommen wurden. So zum Beispiel:

 

  • Verbesserungen mit WMS Services
  • Mobile Map Packages, erzeugt mit ArcGIS Pro 2.1, können nun auch Raster-Basemaps (.tpk) beinhalten und in ArcGIS Runtime 100.2.1 genutzt werden
  • 3D Scenes unterstützen nun Raster Layer & Basemaps in WGS84

 

Ausführliche Informationen zu allen Neuerungen in ArcGIS Runtime 100.2.1 findet Ihr in diesem News Blog von Esri Inc. und auf ArcGIS for Developers.

 

 

ArcGIS unterstützt multidimensionale Daten schon seit längerer Zeit. ArcGIS Pro visualisiert diese Daten in wenigen Schritten.

 

NetCDF (Network Common Data Form) ist ein Dateiformat zum Speichern von mehrdimensionalen wissenschaftlichen Daten (Variablen) wie Temperatur, Feuchtigkeit, Druck, Windgeschwindigkeit und Windrichtung. Alle Variablen können in ArcGIS über eine Dimension (z. B. Zeit) dargestellt werden, indem aus der netCDF-Datei ein Layer oder eine Tabellensicht erstellt wird.

 

Hier werden die Windstärken im Karibikraum Anfang September 2017 visualisiert. Der rote Ball ist ein Hurrikan und wurde als „Irma“ bezeichnet. Zunächst trifft er die kleinen und die großen Antillen danach Florida. „Jose“ folgte „Irma“ unmittelbar, drehte allerdings glücklicherweise ab bevor er die Inseln erreicht hätte.

 

Animation von Hurrikan Irma

 

1. Daten hinzufügen

Add data > Multidimensional Raster Layer > Input NetCDF-File - Select Variables - Choose Output Config

 

Unter Add data findet ihr den Menüeintrag zur Erstellung eines Multidimensional Raster Layer.

Multidimensionaler Raster Layer erzeugen


In dem sich öffnenden Menü fügt ihr die netCDF-Datei hinzu.

 

Wählt die Variable aus welche visualisiert werden soll.


(Hier in diesem Beispiel ist nur die Windgeschwindigkeit als Variable im Datensatz vorhanden)

 

Als Output Configuration wählt ihr Classic NetCDF Raster und bestätigt alles mit OK.

 

Weitere Informationen findet ihr hier.

netCDF-Datei hinzufügen und Variablen definieren

2. Zeit aktivieren

NetCDF-Layer > Properties > Time > Layer Time - Layer has time as dimension

Der neu hinzugefügte Layer wird dem Karteninhalt (Contents) hinzugefügt.
Um die Windgeschwindigkeit anhand der Zeit animieren zu können, ist zuerst in den Layereigenschaften die sog. Layer Time zuzuweisen.
Hierfür klickt ihr mit der rechten Maustaste auf den Layer, geht in die Eigenschaften, aktiviert den Reiter Time und wählt unter Layer Time, Layer has time as dimension aus und bestätigt alles mit OK.

Zeit in den Layereigenschaften aktivieren

 

3. Animation abspielen

Time Slider > Play

Nachdem in den Layereigenschaft die Zeit aktiviert wird, erscheint automatisch eine Zeitleiste.
Zusätzlich wird die Menüleiste Time angezeigt in denen weitere Einstellungen für die Animationen vorgenommen werden können. Übernehmt die Voreinstellungen und aktiviert Play auf der Zeitleiste.

 

Das wars. In nur drei einfachen Arbeitsschritten habt ihr mit ArcGIS Pro einen multidimensionalen Raster Layer erzeugt und ihn animiert. Den gesamten Workflow seht ihr in dem folgenden Video.

 

Maps bestehen in der Regel aus Basemap Layers zur Orientierung und Operational Layers für das Visualisieren, Abfragen, Bearbeiten und Analysieren von Geo-Informationen. In ArcGIS werden zwei Typen von Basemaps unterschieden: Raster Tile Services (gecachte Map Services und Image Services) und die noch recht jungen Vector Tile Services.

 

      Link zur Live Map

 

Für die Offline-Nutzung von Basemaps in ArcGIS Runtime können schon seit langer Zeit Tile Packages (.tpk) direkt aus Raster Tile Services exportiert werden. Brandneu ist nun die Möglichkeit, Bereiche von Vector Tile Services zu exportieren und lokal als Vector Tile Packages (.vtpk) nutzen zu können:

 

Vector Tile Services für den Export


Der große Vorteil von Vector Tile Services ist das clientseitige dynamische Rendering von Tiles. Somit ist die Basemap in jedem Maßstab der Map und bei jeder Auflösung des Displays immer gestochen scharf. Weiterhin werden die Daten und der Style der Basemap getrennt behandelt. Das ermöglicht dynamisches Anzeigen von Labels und das Erstellen von Basemaps mit unterschiedlichen Themen basierend auf immer denselben Datensatz. Und letztendlich werden Vektoren übertragen, also keine Bilder wie bei Raster Tile Services. Das sorgt für hohe Performanz und deutlich kleinere Datenmengen.

In ArcGIS Online werden schon eine Reihe von exportierbaren Vector Tile Basemaps bereitgestellt. Die hier verlinkten Services basieren alle auf denselben World Basemap Daten, aber immer jeweils mit anderem Style. Falls mehrere dieser Basemaps offline genutzt werden sollen, muss nur von einem der Services das vtpk (Daten + „Root Style“) und von allen Services jeweils nur der Style exportiert werden. Dazu später mehr.

Es können auch eigene Vector Tile Services auf ArcGIS Online erstellt und für den Export freigeschaltet werden. Dazu wird in den allgemeinen Einstellungen des Vector Tile Service Portal Items in der Registerkarte Einstellungen der Offline-Modus aktiviert:

 

 

Wie eigene Vector Tile Services erzeugt und dafür verschiedene Styles erstellt werden können, wird in diesen zwei Esri UK - Blogs sehr gut beschrieben:

 

 

Export von Vector Tile Packages und Styles in ArcGIS Runtime

Für den Export von Vector Tile Services und Styles werden die PortalItem IDs der Services, eine Identität (Named User oder ArcGIS Online Developer Account) und mindestens die ArcGIS Runtime Version 100.2 benötigt. Hier ist die exemplarische Vorgehensweise anhand des ArcGIS Runtime SDK for .NET:

 

      Online Map mit dem zu exportierenden Gebiet (AreaOfInterest im ExportVectorTilesParameters)

 

1. Authentifizieren

Der anonyme Export ist nicht erlaubt, es ist eine Authentifizierung erforderlich. Dafür gibt es mehrere Möglichkeiten, z.B in diesem Sample.

 

2. Vector Tile Service PortalItem erzeugen

Wir nutzen in unserem Code-Beispiel die World Topographic Map (for Export). Hiervon wird die Portal ID benötigt.

 

var portal = await ArcGISPortal.CreateAsync();
var portalItem = await PortalItem.CreateAsync(portal,"df541726b3df4c0caf99255bb1be4c86");

 

TIP:

 

Es ist leider nicht möglich, von einem Vector Tile Service equivalente Services mit anderen Styles abzufragen. Um das trotzdem zu automatisieren kann in ArcGIS Runtime nach PortalItems-Typen und Tags gesucht werden.

 

Z.B ist in den hier beschriebenen ArcGIS Online Basemaps der spezifischer Tag "World_Basemap_Export_v2".

 

Bei eigenen Services muss dementsprechend ein eigener spezifischer Tag gewählt werden.

 

So wird gesucht:

var queryExpression = string.Format("tags:\"{0}\"type: \"Vector Tile Service\"", "World_Basemap_Export_v2");

PortalQueryParameters queryParams = new PortalQueryParameters(queryExpression, 100);

// Search the portal using the query parameters and await the results
PortalQueryResultSet<PortalItem> findResult = await portal.FindItemsAsync(queryParams);

// Get the items from the query results
var tileServicePortalItems = findResult.Results;

 

3. Task, Parameter und Job erzeugen und ausführen

Im folgenden Code werden nur die Daten (.vtpk) und nicht der Style exportiert.

// Create the task
var exportTask = await ExportVectorTilesTask.CreateAsync(portalItem);

// Create a new parameters instance
var parameters = new ExportVectorTilesParameters()
{
    AreaOfInterest = exportArea.Geometry,    //area to export
    MaxLevel = exportTask.VectorTileSourceInfo.LevelsOfDetail.Count - 1  //levels to export
};

// Create the export job
var job = exportTask.ExportVectorTiles(parameters, Path.Combine(_vectorTileCachePath, "name.vtpk"));

// Subscribe to notifications for status updates
job.JobChanged += (sender, e) =>
{

   if (job.Status == Esri.ArcGISRuntime.Tasks.JobStatus.Succeeded)
   {
      //do something
   }
   else if (job.Status == Esri.ArcGISRuntime.Tasks.JobStatus.Failed)
   {
      // Notify the user
      ShowStatusMessage(job.Error.Message);
   }
};

// Start the export job
job.Start();

 

Es kann auch das vtpk und der Style (falls vorhanden) in einem Rutsch exportiert werden . Dazu muss dem ExportVectorTilesJob nur zusätzlich der Speicherpfad für einen Ordner für den Style mitgegeben werden.

ExportVectorTilesJob job;
if (exportTask.HasStyleResources)
{
   job = exportTask.ExportVectorTiles(parameters, Path.Combine(_vectorTileCachePath, "name.vtpk"), _styleResourcePath);
}
else
{
   job = exportTask.ExportVectorTiles(parameters, Path.Combine(_vectorTileCachePath, "name.vtpk"));
}

 

Und wenn nur der Style exportiert werden soll sieht es so aus:

var exportTask = await ExportVectorTilesTask.CreateAsync(portalItem);
if (exportTask.HasStyleResources)
{
   var exportStyleJob = exportTask.ExportStyleResourceCache(_styleResourcePath);
   var result = await exportStyleJob.GetResultAsync();
   //do something
}

 

Wenn zum Beispiel alle die weiter oben beschriebenen exportierbaren ArcGIS Online Vector Tile Services lokal als Basemaps verfügbar sein sollen, muss von einem Service das vtpk und von allen Services nur die Styles exportiert werden. In einem StyleResource Ordner befinden sich nur JSON-Dateien mit der Beschreibung des Styles, diese sind sehr klein.

 

Nutzen von lokalen Vector Tile Packages und Styles in ArcGIS Runtime

Das lokale vtpk und ein vorhandener Style können dann so in die Map eingebunden werden:

 

//Load a style
var itemResourceCache = new ItemResourceCache(_styleResourcePath);

//Load the vtpk
var offlineVectorTileCache = new VectorTileCache(Path.Combine(_vectorTileCachePath, "name.vtpk"));

// Create a tile layer with the cache and the style
var layer = new ArcGISVectorTiledLayer(offlineVectorTileCache, itemResourceCache);

// Create a tile layer only with the cache
//var layer = new ArcGISVectorTiledLayer(offlineVectorTileCache);

// Create a new map with the layer as basemap
var map = new Map(new Basemap(layer));

// Apply the map to the mapview
MyMapView.Map = map;

 

Wenn der Entwickler alles beschriebene schön kombiniert, können so in der ArcGIS Runtime App lokal mehrer Basemaps auf Basis von nur einem vtpk genutzt werden. Um den Speicherplatz der Daten auf dem Gerät muss sich meistens auch keine Sorgen mehr gemacht werden. In einem Test mit dem Gebiet grob Bayern in der gesamten Detailtiefe ist die Größe des vtpks + Styles nur ca.230 MB groß und der Export hat knapp 7 min gedauert. Wichtig ist noch die Information, dass es eine maximale Begrenzung ("maxExportTilesCount":10000) für einen Export gibt.

 

     Offline Vector Tile Basemap ohne extra Style (nur das .vtpk geladen)

 

       Offline Vector Tile Basemap mit Style

 

      Offline Vector Tile Basemap mit Style

 

      Offline Vector Tile Basemap mit Style

 

      Offline Vector Tile Basemap mit Style

Der Esri Developer Summit 2018 naht mit Riesenschritten und wir hoffen, möglichst viele von Euch vor Ort begrüßen zu dürfen. Ihr schafft es nicht nach Palm Springs? Kein Problem! Wir haben eine neue #GeoNet Gruppe für Euch eingerichtet. Dort könnt Ihr u.a. Live Chats zur Plenary folgen, Euch an Diskussionen beteiligen oder einfach nur Fragen stellen. Schaut doch mal vorbei unter https://community.esri.com/community/events/devsummit

Filter Blog

By date: By tag: