Dernière mise à jour : le 9 janvier 2024

Récupération des données de localisation d’un client

Date de publication : 27/10/2022

Aujourd’hui, un petit post technique pour changer. Beaucoup de mes collègues éprouvent des difficultés à récupérer des données géographiques, et, pour cause, ce n’est pas si simple. Bien entendu, les quelques idées que je vais exprimer pourront sembler banales à un informaticien, mais, pour un géographe, c’est quelque chose d’obscur.

Le plus simple pour comprendre est de réaliser un exercice de capture de données. L’objectif est de capturer la localisation d’un utilisateur de site web (ordinateur client) et de l’enregistrer sur un serveur (ordinateur serveur). Gardez bien en tête cette distinction client/serveur, elle est fondamentale pour arriver à réaliser l’exercice.

Pour capturer la localisation terrestre du client, il faut préalablement maîtriser HTML/CSS, PHP, JavaScript et MySQL. Rien que ça ! Inutile de préciser pourquoi beaucoup de géographes laissent tomber...

Commençons déjà par capturer la localisation terrestre. Cela se fait avec l’objet navigator et la propriété geolocation (https://developer.mozilla.org/fr/docs/Web/API/Geolocation_API), et cela s’écrit :

        navigator.geolocation

Contrairement à beaucoup de propriétés de l’objet navigator, ici, elle déclenche un événement qu’il faut capturer avec addEventListener. En effet, la géolocalisation est une opération asynchrone par rapport au chargement de la page HTML. L’unique élément bloquant est le message du navigateur (par défaut) qui vous demande si vous souhaitez être localisé ou non. La propriété geolocation contient plusieurs options à régler ; la plus importante est bien entendu le degré de précision. Paramétrer comme voulu, il est possible de capturer la latitude et la longitude en degrés décimaux, ainsi que la précision de leur mesure en mètres.

Les informaticiens le savent, JavaScript est un langage qui s’exécute côté client. Il est de fait impossible de récupérer directement les données de localisation côté serveur. Il faut utiliser les techniques Ajax, notamment avec l’objet XMLHttpRequest() qui va permettre d’envoyer les données au serveur via une page écrite en PHP. Cette dernière récupère les données géoréférencées comme si c’était des éléments d’un formulaire. L’opération est toujours exécutée de manière asynchrone afin de ne pas bloquer le script. La page PHP vers laquelle communique JavaScript s’exécutera, mais ne s’affichera pas sur le navigateur. Cela permet de bien illustrer que le PHP est un langage de programmation serveur, et non un moyen d’afficher dynamiquement des pages HTML.

Le problème de cette collecte de données est qu’elle ne permet pas de distinguer les différents clients connectés. Il serait intéressant d’y ajouter l’adresse IP de leur connexion et la date précise de la collecte. La date se capture côté client afin d’avoir la date en local ; il suffit d’utiliser la méthode statique Date(). L’adresse IP récupérable n’est pas celle du client, mais celle de son serveur de connexion vers lequel sa box l’a orienté. De fait, sans la localisation client, il est impossible de trouver le lieu de connexion via son adresse IP. Toutefois, cette adresse IP est utile pour distinguer les connexions identiques, c’est-à-dire ayant la même information géographique, mais pas avec la même précision. Ultérieurement, cela ne pourra être qu’une aide remarquable pour trier et analyser les données de localisation récoltées. On récupère l’adresse IP côté serveur. C’est de fait la page PHP qui introduit la données via la variable superglobale $_SERVER et son attribut ‘REMOTE_ADDR’ :

        $_SERVER[‘REMOTE_ADDR’]

De fait, dans le fichier PHP, nous avons une adresse IP, une latitude, une longitude, une précision et une date. Il ne reste plus qu’à envoyer ces données à une base de données MySQL, le plus souvent en utilisant phpMyAdmin comme support pratique, ce qui ne dispense pas de connaître ses requêtes SQL. En local, pour les tests, il est également possible d’enregistrer les valeurs dans un fichier texte, ce qui est déconseillé en protocole ftp pour des raisons de sécurité.

Et voilà, vous avez collecté la localisation de votre client ! Vous pouvez vous exercer en tentant de projeter ses coordonnées de localisation sur un carte en utilisant les outils en JavaScript de openLayer qui utilisent les fonds de carte libres de droit comme openStreetMap. En traçant un cercle ayant pour rayon la précision autour de la latitude et de la longitude collectées, vous allez être surpris de la précision de la capture de votre localisation via le GPS de votre PC. Si ça vous intéresse, n’hésitez pas à me demander, j’écrirai un post sur le sujet.

N’hésitez pas commenter et à me dire si quelque chose ne va pas ou n’est pas claire !

Maxime Forriez.

Commentaires :

Veuillez compléter tous les éléments du message !

Aucun commentaire n'a été formulé !