Turoriels

Comment calculer une distance Google Map avec du PHP

MAJ le 12 novembre 2021 : Ce script ne fonctionne plus. Google demande à présent un abonnement à Google Cloud payant pour obtenir une clé API. C’est pourquoi nous avons développé  un plugin WordPress capable de calculer une distance avec prix au KM entièrement customisable et responsive design. Vous pouvez le télécharger ici. Vous pouvez également le télécharger en version PHP Fullstack ici.

 

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.

12 thoughts on “Comment calculer une distance Google Map avec du PHP

  1. BOURGER dit :

    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 ?

    1. JM Créa dit :

      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 dit :

    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

    1. JM Créa dit :

      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 dit :

    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 dit :

    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 dit :

    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 dit :

    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. JM Créa dit :

    À 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.

  8. kekre dit :

    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 une fois

    1. JM Créa dit :

      Bonjour,

      Pour tout vous dire, ce code date de 2017. Depuis ce temps, je ne me suis pas repenché dessus car je n’en ai plus eu l’utilité.

      Aux dernières nouvelles, il faut avoir sa propre clé dispo sur Google cloud, à l’époque on en avait pas besoin.

      Si j’ai un peu de temps, j’essaierai de creuser pour voir d’où vient le problème.

      Bonne journée.

  9. JM Créa dit :

    Ce script n’étant plus d’actualité, nous avons du recréer un autre script similaire à l’achat cette fois-ci.

    Version plugin WordPress : https://www.jm-crea.com/scripts-php/plugin-wordpress-calculette-vtc-taxi

    Version PHP fullstack : https://www.jm-crea.com/scripts-php/calculateur-de-distance-en-php

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *