Il est possible avec l’API Google MAP de calculer des distances entre 2 ou plusieurs points. Ici, l’exercice consiste à calculer le marker le plus proche d’un code postal envoyé via une simple requête. Autrement dit, le code fourni ci-dessous vous permettra d’afficher un résultat répondant à la question : « quel lieu proposé sur ce site est le plus proche de mon code postal ? » On est parti pour décortiquer une Google Map et le calcul kilométrique !
Le code est disponible ici (et tout en bas), mais pour en voir le résultat, il vous faudra une clé Google MAP liée à votre site web.
L’HTML n’est pas très conséquent. Nous allons nous contenter d’un simple formulaire avec un champ input et de type « text » ; c’est via ce formulaire que le visiteur pourra entrer son CP. L’ID de ce champ est « zip« .
La deuxième partie de l’HTML est le message dynamique qui affichera le résultat. En tout, je réceptionnerai 3 valeurs qui m’intéressent :
Comme d’habitude avec l’HTML, rien de très compliqué, on prépare le terrain et on met de côté les ID des différentes balises qui seront dynamiques. Vous remarquerez que les lieux sont limités à 3 dans mon exemple. Vous pouvez ici boucler un résultat émanant d’une base de données ou d’un fichier CSV par exemple. (encore faudrait-il travailler avec autre chose que de l’HTML)
J’aurais pu également partir du fichier JS pour lister ces adresses via une API. Ici, je pars du principe que le client fourni lui-même ces adresses en texte brut. Cela tombe bien, Google comprend les adresses proposées, même si vous mettez le numéro à la fin ou le code postal au début par exemple …
Je commence dans un premier temps à définir mes constantes. Elles m’aideront pour la suite. Vous verrez par contre que 3 d’entre-elles initient des outils Google. Les voici, avec une brève explication :
Ça fait beaucoup, mais ce sont bel et bien toutes ces librairies qui vont me permettre d’atteindre l’objectif visé. On passe la suite en passant la fonction runDistanceCalcul que je détaillerai par après.
Comme cité plus haut, l’autocomplete me permettra de sélectionner mon CP.
Vous verrez à la ligne 39 qu’il est possible de restreindre les adresses par pays. C’est un tableau, donc vous pouvez très bien ajouter le code unique de plusieurs pays. Moi, j’ai choisi de limiter les recherches dans la Belgique, le code est donc [« be »]. Maintenant qu’on est prêt, l’action peut commencer. Elle commence à la ligne 43 et 50 où on appelle « autocomplete » et « geocoder » pour commencer à chercher et proposer des résultats. S’il y a un résultat trouvé, je profite par déjà écrire l’adresse de départ dans la balise html dont l’ID est « place-name« . Ensuite, j’appelle la librairie « service« .
Cette dernière va prendre en paramètre :
La fonction « runDistanceCalcul » compare les résultats. Ensuite, à l’aide de la fonction sort(), je trie les résultats du plus petit au plus grand. Il suffit dès lors de prendre le 1er pour avoir le lieu le plus proche comme demandé !! Il me reste plus qu’à compléter mes balises dynamiques avec le résultat obtenu.
Le résultat est donné sous forme d’objet et c’est donc très facile de l’exploiter. Il faut utiliser la clé « distance » pour les km et la clé « name » pour le nom du lieu le plus proche.
J’en profite également pour vider le champ text de recherche afin de permettre à l’utilisateur de réaliser d’autres recherches du même type.
Pour terminer, je n’oublie pas d’afficher toute la section HTML qui était cachée jusque-là … Et voilà ! Je vous laisse le code à l’aide de coodePen mis vous verrez que sans la clé, aucun aperçu n’est possible …
Cet article est en lien avec celui-ci : styliser une google map.
Et voilà la doc officielle de Google Map. Vous verrez que je suis parti des codes repris dans les exemples d’utilisation : https://developers.google.com/maps/documentation/javascript/distancematrix?hl=fr