12. Calculer un itinéraire



Introduction


De la même manière que le géocodage à l'adresse, l'API Google Maps permet de calculer un itinéraire en utilisant la classe GDirections.

Initialisation


Reprendre la carte du tutoriel n°2.

Calcul de l'itinéraire


Définir la fonction setDirections(fromAddress, toAddress) qui calcule l'itinéraire entre deux adresses :
function setDirections(fromAddress, toAddress) {
  gdir.load("from: " + fromAddress + " to: " + toAddress,{ "locale": "fr" });
}

Définir un objet GDirections :

gdir = new GDirections(map);

Calculer un itinéraire lors de l'appel de la carte :

setDirections("Allée Machado, Toulouse, fr", "Avenue de l'agrobiopole, Auzeville-Tolosane, fr", "fr");
<code>
Et éditer le formulaire en HTML :
<code>
<form action="#" onsubmit="setDirections(this.from.value, this.to.value); return false">
  <table id="iti">
    <tr>
      <td><input type="image" style="vertical-align:middle;"src="./buttons/de_orange_75.png" onclick="document.form.submit();"/></td>
      <td><input type="text" size="30" id="fromAddress" name="from" value="Allée Machado, Toulouse, fr"/></td>
    </tr>
    <tr>
      <td><input type="image" style="vertical-align:middle;"src="./buttons/a_orange_75.png" onclick="document.form.submit();"/></td>
      <td><input type="text" size="30" id="toAddress" name="to" value="Avenue de l'agrobiopole, Auzeville-Tolosane, fr"/></td>
    </tr>
    <tr>
      <td colspan="2" align="center"><input type="image" style="vertical-align:middle;"src="./buttons/go_orange_75.png" onclick="document.form.submit();"/></td>
    </tr>
  <table>
</form>



Code complet


<!DOCTYPE html "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>
     [Google Maps] 12. Calculer un itinéraire
   </title>
   <style type="text/css">
     html { overflow:hidden; height:100%; } 
     body { height:100%; margin:0; }
     #map { width:100%; height:100%; }
   </style>
   <link rel="icon" type="image/png" href="./favicon.png"/>
   <script src="http://maps.google.com/maps?file=api&v=2&key=votre_clé_ici" type="text/javascript"></script>
   <script type="text/javascript">
 
     var map = null;
     var gdir;
 
     function setDirections(fromAddress, toAddress) {
       gdir.load("from: " + fromAddress + " to: " + toAddress,{ "locale": "fr" });
     }
 
     function initialize() {
       if (GBrowserIsCompatible()) {
       map = new GMap2(document.getElementById('map'));
       map.setCenter(new GLatLng(43.57691664771851, 1.402451992034912),15);
       map.addControl(new GMapTypeControl());
       map.removeMapType(G_HYBRID_MAP);
       map.addMapType(G_PHYSICAL_MAP);
       map.setMapType(G_PHYSICAL_MAP);
       map.addControl(new GOverviewMapControl());
       map.addControl(new GScaleControl());
       map.addControl(new GLargeMapControl());
       map.enableScrollWheelZoom();
 
       geocoder = new GClientGeocoder();
 
       gdir = new GDirections(map);
       setDirections("Allée Machado, Toulouse, fr", "Avenue de l'agrobiopole, Auzeville-Tolosane, fr", "fr");
 
       var iti = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(60, 10));
       iti.apply(document.getElementById("iti"));
       map.getContainer().appendChild(document.getElementById("iti"));
 
      }
      else{
       alert('Désolé, mais votre navigateur n\'est pas compatible avec Google Maps');
      }
    }
  </script>
  </head>
  <body onload="initialize()" onunload="GUnload()">
    <form action="#" onsubmit="setDirections(this.from.value, this.to.value); return false">
      <table id="iti">
        <tr>
          <td><input type="image" style="vertical-align:middle;"src="./buttons/de_orange_75.png" onclick="document.form.submit();"/></td>
          <td><input type="text" size="30" id="fromAddress" name="from" value="Allée Machado, Toulouse, fr"/></td>
        </tr>
        <tr>
          <td><input type="image" style="vertical-align:middle;"src="./buttons/a_orange_75.png" onclick="document.form.submit();"/></td>
          <td><input type="text" size="30" id="toAddress" name="to" value="Avenue de l'agrobiopole, Auzeville-Tolosane, fr"/></td>
        </tr>
        <tr>
          <td colspan="2" align="center"><input type="image" style="vertical-align:middle;"src="./buttons/go_orange_75.png" onclick="document.form.submit();"/></td>
        </tr>
     <table>
    </form>
    <div id="map"></div>
   </body>
</html>



Démonstration


Résultat pleine page
Evidemment le résultat est plus joli en pleine page :-)


Remarques


Toujours se référer à l'API Google Maps - Google Maps API Reference pour les différentes classes, méthodes et options utilisées.
Le nombre de requêtes est limité à 15000 par jour et par adresse IP (idem que le géocodage).
Il est possible d'afficher l'itinéraire sous forme de texte en définissant un panel dans le constructeur GDirections.

Conclusion


De la même manière que le géocodage, le calcul d'un itinéraire se fait de façon très simple grâce à l'API Google Maps.
L'affichage de l'itinéraire ainsi que le niveau de zoom approprié est fait de façon automatique par la méthode load() de la classe GDirections.


Auteur : Fabien - fabien.goblet [ at ] gmail.com






Bonjour, Est il possible de

Bonjour,

Est il possible de récupérer l'adresse automatiquement( gps ou antenne gsm) ou si l'utilisateur loggé a renseigné son adresse dans ses préférences.

Peut-on inscrire une adresse de destination fixe?