Utilisation des Api de géolocalisation avec PHP

Dans de nombreux projets, j'ai besoin de pouvoir géolocaliser des adresses ou au contraire de trouver des informations géographiques (ville, département ...) à partir de coordonnées géographiques.

Pour me simplifier la vie et pouvoir intégrer cette fonctionnalité simplement lorsque j'en ai besoin, j'ai mis en place un petit bundle PHP qui remplit cette mission. Geolocator est donc capable de trouver les coordonnées géographiques d'une adresse donnée et des retrouver des informations plus administratives à partir d'une latitude et d'une longitude.
Il est également capable, dans la plupart des cas, de trouver l'altitude.

Et tout cela en utilisant que des ressources accessibles gratuitement et sans clé d'API :

  • https://adresse.data.gouv.fr/api-doc/adresse
  • https://nominatim.org/release-docs/develop/api/Overview/
  • https://www.opentopodata.org/

Le dépot

https://github.com/frvaillant/Geolocator

Installation

composer require francoisvaillant/geolocator

Un petit tour

Ce bundle repose sur une classe nommée Place. C'est elle qui définit un lieu par ses coordonnées géographiques ou son adresse postale. Ainsi, pour démarrer il suffit de l'instancier et de l'hydrater avec les bons paramètres :

Démarrage

use Francoisvaillant\Geolocator\Place;
$place = new Place();

Trouver un lieu par ses coordonnées

Si vous avez les coordonnées d'un point et que vous en cherchez la commune par exemple :

$place
   ->setLatitude(44.567)
   ->setLongitude(0.548)
   ->reverse();
$city = $place->getCity();

Géolocaliser une adresse

A l'inverse, si vous avez une adresse dont vous souhaitez obtenir les coordonnées :

$place
   ->setAddress('8 rue du Docteur Pujos')
   ->setZipCode(17300)
   ->setCity('Rochefort')
   ->geolocate();
$latitude = $place->getLatitude();
$longitude = $place->getLongitude();

Trouver une altitude

Pour obtenir l'altitude d'un point, il vous faut ses coordonnées géographiques :

$place
   ->setLatitude(44.567)
   ->setLongitude(0.548)
   ->findAltitude();
$altitude = $place->getAltitude();