Pour rappel, l’ETL open source Apache Hop dispose d’une brique de transformation « REST Client » qui permet d’exécuter au sein de pipeline des requêtes HTTP mobilisant des services web normalisés en REST. Aujourd’hui, nous vous proposons de décrire un processus Apache Hop dédié au géocodage d’adresses postales en valorisant l’API de la BAN (Base Adresse Nationale)

Les services de la BAN proposant déjà un géocodeur permettant de traiter des fichiers CSV ; notre pipeline Apache Hop intégrera donc des fonctionnalités complémentaires de filtrage du résultat sur la base de l’indice de pertinence retourné par le service pour isoler les adresses dont le géocodage mérite d’être vérifié manuellement.

Bien entendu, la qualité du géocodage dépendra grandement de la qualité et de l’exactitude de l’adresse initiale à traiter.

1- Extraction des adresses à géocoder et création d’une URL d’appel pour chaque adresse

La première étape consiste à extraire les adresses à géocoder. Dans notre cas, l’adresse est stockée dans un fichier texte (cela aurait pu être une table de base de données) et dans un seul champ. Dans l’idéal, une séparation des champs voies, code postal et ville aurait permis à l’API de limiter les recherche et proposer des résultats plus pertinents.

Cette étape se poursuit par la création, pour chaque adresse à géocoder, d’une URL d’appel. On utilise une étape « User defined Java expression » qui permet notamment d’encoder proprement (espace, accents, etc.) le texte de l’adresse dans la requête via la classe Java java.net.URLEncoder. (La documentation relative à l’API est disponible ici )

2- Géocodage via l’API et isolement des adresses en erreur

Cette phase mobilise le service de la BAN par un appel GET en précisant le champ contenant l’URL à appeler et les champs de sortie. Nous souhaitons dans notre cas stocker la réponse du géocodage en Json et le statut. Ce dernier est ensuite utilisé pour isoler les adresses qui n’ont pas pu être géocodées.

3- Traitement de la réponse Json

Les données retournées en GeoJson sont extraites pour récupérer, dans notre cas la longitude, la latitude, le score et le texte de l’adresse BAN retourné en plus des coordonnées (il existe de nombreux autre attributs).

Un tri sur le score suivi d’un dédoublonnage permet d’isoler un seul résultat de géocodage par adresse à géocoder (le services peut retourner par défaut jusqu’à 50 propositions)

Le filtrage sur le score (valeur de seuil à ajuster selon le contexte) permet d’isoler les lignes dont le géocodage peut être considéré comme pertinent de celles qui méritent une vérification ou une validation.

En conclusion, même si ce processus s’avère plus long en terme de temps de traitement que l’utilisation du service de géocodage CSV (une requête est réalisée vers le service par adresse à géocoder), il présente l’avantage de pouvoir traiter chaque résultat individualisé et aiguiller ainsi les lignes vers les étapes appropriées et de s’affranchir de la création d’un fichier CSV, notamment quand les adresses sont stockées dans une base de données métier.

Ce processus Apache fait partie des nombreux exercices proposés dans le cadre des formations Apache Hop dispensées par Agaric IG. N’hésitez pas à nous contacter pour vos besoins en formation sur cet ETL.