Get Offline!

Bing Maps in einer Windows-10-Universal-App
Kommentare

Dieser Artikel beschäftigt sich mit der einfachen Umsetzung einer kartenorientierten Windows-10-Universal-App. Aufbauend auf der Windows-10-Insider-Preview zeigen die Autoren, wie die neuen Bing-Maps-Features Offline und 3D Maps innerhalb einer Universal-App genutzt werden können. Der Artikel erläutert anhand von Codebeispielen erste praktische Umsetzungen mittels Visual Studio 2015 RC und den Windows-10-Developer-Tools und bietet eine Einführung in Microsofts neue Konzepte in Sachen Geovisualisierung.

Die Unterstützung so genannter Windows-Universal-Apps (UAPs), also Applikationen, die auf allen Gerätetypen mit Windows-10-Betriebssystemen ausgeführt werden können – seien es Tablets, Smartphones oder PCs – scheint eine neue Ära einzuleiten. Nach allem, was seitens Microsoft veröffentlich wurde, wird Windows 10 eine äußerst spannende Version für Entwickler. Mit dem Visual Studio 2015 Release Candidate für Windows 10 werden bereits im Vorfeld entsprechende Entwicklerwerkzeuge bereitgestellt, durch die Softwareentwickler die Möglichkeit haben, mit den neuen Funktionen der Plattform zu experimentieren.
Die webbasierte Microsoft-Kartenplattform Bing Maps [1] existiert bereits seit dem Jahre 2001 und liefert neben Straßenkarten, hochaufgelösten Luftbildern und so genannten Vogelperspektivbildern, auch Routingfunktionen und über den Spatial Data Service (SDS) eine Points-of-Interests-Datenbank inklusive einer Umkreissuche und weiteren räumlichen Operationen. Mit den Windows-10-Developer-Tools werden für derzeit ca. 300 Städte und touristisch interessante Orte neue 3D-Ansichten bereitgestellt, sowie auch die Möglichkeit eröffnet, Karten in Form flächendeckender Offline-Maps auch ohne Internetverbindung anzuzeigen.

Windows-10-Developer-Tools in Visual Studio 2015 einbinden

Um die Bing-Maps-Plattform verwenden zu können, ist mittels [4] ein Account anzulegen und ein so genannter Universal Application Type Key zu generieren, der in der Anwendung später als Authentifizierung zur Bing-Maps-Plattform dient.

Zwingende Voraussetzung zum Entwickeln mit dem MapControl der Universal-Apps ist Windows 10 als Betriebssystem und Visual Studio 2015 ab dem Release Candidate. Wir öffnen nun Visual Studio 2015 und legen ein neues Projekt mit dem Projekttemplate Blank App (Windows Universal) an. Sollte das Projekttemplate nicht vorhanden sein, muss das Windows-10-SDK nachinstalliert werden. Weitere Verweise werden nicht benötigt, da das MapControl nunmehr im Windows-10-SDK zur Entwicklung von Universal-Apps enthalten und kein separates Bing-Maps-SDK mehr notwendig ist.

Stellen Sie Ihre Fragen zu diesen oder anderen Themen unseren entwickler.de-Lesern oder beantworten Sie Fragen der anderen Leser.

Einbindung MapControl

Für die ersten Schritte mit dem MapControl muss dieses zunächst via Namespace Windows.UI.Xaml.Controls.Map in der XAML-View eingebunden werden. Anschließend kann das MapControl direkt in XAML hinzugefügt werden:

xmlns:Maps="using:Windows.UI.Xaml.Controls.Maps"

<Grid>
    <Maps:MapControl x:Name="myMap" />
</Grid>

Nach der Einbindung des MapControls können der Karte im „Code-Behind“ mittels myMap.MapElements.Add()-Kartenelemente hinzugefügt werden:

MapIcon mapIcon1 = new MapIcon();
mapIcon1.Location = myMap.Center;
mapIcon1.CollisionBehaviorDesired = 
    MapElementCollisionBehavior.RemainVisible;
myMap.MapElements.Add(mapIcon1);

Neben den MapIcons gibt es die Elemente MapPolyline und MapPolygon, die analog zu den MapIcons der Karte hinzugefügt werden können. Alle MapElements sind vektorbasiert und können daher u. a. auf Klick- bzw. Touch-Eingaben reagieren (Listing 1).

