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