LINUX:API de géolocalisation

But

Nous allons décrire ici l'utilisation de ce programme. Cet API recherche les rues, les communes et leurs coordonnées géographiques répondant à divers critères. Il permet d'afficher la liste des pays concernés et d'effectuer des recherches sur les départements (FR) et les provinces (BE).


Mise en place

Les sources sont téléchargeables via le lien ci-dessous:

Télécharger le fichier ZIP contenant les scripts PHP de l'API

Il faut le dézipper avec la commande suivante:

unzip Localisation.zip

Le répertoire "localisation" est créé. Il contient des scripts PHP et le sous-répertoire "public". Ce sous-répertoire ne contient que le script "recherche.php". Au niveau du serveur WEB, seul ce script est accessible à partir d'Internet. C'est ce script qu'il faut appeler accompagné de paramètres.


Configuration

Cet outil va interroger la base de données créé lors des étapes précédentes. Le fichier "localisation/config.php" doit être configuré en conséquence.

Voici le contenu de ce fichier:


<?php
// SQL
// Indiquez les paramètres de votre connexion SQL
 $conf['db_host'] = 'localhost';
 $conf['db_nom'] = 'dblocalisation';
 $conf['db_user'] = 'usergeo';
 $conf['db_password'] = 'MOTDEPASSE';
?>

Dans cet exemple:

  • "localhost" est le nom de la machine qui héberge le serveur MariaDB
  • "dblocalisation" est le nom du schéma de la base de données MariaDB
  • "usergeo" est le nom d'utilisateur MariaDB. Il faut restreindre son accès au schéma ci-dessus et qu'il n'aie que le privilège "SELECT"
  • "MOTDEPASSE" est le mot de passe (à changer !!!) de l'utilisateur "usergeo"

Tous ces paramètres sont à adapter selon votre infrastructure.


Utilisation

Diverses recherches sont possibles:

  • La rue (street)
  • La commune (city)
  • Le département (FR) ou la province (BE) (department)
  • Le pays (country)

Entre parenthèses, vous trouvez le mot clé à utiliser pour l'argument "type".

Les résultats retournés sont sous forme d'une liste, limitée à 20 par défaut. Par défaut, une sortie au format JSON est fournie mais une sortie brute au format HTML est possible dans un but de vérification plus facile.

Le script a besoin de divers paramètres; tous ne sont pas tous nécessaires ou sont optionnels en fonction du type de recherche:

  • "type": type de recherche. Quatre valeurs sont possible comme décrite ci-dessus: street, city, department et country. Le type "street" est utilisé par défaut.
  • "trace": si une valeur quelconque est fournie, une sortie brute HTML remplace la sortie au format JSON.
  • "maximumResponses": nombre maximum de résultats. Il est limité à 50 et par défaut, il vaut 20.
  • "terr": permet de préciser le pays et/ou le département de recherche et dépend de la variable 'type" (voir détails).
  • "text": comprend la partie concernant la recherche; il reprend pour partie, le champs à rechercher et dépend de la variable 'type" (voir détails).


Recherche sur la rue (type=street)

restriction de la recherche à un/des pays et/ou à un/des départements. Le format répond au canevas suivant: <code du pays> <code du département>;<code du pays> <code du département>;... Il est conseillé de fournir au moins un code de pays ou un code de département sinon la recherche prend plus de temps. Si plusieurs départements/pays sont requis, ils sont séparés par un point virgule (";"). Exemples:

FR 75;BE 90000 (pour le département de Paris et la province de Namur)
29 (pour le  département du Finistère)
  • "text": recherche en fonction du nom de la rue, du nom de la commune et du code postal. Ces critères peuvent être partiel; par exemple, pour rechercher "rue du Baty de l'Espagnol", on peut effectuer la recherche sur base de "espagno". Le format répond au canevas suivant: <rue>:<code postal> <commune> Au moins un des trois critères doit être fourni. Les accents et la case n'ont pas d'importance. Exemple:
Baty:fosse (pour "Rue du Baty:5070 Fosses-la-Ville")


Exemples d'appel avec l'utilitaire "curl" via le serveur WEB:

curl "http://localhost/localisation/recherche.php?type=street&maximumResponses=5&terr=BE+90000&text=Baty:5070+Fosses"


Résultats

L'application retourne une liste de résultat limitée au nombre mentionné, sous format JSON. Le nom des zones retournées sont assez explicites dans l'exemple ci-dessous pour nécessiter une explication.

La commande ci-dessus donne:


{"status":"OK",
 "results":[
  {
   "city":"Fosses-la-Ville",
   "street":"Rue Baty de l'Espagnole",
   "countrycode":"BE",
   "regioncode":"03000",
   "departementcode":"90000",
   "zipcode":"5070",
   "x":"50.376691579959726",
   "y":"4.698403591401368",
   "fulltext":"Rue Baty de l'Espagnole, BE 5070 Fosses-la-Ville"
  },
  {
   "city":"Fosses-la-Ville",
   "street":"Rue du Baty",
   "countrycode":"BE",
   "regioncode":"03000",
   "departementcode":"90000",
   "zipcode":"5070",
   "x":"50.37682283553043",
   "y":"4.707929223409696",
   "fulltext":"Rue du Baty, BE 5070 Fosses-la-Ville"
  },
  {
   "city":"Fosses-la-Ville",
   "street":"Rue Haut-Baty",
   "countrycode":"BE",
   "regioncode":"03000",
   "departementcode":"90000",
   "zipcode":"5070",
   "x":"50.42369167603692",
   "y":"4.648798462403482",
   "fulltext":"Rue Haut-Baty, BE 5070 Fosses-la-Ville"
  }
 ]
}




->retour à la page du menu sur l'API de GéoLocalisation