Listing 1
myMap.MapElementClick += MyMap_MapElementClick;

MapPolyline line = new MapPolyline
{
    StrokeThickness = 3,
    StrokeColor = Colors.Blue,
    Path = new Geopath(linePoints)
};
myMap.MapElements.Add(line);

MapPolygon polygon = new MapPolygon
{
    StrokeThickness = 1,
    StrokeColor = Colors.Blue,
    FillColor = Colors.Green,
    Path = new Geopath(polygonPoints)
};
myMap.MapElements.Add(polygon);

Geokodierung und Routing

Geokodierung bezeichnet den Vorgang eines Kartendiensts, bei dem ein Adressdatensatz mit Geokoordinaten versehen wird, um auf der Karte dargestellt werden zu können. Die Bing-Maps-Plattform stellt einen leistungsfähigen Geokodierungsservice bereit, der bereits im Windows-10-SDK integriert ist. In Listing 2 wird eine postalische Adresse mit Geokoordinaten versehen.

Listing 2
var query = "Breiter Weg 8A, 39104 Magdeburg";

Geopoint hint = myMap.Center;
var geocodeResult = await 
    Windows.Services.Maps.MapLocationFinder.FindLocationsAsync(query, hint);
MapIcon mapIcon = new MapIcon();
mapIcon.Location = geocodeResult.Locations[0].Point;
mapIcon.CollisionBehaviorDesired = MapElementCollisionBehavior.RemainVisible;
myMap.MapElements.Add(mapIcon);

Auch das Routing ist bereits im SDK enthalten. Über Adresseingaben für Start und Ziel können Fußgänger-und Autoroutings ausgelöst werden (Listing 3).

Listing 3
var routingResult = await 
  Windows.Services.Maps.MapRouteFinder.GetDrivingRouteAsync(
    new Geopoint(new BasicGeoposition { Latitude = 52.126997, 
      Longitude = 11.634301 }),
    new Geopoint(new BasicGeoposition { Latitude = 49.885452, 
      Longitude = 8.656083 }));

MapPolyline route = new MapPolyline
{
  StrokeThickness = 3,
  StrokeColor = Colors.Blue,
  Path = routingResult.Route.Path
};
myMap.MapElements.Add(route);

Verwendung von Offline Maps

Zur Verwendung der Offline Maps sind die entsprechenden Windows-Einstellungen vorzunehmen. Dazu kann mithilfe des Map-Manager-API direkt aus der Universal-App heraus das Einstellungsmenü geöffnet werden, in dem Straßenkarten sortiert nach Ländern bzw. Regionen/Bundesländern heruntergeladen werden können:

Windows.Services.Maps.MapManager.ShowDownloadedMapsUI();

Im Anschluss stehen die Offlinekarten – im Falle einer fehlenden Internetverbindung – anwendungsübergreifend zur Verfügung. Neben der Anzeige des Kartenmaterials auf Straßenebene ist es zudem möglich, auf diesen heruntergeladenen Abschnitten zu geokodieren und zu routen.

3D-Ansichten und Streetsides

Mittels des MapControls von Windows 10 werden neben der planaren Draufsicht auch 3D-Ansichten ermöglicht. Neu sind nunmehr Parameter für Kameraposition (mit einer beliebigen Ausrichtung) sowie der Abschnitt auf der Karte, der damit betrachtet wird. Es ergibt sich ein Sichtkegel, in dem sich die darzustellenden Objekte wie z. B. Häuser und Straßen befinden (Abb. 1).

Abb. 1: Kameraposition und Sichtkegel

Abb. 1: Kameraposition und Sichtkegel

Neben den Koordinaten für Länge und Breite benötigt die 3D-Ansicht folgerichtig auch die Verwendung der Höhenkoordinate, also den Parameter Altitude zu einem Standort bzw. die Angabe dazu, welches Höhenprofil das Bezugssystem sein soll. Es stehen die Enumerationen Ellipsoid, GeoId, Surface, Terrain sowie Unspecified zur Verfügung. Für die meisten Anwendungsfälle wird wahrscheinlich Surface die richtige Wahl sein, denn damit lassen sich Objekte auf der höchsten Erhebung der Erdoberfläche (z. B. Gebäude) anzeigen (Listing 4).

