OpenRefine et géocodage avec adresse.data.gouv.fr

OpenRefine est un outil permettant de remettre en forme des données tabulaires mais aussi de les enrichir par l’appel d’API externes.

Un besoin courant est le géocodage d’adresses postales dans différents but:

  • obtenir des coordonnées géographiques
  • valider/homogénéiser des libellés adresses
  • vérifier l’existence des adresses

Dans mon fichier d’exemple, les adresses sont réparties sur 3 colonnes: Adresse, Code postal et Ville.

On va donc constituer l’URL pour interroger l’API de géocodage de adresse.data.gouv.fr qui est de la forme

Ceci se fait dans OpenRefine en ajoutant une colonne obtenue via une URL:

Le script GREL (langage interne à OpenRefine) est le suivant:

http://api-adresse.data.gouv.fr/search/?q="+(cells["Adresse"].value+" “+cells[“Code postal”].value+” “+cells[“Ville”].value).replace(“ “,”%20")+”&limit=1

Il concatène les 3 colonnes, puis remplace les espaces par des %20 (encodage minimal pour les URL).

Quelques secondes après (le temps d’envoyer les requêtes à l’API et d’obtenir les réponses), une nouvelle colonne contenant la réponse JSON fournie par le géocodeur pour chacune des lignes de notre tableau de données apparaît.

Pour en extraire les informations qui nous sont utiles, voici les exemples GREL correspondants:

Score: value.parseJson().features[0].properties.score

Type: value.parseJson().features[0].properties.type

Longitude : value.parseJson().features[0].geometry.coordinates[0]

Latitude : value.parseJson().features[0].geometry.coordinates[1]

etc…

Bon géocodage !