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_terpour 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ès | Rôle |
|---|---|
/geocodage/search | Adresse → coordonnées (jusqu'à 50 résultats classés) |
/geocodage/reverse | Coordonnées → adresse la plus proche, avec la distance |
/geocodage/search/csv et /reverse/csv | Le 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 saisie | Résultat | Score | Verdict |
|---|---|---|---|
| 10 rue Royale, 74000 Annecy | 10 Rue Royale 74000 Annecy | 0,97 | Bon |
| 4 quai de la Tournelle, 75005 Paris | Quai de la Tournelle (type street) | 0,92 | Bon score, mais le numéro n'a pas été trouvé : point au milieu du quai |
| 15 rue Sainte-Catherine, 33000 Toulouse | Rue Sainte-Catherine, Bordeaux | 0,69 | Erreur de saisie : le code postal est celui de Bordeaux |
| 1 place de la Mairie, Introuvableville | 1 Place de la Mairie, Romillé (Ille-et-Vilaine) | 0,61 | Faux positif : une place de la Mairie au hasard |
| 12 rue imaginaire 99999 nullepart | Allée du Musée Imaginaire, Yzeure | 0,35 | Faux positif, avec pourtant le statut ok |
| zzz xxyy | — | — | Statut not-found |
Quatre contrôles simples écartent la plupart des erreurs :
- Un seuil de score : en dessous de 0,7, vérifiez systématiquement.
- 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). - 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). - 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.