Comment calculer une distance Google Map avec du PHP

Comment calculer une distance Google Map avec du PHP
  • 4.50 / 5 5
2 votes, 4.50 avg. rating (89% score)

Comment calculer une distance Google Map avec du PHP

Dans ce tuto, nous allons voir comment calculer une distance Google Map grace à PHP.

 

Comment calculer une distance en PHP ?

La question revient souvent, cela peut s'avérer nécessaire lorsque l'on souhaite intégrer à son site un système pour calculer une distance d'un point A à un point B.

Il existe bien sûr la solution Google Map que beaucoup connaissent qui permet de rentrer un itinéraire et une destination. Ensuite Google va calculer le nombre de kilomètres.

Bien sûr, si l'on intègre ce Google Map en Iframe, ce ne serait pas terrible, on est d'accord 🙂

C'est pourquoi, je souhaite vous faire partager mon script "un plus poussé" avec des fonctionnalités en plus.

 

Que permet ce script ?

Ce script est paramétrable, il permet de :

  • Définir un prix au KM
  • Choisir le nombre de personnes à transporter (le prix sera multiplié par X personnes)
  • Choisir allé simple ou allé retour
  • Choisir le lieu de départ
  • Choisir le lieu d’arrivée

 

Intégration du code PHP

Vous remarquerez que ce script est en brut, c'est à dire que je n'ai pas intégré de CSS. A vous de faire votre design 🙂

Il est conseillé d'appeler ce script en include afin d'optimiser votre code.

<h1>Calculer une distance</h1>
<form name="form1" method="post" action="">
<p>Prix au KM : <input type="text" name="pkm" id="pkm"> EUROS</p>
Nbr de personnes :
<select name="nbr" id="nbr">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
<p>Alle simple : <input name="type" type="radio" id="radio" value="a" checked="checked" /></p>
<p>Alle et retour : <input type="radio" name="type" id="radio2" value="ar" /></p>
<p>Lieu de depart : <input type="text" name="dep" id="dep"></p>
<p>Lieu d'arrive : <input type="text" name="ari" id="ari"></p>
<input type="submit" name="calculer" id="calculer" value="Calculer le trajet et le prix">
</form>
<?php
//on créé la fonction
function calculer_distance($adresse1,$adresse2) {
$adresse1 = str_replace(" ", "+", $adresse1); //adresse de départ
$adresse2 = str_replace(" ", "+", $adresse2); //adresse d'arrivée
$url = 'http://maps.google.com/maps/api/directions/xml?language=fr&origin='.$adresse1.'&destination='.$adresse2.'&sensor=false'; //on créé l'url

//on lance une requete aupres de google map avec l'url créée
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
$xml = curl_exec($ch);

//on réccupère les infos
$charger_googlemap = simplexml_load_string($xml);
$distance = $charger_googlemap->route->leg->distance->value;

//si l'info est récupérée, on calcule la distance
if ($charger_googlemap->status == "OK") {
$distance = $distance/1000;
$distance = number_format($distance, 2, ',', ' ');

return $distance;
}
else {
//si l'info n'est pas récupérée, on lui attribu 0
return "0";
}
}
//si le bouton calculer est lancé, on récupère les informations du formulaire et on lance la fonction
if (isset($_POST['calculer'])) {
$dep = $_POST['dep'];
$ari = $_POST['ari'];
$nbr = $_POST['nbr'];
$pkm = $_POST['pkm'];
$prix = $pkm*calculer_distance($dep,$ari);
$type = $_POST['type'];

if ($type == 'a') {
$prix = $prix*$nbr;	
}
elseif ($type == 'ar') {
$prix = $prix*$nbr;
$prix = $prix+$prix;
}
echo '<p>' . $dep . ' -> ' . $ari . '<b> ' . calculer_distance($dep,$ari) . ' KM</b></p>';
echo '<p><b>PRIX : ' . $prix . ' EUROS</b></p>'; 
}
?>
</div>

J'espère que ce petit bout de code vous sera utile.

Facebook Twitter Google+ Linkedin Mail
Mots clés associés : , ,

A propos de l'auteur : JM Créa

JM Créa est une agence de communication à Antibes (dans les Alpes-Maritimes). Nous sommes spécialisé en création de site Internet sur mesure et en référencement Google avancé.

