Lors du précédent article, nous avons découvert les possibilités de géocodage et géocodage inverse de l’API Bing Maps for Enterprise, dès lors on peut tout à fait imaginer que l’on souhaite utiliser les résultats pour calculer l’itinéraire correspondant à ces points.

bingmaps_header

Présentation du service et des possibilités

Le Web Service de calcul d’itinéraire de Bing Maps permet de générer des itinéraires et de récupérer l’ensemble des instructions de route associées en s’appuyant sur une configuration de notre choix pour définir l’optimisation souhaitée ou le mode de transport utilisé.

En d’autres termes, à travers ce service, il est tout à fait possible d’obtenir une feuille de route avec des informations étapes par étapes pour se rendre d’un point A à un point B en choisissant par exemple de se rendre en voiture en prenant l’itinéraire le moins couteux en termes de temps.

Ce service propose la génération d’itinéraire pour les véhicules légers (voitures) mais également les itinéraires piétons.

 

Description des méthodes, paramètres et résultats

Pour proposer ce service de calcul et génération d’itinéraires, le Web Service d’itinéraire de l’API Bing Maps propose deux méthodes dédiées : CalculateRoute() et CalculateRouteFromMajorRoads()
http://msdn.microsoft.com/en-us/library/cc980874(v=MSDN.10).aspx

Comme déjà vu précédemment, cette méthode prend un paramètre permettant de lui spécifier les options de calcul d’itinéraire qui est de type RouteRequest.

Dans le cas présent de la génération d’itinéraire, les options sont notamment les points de passages, le mode de transport ou encore les choix d’optimisation souhaitée.

Le résultat de cet appel est récupéré dans un événement associé et se présente sous forme d’objet de type RouteResponse présentant de nombreuses propriétés contenant les informations utiles.

 

Utilisation de la méthode de calcul d’itinéraire

Pour utiliser le Web Service de calcul d’itinéraire, il faut tout d’abord associer l’événement asynchrone de récupération de la génération d’itinéraire, le détails dans la partie concernant .

// Associated async event
this.routingClient.CalculateRouteCompleted += 
    new EventHandler<CalculateRouteCompletedEventArgs>(
routingClient_CalculateRouteCompleted
);

Ensuite, il faut ensuite générer une objet de type RouteRequest qui permet de fixer les points d’itinéraire, les options de calcul d’itinéraire telles que l’optimisation, la prise en compte des informations de trafic…

Voici le code associé à la méthode de génération de la requête et à l’exécution de celle-ci en utilisant la méthode CalculateRoute() utilisée ici de manière asynchrone.

// Create the route request
RouteRequest request = new RouteRequest();

// Set the Culture
request.Culture = this.map.Culture;

// Set the Waypoints
request.Waypoints = new List<Waypoint>();

// start point
request.Waypoints.Add(
    new Waypoint()
    {
        Location = new Location()
        {
            Latitude = this.locationStart.Latitude,
            Longitude = this.locationStart.Longitude
        }
    }
);
// end point
request.Waypoints.Add(
    new Waypoint()
    {
        Location = new Location()
        {
            Latitude = this.locationStop.Latitude,
            Longitude = this.locationStop.Longitude
        }
    }
);

// Route options
request.Options = new RouteOptions();
request.Options.RoutePathType = RoutePathType.Points;
request.Options.Optimization = RouteOptimization.MinimizeTime;
request.Options.TrafficUsage = TrafficUsage.TrafficBasedRouteAndTime;

// Suppress faults
request.ExecutionOptions = new ExecutionOptions();
request.ExecutionOptions.SuppressFaults = true;

// Credentials
request.Credentials = new Credentials();
request.Credentials.ApplicationId = c_AppKey;

// Call async
this.routingClient.CalculateRouteAsync(request);

L’exécution réalisée, l’événement associé est déclenché et il est possible d’exploiter les résultats comme expliqué dans la partie suivante.

 

Récupération complète des informations

Le traitement de l’objet de retour de type RouteResponse est particulier et nécessite une explication simple.

L’objet de type RouteResponse expose la propriété Result de type RouteResult.

Cet objet possède 3 propriétés :

  • Legs, liste de type RouteLeg : correspond à une portion de la route générée
  • RoutePath de type RoutePath : correspond aux données brutes de la route générée
  • Summary de type RouteSummary : correspond aux informations générales de l’itinéraire (Distance, temps…)

Voici par exemple comment récupérer les informations et les ajouter à travers un élément graphique (ici une ListBox) :

foreach (ItineraryItem itineraryItem in e.Result.Result.Legs[0].Itinerary)
    this.lbInfo.Items.Add(itineraryItem.Text);

Chaque segment de route est en réalité présenté dans la liste d’objet de type RouteLeg. Il est donc recommandé de parcourir chacun de ces objets.

 

Affichage du tracé sur la carte

En plus de contenir les informations textuelles de parcours, le Web Service peut nous renvoyer les informations géographiques des points de passage ce qui nous permet d’afficher ces points sur la carte.

Pour cela, il faut indiquer dans les options de requête que l’on souhaite récupérer la géométrie de la route générée en spécifiant la propriété RoutePathType :

request.Options.RoutePathType = RoutePathType.Points;

Et ensuite, il devient possible d’ajouter ce contenu sous forme de polyline en parcourant l’objet de type RouteResult et plus précisément la propriété RoutePath et la sous propriété Points :

// Add locations
routeLine.Locations = new Microsoft.Maps.MapControl.LocationCollection();
// Set points
foreach (Location p in e.Result.Result.RoutePath.Points)
    routeLine.Locations.Add(
        new Microsoft.Maps.MapControl.Location(
            p.Latitude,
            p.Longitude
        )
    );

Le résultat en exécution :

Bing Maps Web Services Itinerary service de calcul d'itinéraire 

Gestion du mode piéton

Afin de spécifier le mode de déplacement, il est possible de spécifier la propriété Mode de type TravelMode dans les options de requête.

request.Options.Mode = TravelMode.Walking;

Attention, les itinéraires piétons sont limités à 250 km. En même temps, au delà, à part Forrest Gump et quelques autres personnes motivés qui ont des projets plus grands (comme Serge Girard)…

 

Considérations et conclusions

Les appels à ce Web Service et surtout la récupération et l’exploitation des résultats sont à considérer et donc à utiliser avec beaucoup d’attention.

Il faut afficher assez d’information pour la rendre intéressante, mais il n’est pas forcément nécessaire d’inonder l’utilisateur d’instructions de parcours détaillé, utilisez donc cette fonctionnalité, mais n’en abusez pas.

Cet article a donc présenté l’utilisation du service de calcul d’itinéraire et a expliqué également comment enrichir les applications de ces possibilités de génération.

 

L’article qui suit traitera du service de recherche de proximité permettant de parcourir les POIs de la base de la plateforme Bing Maps for Enterprise.