Géocoder des adresses avec la BAN, sans se faire piéger

Base Adresse Nationale, service de géocodage de la Géoplateforme, fichiers CSV, géocodage inverse : placer ses adresses sur une carte et repérer les faux positifs grâce au score.

Placer une liste de clients, d'équipements ou de sinistres sur une carte commence toujours par la même opération : le géocodage, qui transforme une adresse en coordonnées. En France, la référence est la Base Adresse Nationale (BAN), interrogeable gratuitement et sans clé. Le géocodage lui-même est simple ; le piège est d'accepter sans contrôle des résultats faux. Ce tutoriel montre comment géocoder une adresse ou un fichier entier, et surtout comment savoir quand se méfier.

La Base Adresse Nationale

La BAN est le référentiel officiel des adresses en France : chaque numéro, chaque voie et chaque lieu-dit avec sa position. Ce sont les communes qui en ont la charge : depuis la loi 3DS de 2022, elles dénomment les voies, numérotent les constructions et doivent publier ces données dans la BAN, le plus souvent au moyen d'une « Base Adresse Locale ». La BAN est diffusée sous Licence Ouverte Etalab 2.0 depuis 2020, et son exploitation est assurée par l'IGN.

Elle se télécharge par département sur adresse.data.gouv.fr, en CSV :

