a.erbeesri-de-esridist

Streetmap Premium for ArcGIS Runtime – Straßendaten von HERE für native Geo-Apps

Blog Post created by a.erbeesri-de-esridist Employee on Aug 30, 2017

StreetMap Premium for ArcGIS Runtime bietet hochwertige, weltweite Straßendaten, die für die Verwendung bei der kartographischen Kartendarstellung, Geokodierung und dem Routing optimiert wurden. Diese Daten können in Apps eingebunden werden, die mit den ArcGIS Runtime SDKs ab Version 100.0 entwickelt wurden. Sie werden lokal auf dem Gerät des Nutzers gespeichert – dass ermöglicht die Nutzung unterwegs und ohne Internetverbindung. Die Daten werden in regelmäßigen Abständen aktualisiert, so dass sie stets auf dem neuesten Stand sind und somit der Fokus der Entwicklungsarbeit ausschließlich auf der Erstellung und Pflege der eigentlichen Apps liegt.

 

 

Folgende Vorteile bietet StreetMap Premium for ArcGIS Runtime:

 

  • Detaillierte Straßengrundkarte
    Die mit StreetMap Premium for ArcGIS Runtime bereitgestellten Daten wurden bereits aufbereitet und sind als sofort einsetzbare Straßengrundkarte verfügbar. Diese hochwertige Grundkarte bietet in den Apps den nötigen räumlichen Kontext.
  • Suchen und Geokodieren von Positionen
    StreetMap Premium for ArcGIS Runtime umfasst einen Locator-Task zur Geokodierung, der sich ganz einfach in Apps einbinden lässt. Mit diesem Locator können Nutzer nach spezifischen Adressen, Kreuzungen oder Points of Interest suchen und diese auf einer Karte darstellen.
  • Lösen von Routen-Problemen
    StreetMap Premium for ArcGIS Runtime bietet auch ein Netzwerk-Dataset für Verkehrsnetze für umfassende Routing-Analysefunktionen in ArcGIS Runtime-Apps. Diese Daten ermöglichen das Ermitteln der optimalen Routen zwischen verschiedenen Orten im Straßennetzwerk.
  • Offline-Verwendung von Straßendaten
    Die in StreetMap Premium for ArcGIS Runtime verfügbaren Daten sind auch dann verfügbar, wenn keine Verbindung zum Internet besteht. So können Nutzer auch im Außendienst oder Bereichen mit schlechter oder keiner Internetverbindung bequem auf die Grundkarten, Geokodierungsfunktionen und Routing-Funktionalität zugreifen. Ein weiterer Vorteil ist die reduzierte Datenmenge, die übertragen werden muss – dies spart Kosten.
  • Apps für den Einsatz in der ganzen Welt
    Die Daten und Karten von StreetMap Premium for ArcGIS Runtime sind für die ganze Welt verfügbar. Mobile Kartenpakete für unterschiedlichste Gebiete, z. B. Regionen oder Länder, lassen sich damit in Apps einbinden.

 

 

Download und Lizenzierung

ArcGIS Entwickler können mit StreetMap Premium for ArcGIS Runtime ab der kostenlosen ArcGIS Developer Subscription „Essentials“ entwickeln und testen. Die Daten können in Form von Mobile Map Packages (.mmpk) für unterschiedliche Länder und Regionen im Downloadbereich des ArcGIS Developers Portals heruntergeladen werden:

 

 

Für das Deployment der fertigen Apps muss StreetMap Premium for ArcGIS Runtime als Extension zu ArcGIS Runtime lizenziert werden.  Der oder die Lizenzschlüssel (lizenziert wird per Region) werden dazu auch im Code wie eine Extension implementiert. Mehr Informationen zur Vorgehensweise hier am Beispiel des ArcGIS Runtime SDK for .NET.

 

Implementierung

Das Implementieren und Nutzen von StreetMap Premium for ArcGIS Runtime ist intuitiv und in allen ArcGIS Runtime SDKs fast identisch:

 

Öffnen des Mobile Map Packages:

var mapPackage = await MobileMapPackage.OpenAsync(Path to mmpk);

 

Nutzen der fertigen Map(s):

var map = mapPackage.Maps[1];
Map = map;

 

Nutzen des Locator Tasks für Geocoding/Reverse Geocoding usw.:

await mapPackage.LocatorTask.LoadAsync();
var suggestions = await mapPackage.LocatorTask.SuggestAsync("Fechnerstrasse 8, Leipzig");

 

Nutzen des Transportation Networks für Routing:

var routeTask = await RouteTask.CreateAsync(map.TransportationNetworks[0]);

 

 

Mit dem ArcGIS Runtime SDK for .Net sieht es so aus (der Einfachheit halber alles in einer Methode):

private async void CreateMmpkMap()
{
    GraphicsOverlays[0].Graphics.Clear();
    try
    {
        var mapPackage = await MobileMapPackage.OpenAsync(_baseDirectory.LocalPath + @"geodata\Germany.mmpk");
        var map = mapPackage.Maps[1];

        // Locator, just a test
        await mapPackage.LocatorTask.LoadAsync();
        var suggestions = await mapPackage.LocatorTask.SuggestAsync("Fechnerstrasse 8, Leipzig");
        //do something with the suggestions

        await map.LoadAsync();

        //make sure the map loaded
        if (map.LoadStatus != LoadStatus.Loaded) return;

        // Routing
        var routeTask = await RouteTask.CreateAsync(map.TransportationNetworks[0]);

        // get the default route parameters
        var routeParams = await routeTask.CreateDefaultParametersAsync();
        // explicitly set values for some params
        routeParams.ReturnDirections = false;
        routeParams.ReturnRoutes = true;
        routeParams.OutputSpatialReference = map.SpatialReference;


        // create a Stop for my location
        var myLocation = new MapPoint(1375470.8306, 6685056.1967, map.SpatialReference);
        var stop1 = new Stop(myLocation);

        var markerSym = new SimpleMarkerSymbol
        {
            Style = SimpleMarkerSymbolStyle.Circle,
            Color = Colors.Red,
            Size = 12
        };
        var pointGraphic = new Graphic(myLocation, markerSym);
        _graphicsOverlays[0].Graphics.Add(pointGraphic);

        // create a Stop for your location
        var yourLocation = new MapPoint(1377231.148, 6687515.5736, map.SpatialReference);
        var stop2 = new Stop(yourLocation);

        pointGraphic = new Graphic(yourLocation, markerSym);
        _graphicsOverlays[0].Graphics.Add(pointGraphic);

        // assign the stops to the route parameters
        var stopPoints = new List<Stop> { stop1, stop2 };
        routeParams.SetStops(stopPoints);

        var routeResult = await routeTask.SolveRouteAsync(routeParams);

        // get the route from the results
        var route = routeResult.Routes[0];

        // create a graphic (with a dashed line symbol) to represent the route
        var routeSymbol = new SimpleLineSymbol(SimpleLineSymbolStyle.DashDotDot, Colors.Red, 5);
        var routeGraphic = new Graphic(route.RouteGeometry, routeSymbol);

        // add the route graphic to the map view and zoom to its extent
        _graphicsOverlays[0].Graphics.Add(routeGraphic);

        map.InitialViewpoint = new Viewpoint(route.RouteGeometry, 0);

        Map = map;

    }
    catch (Exception ex)
    {
        var text = ex.Message;
    }
}

 

Ergebnis

Outcomes