Utiliser l’Api REST Nokia Maps dans vos applications Windows Phone
De nombreuses applications utilisent ou affichent une carte. La plupart du temps, le contrôle Bing Maps – fourni en standard dans le SDK et déjà abordée sur de blog– est utilisé. Il existe d’autres technologies de cartographie qui peuvent être intéressantes à utiliser en remplacement ou en complément de Bing Maps. L’API REST Maps de Nokia en fait partie.
Nous allons voir pourquoi cette solution peut être intéressante pour votre application, et comment la mettre en œuvre.
Pourquoi utiliser cette API ?
Nokia, suite au rachat de Navteq, possède l’une des bases de données géographiques les plus détaillées et les plus importantes parmi celles accessibles au public. Elle est mise à disposition des développeurs par trois moyens différents :
- L’API Web : sous forme de composant JavaScript, elle offre de nombreuses fonctionnalités telles que l’affichage du trafic en temps réel, ou la recherche d’itinéraires. Elle peut éventuellement être utilisée dans une application Windows Phone, via un composant WebBrowser, mais cela n’est pas recommandé,
- Un SDK Natif pour Qt et Java ME,
- Une API en mode web REST, qui offre pour le moment deux services. Maps permettant de récupérer des images de cartes, et Places, permettant d’accéder à des points d’intérêts.
L’Api REST a deux principaux intérêts pour les développeurs Windows Phone. Premièrement, la qualité du fond de carte est – d’expérience – l’un des plus complets du marché.
A partir de Windows Phone 8, les applications utilisant la cartographie pourront utiliser nativement le fond de carte Nokia.
L’autre grand intérêt de cette API est qu’elle est beaucoup plus rapide qu’un contrôle du type Bing Maps. Il n’y a pas de magie derrière cette performance. Un contrôle Bing maps va, pour afficher simplement une carte centrée sur un point, un ensemble d’images qui vont être assemblées par le contrôle. Pour cela, de nombreuses requêtes http sont nécessaires, ce qui peut prendre du temps. Vous pouvez cependant zoomer ou vous déplacer dans la carte.
L’Api REST Nokia Maps permet simplement de récupérer une image statique en fonction de vos critères : emplacement, niveau de zoom, type de carte. Ainsi, une seule requête http est nécessaire, et l’affichage ne comporte qu’une image, rien de plus.
Une première requête
La première chose dont vous devez vous munir, c’est une clé d’accès à l’API. Pour cela, muni de votre compte Nokia Développeur, rendez-vous sur http://api.developer.nokia.com/. Cliquez sur Register your API Key en haut à droite de la page. Vous serez amené à remplir un certain nombre d’informations avant d’obtenir deux informations essentielles :
- Un App ID, identifiant unique de votre application,
- Un AppCode, clé d’utilisation de l’API, qui correspond à l’AppID.
Nous allons maintenant effectuer notre premier appel à l’API. Pour cela, nous allons simplement utiliser un navigateur et entrer l’adresse suivante. N’oubliez pas de changer %appid% et %appcode% par ce qui vous a été communiqué sur le site.
http://m.nok.it/?app_id=%appid%&token=%appcode%&c=48.858489,2.2936&z=15&nord
Vous allez obtenir l’image suivante : une carte centrée sur la tour Eiffel.
L’utilisation en détail
Si nous reprenons notre première requête, nous pouvons observer une construction assez simple, composée de différents paramètres :
- Les paramètres pour l’application code et le token,
- Un paramètre c qui contient les coordonnées latitude/longitude sur lesquels centrer la carte,
- Un paramètre z qui indique le niveau de zoom de la carte,
- Un paramètre nord. Contrairement à ce que son nom peut laisser penser, il n’indique pas qu’il faut orienter la carte avec le nord en haut, mais « no redirection ». Si vous supprimez ce paramètre, vous pouvez être redirigés vers la version client web de Nokia Maps. C’est une fonctionnalité intéressante, mais qui n’est pas intéressante dans le cadre d’une application Windows Phone (le client web n’étant pas compatible avec Windows Phone).
L’ensemble des paramètres accessibles est disponible dans la référence de l’API.
L’usage au sein d’une application Windows Phone est très simple : il suffit d’ajouter un contrôle Image dans sa page, puis d’ajouter le chargement de l’image.
void MainPage_Loaded(object sender, RoutedEventArgs e)
{ Uri uri = new Uri("http://m.nok.it/?app_id=%appid%&token=%token%&c=48.858489,2.2936&z=15&nord&f=0&w=460&h=600");Carte.Source = new BitmapImage(uri);
}
Un usage plus simple avec wilcox.maps
Vous l’avez vu, l’usage de cette API est simple, et son intégration dans une application Windows Phone guère compliquée. Il est tout de même possible de faire encore plus simple. Jeff Wilcox, ancien développeur dans l’équipe Windows Phone, a développé un contrôle Windows Phone Static Map Library. Disponible sur github (https://github.com/jeffwilcox/wp-maps), et Nuget (package JeffWilcox.Maps), cette librairie vous offre un contrôle Silverlight vous permettant d’afficher simplement des cartes, ainsi que d’effectuer le paramétrage de l’affichage, tel que le type de cartes.
Le repository Github original contient la version avec le provider Nokia Maps, mais le package Nuget n’est pas encore mis à jour. Vous pouvez trouver l’assembly à l’adresse suivante : https://github.com/cmaneu/wp-maps/downloads
Une fois la référence ajoutée, vous allez pouvoir ajouter le contrôle. Pour cela, deux étapes sont nécessaires dans votre fichier XAML. Premièrement, il vous faut ajouter les références aux namespaces nécessaires.
xmlns:Controls="clr-namespace:JeffWilcox.Controls;assembly=JeffWilcox.Maps"
xmlns:geo="clr-namespace:System.Device.Location;assembly=System.Device"
Ajoutez ensuite le contrôle, avec ses paramètres. On remarque que l’on choisit bien le provider Nokia, que l’on précise un type de map (carte routière, satellite ou hybride), un niveau de zoom, et bien sûr, l’emplacement sur lequel centrer notre carte.
<Controls:StaticMap Provider="Nokia" MapMode="Hybrid" ZoomLevel="17">
<Controls:StaticMap.MapCenter>
<geo:GeoCoordinate
Latitude="48.858489"
Longitude="2.2936" />
</Controls:StaticMap.MapCenter>
</Controls:StaticMap>
Vous remarquerez que l’on ne precise pas d’AppID. Le choix a été fait de centraliser cela au niveau de l’application. Ainsi, vous devez avoir dans vos ressources un entrée de type string. Il vous faudra ajouter les lignes suivantes dans votre fichier App.xaml.
<Application.Resources>
<core:String x:Key="NokiaMapsKey">Votre clé App Id</core:String>
</Application.Resources>
Vous avez ainsi la carte qui s’affiche. Sa taille est automatiquement déduite de la taille d’affichage de votre contrôle. Vous n’avez rien de plus à faire ! Vous pouvez retrouver la documentation complète de l’API à cette adresse : http://api.maps.nokia.com/en/restmaps/start.html.
Retrouvez les sources de cet article sur https://github.com/cmaneublog/NokiaBlog-Maps.