9 Comments

  1. BOURGER-Reply
    septembre 12, 2018 at 9 h 52 min

    Bonjour j’utilise votre petit bout de code pour mon site mon module de devis et aujourd’hui il en fonctionne plus (il fonctionné très très bien jusque là et je n’ai rien changé à mon code) il ne retourne plus la distance

    auriez vous une idée du probleme ?

    • septembre 12, 2018 at 10 h 10 min

      Bonjour,

      Effectivement, depuis peut, Google impose une clé API.
      Il faut se rendre ici et générer la clé.

      Une fois que vous avez la clé, il faut remplacer :

      $url = 'http://maps.google.com/maps/api/directions/xml?language=fr&origin='.$adresse1.'&destination='.$adresse2.'&sensor=false'; //on créé l'url
      par
      $url = 'http://maps.google.com/maps/api/directions/xml?language=fr&origin='.$adresse1.'&destination='.$adresse2.'&sensor=false&key=VOTRE_CLE_API'; //on créé l'url

      À priori, c’est censé fonctionner. Mais je n’ai pas testé. Je vous laisse tester pour moi 🙂

  2. chaumette-Reply
    mars 24, 2019 at 19 h 06 min

    bonjour,
    Je voulais vous remercier pour ce morceau de code.
    J ai voulu l intégrer dans mon site web, cependant aprés execution, ce message d’erreur apparait:
    Fatal error: Call to undefined function: simplexml_load_string() in /mnt/171/sda/5/f/lc.taxi/Nouveau_site_web/distance.php on line 28
    Pouvez-vous m ‘en dire plus.
    Je suis débutant en php.
    En vous remerciant par avance.
    Cordialement

    • mars 25, 2019 at 12 h 02 min

      Bonjour,

      Le problème vient du module XML qui ne doit pas être installé sur apache.

      Il faut se connecter en SSH et l’installer de cette manière et relancer apache :

      sudo apt-get install php7.0-xml
      /etc/init.d/apache2 restart

      Ceci est pour une instalaltion sur une version php7.
      Pour une installation sur php5.6 par exemple, il faudra faire comme ceci :

      sudo apt-get install php5.6-xml
      /etc/init.d/apache2 restart

  3. chaumette-Reply
    mars 26, 2019 at 22 h 08 min

    Bonjour,

    Je voulais vous remercier pour votre réponse.

    En cliquant sur le bouton ” calculer le prix et le trajet “, j’ai un nouveau un message d’erreur:

    “Trying to get property ‘value’ of non-object”

    Celle-ci semble être relative au bloc de la fonction calculer_distance, de la ligne 32 du code ci dessus, à savoir:

    $distance = $charger_googlemap->route->leg->distance->value;

    Pourriez-vous m’en dire plus à ce sujet.

    En vous remerciant par avance pour votre indulgence.

    Cordialement.

  4. ayari-Reply
    juin 22, 2019 at 12 h 03 min

    Bonjour,

    j avais aussi la meme problem aussi
    En cliquant sur le bouton ” calculer le prix et le trajet “, j’ai un nouveau un message d’erreur:

    “Trying to get property ‘value’ of non-object”

    Celle-ci semble être relative au bloc de la fonction calculer_distance, de la ligne 32 du code ci dessus, à savoir:

    $distance = $charger_googlemap->route->leg->distance->value;

    Pourriez-vous m aidez suis neveau en php.

    merci

  5. Ayari-Reply
    juin 24, 2019 at 8 h 28 min

    Bonjour
    merci besucoup pour Ce code malheurement j ai le Meme Problem Que chaumette
    $distance = $charger_googlemap->route->leg->distance->value;

    En cliquant sur le bouton ” calculer le prix et le trajet “, j’ai un nouveau un message d’erreur:

    “Trying to get property ‘value’ of non-object”

    J espere bien que vous pouvez m aide .

    Merci beaucoup encore und fois

  6. Van Der Perre Morgan-Reply
    juin 27, 2019 at 15 h 36 min

    Bonjour,

    Je me permets de vous contacter, j’ai generé une clé api pour le script, cependant il me retourne 0 kms a chaque fois. En allant sur le site il me parle de permissions. Sur les graphiques, on constate l’activité lors d’une demande mais rien.

  7. juillet 10, 2019 at 17 h 59 min

    À priori il faut avoir une clé. Google fait payer cette fonction maintenant.

    Il suffit de cliquer ici pour s’en rendre compte :

    http://maps.google.com/maps/api/directions/xml?language=fr&origin=nice&destination=paris&sensor=false

    Les explications communiquées par Google sont ici : http://g.co/dev/maps-no-account

    Sans clé je ne peux pas tester, et pour tout vous dire, pas envie de payer d’autant plus que je n’ai plus besoin de ce module.

    Je l’avais développé il y a un certain temps pour un client qui a depuis fermé sa société. Donc je ne m’y suis plus penché.

    Bon courage à tous.

Laisser un commentaire

Votre devis gratuit

Votre nom (obligatoire)

Votre prénom (obligatoire)

Votre société

Votre email (obligatoire)

Votre téléphone

Comment nous avez-vous connu ?

Vos besoins

Votre message