id;numero;rep;nom_voie;code_postal;code_insee;nom_commune;…;lon;lat;type_position;…;cad_parcelles
74004_0120_00008;8;;Chemin des teppes;74540;74004;Allèves;…;6.067463;45.759167;entrée;…;740040000C0788
  • id (la « clé d'interopérabilité ») : code INSEE, code de la voie et numéro, avec son éventuel suffixe (74004_0090_00018_ter pour le 18 ter).
  • type_position : ce que désigne le point (entrée, bâtiment, délivrance postale, parcelle…).
  • cad_parcelles : la ou les parcelles cadastrales de l'adresse, au format IDU du tutoriel sur le cadastre.
  • certification_commune : 1 si la commune a validé l'adresse.

Le service de géocodage de la Géoplateforme

Changement d'adresse. L'ancienne « API Adresse » (api-adresse.data.gouv.fr) a été transférée à l'IGN en 2025. Le nouveau service est data.geopf.fr/geocodage. L'ancien domaine a été annoncé comme décommissionné fin janvier 2026 ; en octobre 2026, il redirige encore ses requêtes vers le nouveau service, mais rien ne garantit que cela dure. Si votre code utilise encore l'ancienne adresse, remplacez-la : les paramètres et les réponses sont les mêmes.

Point d'accèsRôle
/geocodage/searchAdresse → coordonnées (jusqu'à 50 résultats classés)
/geocodage/reverseCoordonnées → adresse la plus proche, avec la distance
/geocodage/search/csv et /reverse/csvLe même traitement pour un fichier CSV entier (50 Mo ou 200 000 lignes au plus)
/geocodage/async/…Traitement différé des gros fichiers, jusqu'à 1 Go

Le service est limité à 50 requêtes par seconde par adresse IP. Au-delà de quelques centaines d'adresses, préférez donc l'envoi d'un fichier CSV aux requêtes une par une. Outre les adresses (index=address), il sait chercher des points d'intérêt (poi) et des parcelles cadastrales (parcel).

const q = '10 rue Royale Annecy';
const url = 'https://data.geopf.fr/geocodage/search?index=address&limit=1&q=' + encodeURIComponent(q);
const fc = await (await fetch(url)).json();
const f = fc.features[0];

f.geometry.coordinates;   // [6.124376, 45.900406]  (longitude, latitude)
f.properties.label;       // "10 Rue Royale 74000 Annecy"
f.properties.score;       // 0.97  (confiance, de 0 à 1)
f.properties.type;        // "housenumber" : le numéro a été trouvé
f.properties.citycode;    // "74010"  (code INSEE)
[f.properties.x, f.properties.y];   // [942179.09, 6538205.79] : déjà en Lambert 93

Des filtres limitent les erreurs : postcode=74000, citycode=74010 ou type=housenumber. Les paramètres lat et lon favorisent les résultats proches d'un point, et autocomplete=1 sert à la saisie au clavier.

Pour un fichier entier, une seule requête suffit, par exemple avec curl :

curl -X POST https://data.geopf.fr/geocodage/search/csv \
  -F data=@clients.csv \
  -F columns=adresse -F columns=ville \
  -F postcode=code_postal \
  -o clients_geocodes.csv

columns désigne les colonnes à assembler pour former l'adresse, et postcode (ou citycode) une colonne utilisée comme filtre. Le service ajoute longitude, latitude, result_score, result_type, result_label, result_status… en fin de ligne. Le paramètre result_columns permet de n'en garder que certaines.

Lire le score : « ok » ne veut pas dire « bon »

Le service renvoie toujours le résultat le plus vraisemblable, même quand il est absurde. Le statut result_status=ok signifie seulement « une réponse a été trouvée ». Des tests réels :

Adresse saisieRésultatScoreVerdict
10 rue Royale, 74000 Annecy10 Rue Royale 74000 Annecy0,97Bon
4 quai de la Tournelle, 75005 ParisQuai de la Tournelle (type street)0,92Bon score, mais le numéro n'a pas été trouvé : point au milieu du quai
15 rue Sainte-Catherine, 33000 ToulouseRue Sainte-Catherine, Bordeaux0,69Erreur de saisie : le code postal est celui de Bordeaux
1 place de la Mairie, Introuvableville1 Place de la Mairie, Romillé (Ille-et-Vilaine)0,61Faux positif : une place de la Mairie au hasard
12 rue imaginaire 99999 nullepartAllée du Musée Imaginaire, Yzeure0,35Faux positif, avec pourtant le statut ok
zzz xxyy——Statut not-found

Quatre contrôles simples écartent la plupart des erreurs :

  1. Un seuil de score : en dessous de 0,7, vérifiez systématiquement.
  2. Le type : si l'adresse saisie commence par un numéro et que le résultat n'est pas de type housenumber, le point est sur la voie (street), voire au centre de la commune (municipality).
  3. La commune : la commune ou le code postal trouvés doivent correspondre à la saisie. Attention aux communes nouvelles : la réponse donne aussi l'ancienne commune (oldcity).
  4. L'ambiguïté : si le deuxième résultat (result_score_next) a presque le même score que le premier, le service a hésité entre deux lieux.

Préparer ses adresses

  • Gardez le code postal ou mieux le code INSEE dans une colonne séparée, et utilisez-le comme filtre : c'est le moyen le plus efficace d'éviter les homonymes.
  • Retirez ce qui n'est pas une adresse : « BP 12 », « CEDEX », « Bâtiment B », « 3ᵉ étage », raison sociale…
  • Les abréviations courantes (av, bd, pl, chem) et l'absence d'accents ne gênent pas le service ; les fautes de frappe dans le nom de la commune, si.
  • Enregistrez le fichier en UTF-8, comme l'exige le service (Excel : « CSV UTF-8 »).

Le géocodage inverse

À partir d'un point, /reverse renvoie l'adresse la plus proche et sa distance :

https://data.geopf.fr/geocodage/reverse?index=address&limit=1&lon=2.3488&lat=48.8534
→ « Parvis Notre-Dame Place Jean-Paul II 75004 Paris », distance 23 m

La plus proche n'est pas forcément la bonne : à un carrefour ou devant une grande parcelle, l'adresse réelle peut être celle de la rue voisine. Contrôlez la distance et fixez-vous une distance maximale.

Adresses et données personnelles

Une adresse associée à un nom est une donnée personnelle. Pour géocoder un fichier de clients, n'envoyez au service que les colonnes nécessaires (adresse, code postal, commune) avec un identifiant de ligne, puis rattachez les résultats à votre fichier. C'est ce que fait le géocodeur d'adresses de ce site : il applique les quatre contrôles ci-dessus, classe chaque ligne (bon, à vérifier, introuvable), permet de corriger un point à la main sur la carte et exporte le tout en CSV, GeoJSON ou KML.

Démonstration

Tapez une adresse : les suggestions s'affichent avec leur score et leur type. Cliquez ensuite sur la carte pour un géocodage inverse.

À essayer : « 4 quai de la Tournelle Paris » (numéro introuvable, type street), « place de la mairie » sans commune (des dizaines de candidats au score proche), puis un clic au milieu d'un champ : l'adresse « la plus proche » peut être à plusieurs centaines de mètres.

Licences : textes et schémas sous licence CC BY-SA 4.0 (réutilisation libre en citant CartoForge et en partageant à l'identique) ; extraits de code sous licence MIT, à copier librement dans vos projets.
Liens, services et noms de couches vérifiés le 15/10/2026. Un lien cassé ? Signalez-le.