Bonjour à tous, voici un code qui permet de calculer la distance entre deux adresses remplies dans un formulaire, code basé sur le service DistanceMatrix de Google Maps (voir la syntaxe
ici). En fait, ce script permet théoriquement de sortir les distances relatives entre plusieurs adresses de départ et plusieurs d'arrivée. Il marche, mon problème c'est en ce qui concerne les messages d'erreurs : aucun problème s'il y a erreur sur l'adresse de départ, en revanche je n'arrive pas à générer de message d'alerte pour une adresse d'arrivée aberrante (du style "sdfsdf,sdiufyqsui,France"). Un autre problème se pose également, DistanceMatrix ne renvoie simplement aucune réponse quand on lui demande une distance entre une adresse en France et une adresse à Cuba. Quelqu'un a une idée pour résoudre au moins le premier problème ?
Voici le code:
Code HTML :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans nom</title>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&language=fr"></script>
<script type="text/javascript">
function CalculDistance()
{
//récupération des champs du formulaire
var adr_dep=document.forms[0].adresse_dep.value;
var cp_dep=document.forms[0].cp_dep.value;
var ville_dep=document.forms[0].ville_dep.value;
var pays_dep=document.forms[0].pays_dep.value;
var adr_arr=document.forms[0].adresse_arr.value;
var cp_arr=document.forms[0].cp_arr.value;
var ville_arr=document.forms[0].ville_arr.value;
var pays_arr=document.forms[0].pays_arr.value;
var origine=adr_dep+', '+cp_dep+', '+ville_dep+', '+pays_dep;
var destination=adr_arr+', '+cp_arr+', '+ville_arr+', '+pays_arr;
//requête de distance auprès du service DistanceMatrix, avec ici une seule adresse de départ et une seule d'arrivée
var service = new google.maps.DistanceMatrixService();
service.getDistanceMatrix(
{
origins: [origine],
destinations: [destination],
travelMode: google.maps.TravelMode.DRIVING,
unitSystem: google.maps.UnitSystem.METRIC,
avoidHighways: false,
avoidTolls: false
}, callback);
}
function callback(response, status)
{
if (status != google.maps.DistanceMatrixStatus.OK)
{
alert('Erreur : ' + status); //message d'erreur du serveur distant GG Maps
}
else
{
//réponses du serveur (
var origins = response.originAddresses;
var destinations = response.destinationAddresses;
for (var i = 0; i < origins.length; i++)
{
var results = response.rows[i].elements;
var dep = origins[i];
if(dep!='')
{
for (var j = 0; j < results.length; j++)
{
var element = results[j];
var dist = element.distance.value;
var statut = element.status;
var arr = destinations[j];
if(arr!='')
{
document.forms[0].distance.value=parseInt(dist/1000);//distance en km
document.getElementById('results').innerHTML = 'Départ : ' + dep + '<br />Arrivée : ' + arr + '<br /><br />';
}
else
{
alert("impossible de localiser l'adresse d'arrivée");
}
}
}
else
{
alert("impossible de localiser l'adresse de départ");
}
}
}
}
</script>
</head>
<body>
<form id="form1" name="form1" action="" method="post"/>
<p>adresse de départ</p>
<p><label for="adresse_dep">Adresse :</label><input type="text" name="adresse_dep" /></p>
<p><label for="cp_dep">Code postal :</label><input type="text" name="cp_dep" /></p>
<p><label for="ville_dep">Ville :</label><input type="text" name="ville_dep" /></p>
<p><label for="pays_dep">Pays :</label><input type="text" name="pays_dep" /></p>
<hr />
<p>Adresse d'arrivée</p>
<p><label for="adresse_arr">Adresse :</label><input type="text" name="adresse_arr" /></p>
<p><label for="cp_arr">Code postal :</label><input type="text" name="cp_arr" /></p>
<p><label for="ville_arr">Ville :</label><input type="text" name="ville_arr" /></p>
<p><label for="pays_arr">Pays :</label><input type="text" name="pays_arr" /></p>
<hr />
<p>Distance à parcourir : <input type="text" name="distance" class="date" /> km <input value="calculer" type="button" onclick="CalculDistance();" /></p>
<p id="results"></p>
</form>
</body>
</html>
Nebenobo