LBS für Windows Phone 8: Wasch mich, aber mach mich nicht nass

Die mobile Denkfabrik  –  0 Kommentare

Microsoft bewirbt sein Handcomputerbetriebssystem als besonders entwicklerfreundlich. Das trifft zu – wenn auch nur bis zu einem gewissen Grad.

So ist Microsoft einer von wenigen Herstellern, der Drittanbietern den Zugriff auf die Routingkomponente erlaubt. Das folgende Snippet versorgt ein Map-Steuerelement mit Streckeninformationen, die in Form eines Overlays auf den Bildschirm wandern:

   RouteQuery MyQuery = new RouteQuery();
List<GeoCoordinate> myCoordList = new List<GeoCoordinate>();
myCoordList.Add(new GeoCoordinate(myLocation.
Coordinate.Latitude,myLocation.Coordinate.Longitude));
myCoordList.Add(e.Result[0].GeoCoordinate);
MyQuery.Waypoints = myCoordList;
MyQuery.QueryCompleted += MyQuery_QueryCompleted;
MyQuery.QueryAsync();
}
void MyQuery_QueryCompleted(object sender, QueryCompletedEventArgs<Route> e)
{
Route MyRoute = e.Result;
MapRoute MyMapRoute = new MapRoute(MyRoute);
MMap.AddRoute(MyMapRoute);
}

Leider ist der Grad der geodätischen Fähigkeiten in diesem Bereich somit ausgeschöpft – höhere Routingfunktionen wie Turn-by-Turn-Navigation wird nur über einen Launcher angeboten:

MapsDirectionsTask mapsDirectionsTask = new MapsDirectionsTask();
LabeledMapLocation spaceNeedleLML = new LabeledMapLocation("Space Needle", null); mapsDirectionsTask.End = spaceNeedleLML; mapsDirectionsTask.Show();

Diese Vorgehensweise macht aus marketingtechnischer Sicht Sinn: Das Routing ist eine teure Operation, die jede Menge Rechenleistung (am Server) voraussetzt. Es wäre mehr als töricht, die damit erwirtschaftbaren Einnahmen an Drittentwickler weiterzureichen.

Ein weiteres witziges Detail der GPS-API ist, dass die Suche nach den Koordinaten einer Straße immer die Deklaration eines Suchbereichs voraussetzt:

GeocodeQuery myGeoQ = new GeocodeQuery();
myGeoQ.SearchTerm = TxtInput.Text;
myGeoQ.GeoCoordinate = newGeoCoordinate(myLocation.Coordinate.
Latitude,myLocation.Coordinate.Longitude);
myGeoQ.QueryCompleted += myGeoQ_QueryCompleted;
myGeoQ.MaxResultCount = 4;
myGeoQ.QueryAsync();

Dieses auf den ersten Blick nicht unsinnig klingende Verfahren hat in der Praxis eine höchst ärgerliche Schwäche: Die Ermittlung des Telefonstandorts setzt die Location-Capability voraus. Dies könnte bei ängstlichen Usern dazu führen, dass sie die Applikation nicht verwenden.