Listing 4
MapIcon tower = new MapIcon();
tower.Location = new Geopoint(new BasicGeoposition
{
  Latitude = 52.127141,
  Longitude = 11.634732
}, AltitudeReferenceSystem.Surface);

tower.NormalizedAnchorPoint = new Point(0.5, 0.5);
tower.CollisionBehaviorDesired = MapElementCollisionBehavior.RemainVisible;
myMap.MapElements.Add(tower);

MapIcon nearTwr = new MapIcon();
nearTwr.Location = new Geopoint(new BasicGeoposition
{
  Latitude = 52.127242,
  Longitude = 11.634829
}, AltitudeReferenceSystem.Surface);

nearTwr.NormalizedAnchorPoint = new Point(0.5, 0.5);
nearTwr.CollisionBehaviorDesired = MapElementCollisionBehavior.RemainVisible;
myMap.MapElements.Add(nearTwr);

MapIcon tree = new MapIcon();
tree.Location = new Geopoint(new BasicGeoposition
{
  Latitude = 52.127200,
  Longitude = 11.635239,
}, AltitudeReferenceSystem.Surface);

tree.NormalizedAnchorPoint = new Point(0.5, 0.5);
tree.CollisionBehaviorDesired = MapElementCollisionBehavior.RemainVisible;
myMap.MapElements.Add(tree);

Im Prinzip können auch die Streetside-Aufnahmen der Bing-Maps-Plattform via StreetsideExperience angesprochen werden. Allerdings stehen die Streetside-Panoramabilder in Deutschland aus Datenschutzgründen nicht zur Verfügung (Listing 5) (Abb. 2).

Abb. 2: Panoramaansicht „StreetsideExperience“, Quelle: Micrososoft Corporation

Abb. 2: Panoramaansicht „StreetsideExperience“, Quelle: Micrososoft Corporation

Listing 5
Geopoint location = new Geopoint(new BasicGeoposition 
{
  Latitude = 37.802176,
  Longitude = -122.418760 }
);
StreetsidePanorama pano = await StreetsidePanorama.FindNearbyAsync(location);

if (pano == null)
{
  myMap.Style = MapStyle.Road;
  return;
}

StreetsideExperience streetside = new StreetsideExperience(pano)
{
  ExitButtonVisible = false,
  ZoomButtonsVisible = false,
  OverviewMapVisible = true,
};

myMap.CustomExperience = streetside;

Fazit

Kartenorientierte Windows-Universal-Apps für die Windows-10-Plattform sind mittels der Verwendung des intergierten Bing-MapsControls relativ simpel zu realisieren. Technologisch weiß die Windows-10-SDK-Plattform vieles zu vereinfachen und stellt bereits in der Windows-10-Insider-Preview geeignete Werkzeuge bereit, um spektakuläre 3D-Kartenapplikationen endgeräteunabhängig zu erstellen. Die von der Community vehement geforderten Offline Maps könnten darüber hinaus zu einem echten Killerfeature für viele Apps avancieren.

Grundsätzlich erscheinen den Autoren zur Umsetzung in Frage kommende Szenarien, auch für den Einsatz in Unternehmen, zahlreich. Im Prinzip sind alle Anwendungsfälle prädestiniert für jeden Einsatz, in dem räumlich orientierte Zusatzinformationen sinnvoll sind.

Literatur:

[1] Kauer, J. / Fischer, F. / Losse, C. / Brack, P.: „Aufbruch in die Geoinformationsgesellschaft mit Microsoft Bing Maps“,  Wichmann Verlag, 2011

Windows Developer

Windows DeveloperDieser Artikel ist im Windows Developer erschienen. Windows Developer informiert umfassend und herstellerneutral über neue Trends und Möglichkeiten der Software- und Systementwicklung rund um Microsoft-Technologien.

Natürlich können Sie den Windows Developer über den entwickler.kiosk auch digital im Browser oder auf Ihren Android- und iOS-Devices lesen. In unserem Shop ist der Windows Developer ferner im Abonnement oder als Einzelheft erhältlich.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -