Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Ce guide a vocation à vous accompagner dans l'usage des API géographiques principalement opérées par Etalab.
Ce guide propose d'explorer des cas pratiques d'utilisation des API géographiques mises à votre disposition pour vous accompagner dans leur utilisation, que vous soyez en train de construire une carte ou que vous souhaitiez récupérer des données géographiques.
Ce guide s'adresse donc à plusieurs types de profils :
Néophytes dans l'utilisation des APIs ;
Intégrateurs web ;
Spécialistes du secteur géospatial.
Il s'agit d'un outil évolutif et ouvert. Vous pouvez contribuer à l'améliorer en proposant une modification sur GitHub ou en contactant directement l'équipe Géo d'Etalab.
Quelles sont les API géographiques dont il est question dans ce guide ?
API Adresse (Base Adresse Nationale - BAN)
L'API Adresse permet d'interroger la Base Adresse Nationale, base de données de l’intégralité des adresses du territoire français. En intégrant l'API dans votre système d'information, vous pouvez facilement rechercher une adresse et notamment faire de l'autocomplétion et de la vérification d'adresse, géolocaliser une adresse sur une carte ou encore faire une recherche géographique inversée (trouver la rue la plus proche de coordonnées géographiques).
API Découpage administratif (API Geo)
L'API Découpage Administratif permet d'interroger les référentiels géographiques plus facilement. En intégrant l'API dans votre système d'information, vous pouvez notamment rechercher une commune par nom, code postal ou coordonnées géographiques, rechercher un département par son nom ou encore rechercher une région par son nom.
Les tuiles vectorielles openmaptiles.geo.data.gouv.fr
L'API permet de mettre à disposition des tuiles vectorielles qui sont affichables sur des cartes géographiques interactives. Elles servent principalement à afficher des fonds de plan mais aussi les contours cadastraux et les limites administratives en France. Cela permet de vous affranchir d'APIs cartographiques comme Google Maps.
Recommandations logiciels
Il est recommandé d'avoir un navigateur web en ayant installé l'extension JSONView pour faciliter la compréhension des retours JSON.
Vous pouvez aussi installer un éditeur de texte plus agréable à utiliser que le Bloc-Notes/Notepad par défaut si vous êtes sous Windows. Il vous permettra en particulier lorsque vous faites des tests sur les URLs de les modifier avant de les copier dans la barre d'adresse de votre navigateur. Il peut s'agir de Notepad++ si vous êtes sous Windows ou bien de Microsoft Visual Studio Code quel que soit votre système d'exploitation. Une liste plus complète d'éditeurs de texte est disponible ici.
Dans ce guide, vous apprendrez comment :
Familier des APIs ? Vous pouvez directement vous référer à :
Dans cette section, vous apprendrez comment :
L’API Découpage administratif permet d’obtenir des données administratives françaises :
à des échelles différentes (communes, départements, régions) ;
à des années différentes (notion de millésime).
L'API Découpage administratif est principalement destinée à un besoin de recherche pour des formulaires en partant du nom de la commune, du code postal ou bien du code INSEE.
Les usages départements ou régions bien que pratiques semblent moins intéressants car les données ne changent quasiment jamais dans le temps et le nombre limité d'éléments fait qu'il est possible de gérer ces informations côté client.
L’API est très utile pour permettre de faire l'auto-complétion qu’il s’agisse d’un formulaire ou pour permettre de zoomer sur une commune trouvée dans un contexte web : http://bl.ocks.org/ThomasG77/0b99013795f76699c5c9a0d7daf4411e
La partie importante se base sur un simple Fetch.
Il est aussi possible de remplir les informations de coordonnées dans un tableur comme Libre Office.
Ici sont présentés les exemples les plus courants.
Pour des usages plus spécifiques, vous pouvez utiliser les exemples de la documentation officielle.
Rechercher par code postal : https://geo.api.gouv.fr/communes?codePostal=78000
Rechercher par code INSEE : https://geo.api.gouv.fr/communes?code=44109
Rechercher par nom : https://geo.api.gouv.fr/communes?nom=Nantes&boost=population&limit=5 (on ajoute un boost par population pour que la plus grande commune soit privilégiée)
Rechercher par coordonnées : https://geo.api.gouv.fr/communes?lat=47.0482944&lon=-1.1501568
Filtrer par département pour éviter les problèmes liés à l'homonymie de commune, par exemple la commune de Saint-Aubin existe dans les départements 10, 21, 36, 39, 40, 47, 59, 62, 91 et 02 : https://geo.api.gouv.fr/communes?nom=Saint-Aubin&codeDepartement=21
Obtenir toutes les communes d'un département : https://geo.api.gouv.fr/departements/44/communes
Obtenir toutes les communes d'une région : https://geo.api.gouv.fr/communes?codeRegion=84
Tous les exemples ci-dessus ne filtrent pas les champs, ne permettent pas de choisir si on veut des géométries pour les communes : soit le centre, au sens mathématique, de la commune, soit son contour, ni ne permettent pas le choix de la sérialisation : pour la cartographie, généralement, on utilise un JSON spécifique dit GeoJSON.
La meilleure manière de comprendre comment cela fonctionne est d'utiliser la démo recherche avancée de la documentation officielle. Elle permet, en cochant, de voir comment l'URL d'appel change en particulier l'option fields
pour ne retourner que les colonnes/champs nécessaires.
Ce qu'il faut retenir pour les aspects géo :
Si vous souhaitez les GeoJSON avec le centre de la commune --> rajoutez aux URLs de la première partie &format=geojson&geometry=centre
si votre URL contient déjà un ?
sinon il faut ajouter plutôt ?format=geojson&geometry=centre
Si vous souhaitez les GeoJSON avec le contour de la commune --> rajoutez aux URLs de la première partie &format=geojson&geometry=contour
si votre URL contient déjà un ?
sinon il faut ajouter plutôt ?format=geojson&geometry=contour
Un exemple pour illustrer
https://geo.api.gouv.fr/communes?lat=47.0482944&lon=-1.1501568
devient :
Si l’on souhaite le centre de la commune : https://geo.api.gouv.fr/communes?lat=47.0482944&lon=-1.1501568&format=geojson&geometry=centre
Si l’on souhaite le contour de la commune : https://geo.api.gouv.fr/communes?lat=47.0482944&lon=-1.1501568&format=geojson&geometry=contour
Il faut également penser à mettre en cache quand on a des appels lourds qui ne changent pas ou qu'on retourne des contours. Ainsi :
Sans contour, la réponse fait 480Ko https://geo.api.gouv.fr/communes?codeRegion=84
Avec contour, la réponse fait 34Mo https://geo.api.gouv.fr/communes?codeRegion=84&format=geojson&geometry=contour
Vous pouvez très bien sauvegarder dans un fichier le résultat des URLs ci-dessus : le résultat ne va pas changer en permanence car ce n'est pas de l'autocomplétion.
Dans ce cas de figure, le principal intérêt est la correspondance entre un nom et un code.
Si l’on souhaite le code d'un département ou d'une région, on prend :
pour la région : https://geo.api.gouv.fr/regions?nom=Auvergne
pour le département : https://geo.api.gouv.fr/departements?nom=Loire Atl
Les cas départements et régions fonctionnent comme les communes et changent très rarement. Il est souvent envisageable d'avoir les fichiers globaux JSON plutôt que passer par des appels API. On a ainsi sous forme JSON (sans géométrie) :
La donnée adresse qui compose la Base Adresse Nationale (BAN) est soit :
issue de données provenant d’acteurs historiques de l’adresse (IGN, Cadastre, etc.) ;
issue des Bases Adresses Locales (BAL) qui sont l’inventaire des adresses créé par les communes.
À terme, ces dernières devraient devenir la seule source. La commune doit certifier ces adresses, c’est-à-dire valider que les adresses saisies sont justes.
L’image ci-dessous résume la situation pour consolider les données adresses :
L'API Adresse est utilisée principalement pour :
trouver par un formulaire une adresse pour la corriger et/ou récupérer des coordonnées en ayant une liste de choix pour trouver le résultat : c’est l’autocomplétion ;
fournir un fichier tabulaire pour obtenir en retour une version enrichie des coordonnées et d’autres informations.
Pour accéder aux données d'adresses, il est possible de :
Récupérer directement les données. Cette méthode s’adresse à des utilisateurs avancés.
Utiliser l’API de recherche. Cette API peut rechercher des adresses soit via un appel unique par adresse soit en mode "batch" : on passe un fichier avec une liste d’adresse, une par ligne et on retourne la première adresse retournée pour chacune des lignes.
Pour mieux comprendre ce que sont que les tuiles vectorielles et leurs usages, rendez-vous sur la documentation de l’IGN.
Le service proposé par Etalab permet de :
mettre à disposition des tuiles avec un style pour avoir un fond de plan de tuiles vecteur. Ce style est publié en s’appuyant sur une version d’OpenMapTiles déployée par Etalab sur la France.
servir les tuiles des limites administratives ainsi que celles du cadastre.
Ce service s'appuie sur les données du .
OpenStreetMap (ou "OSM") est une carte du monde entier librement modifiable, faite par des gens comme vous. OpenStreetMap vous permet de voir, modifier et utiliser des données géographiques de n'importe quel endroit dans le monde.
Si vous identifiez des données manquantes sur la carte, vous pouvez contribuer sur et vous verrez les changements au plus tard une semaine après. En effet, les tuiles vecteur des fonds de plan sont mises à jour une fois par semaine.
Il faut aussi noter que vous devez obligatoirement quand vous utilisez les fonds de plan.
Ce service est utilisé par plusieurs produits d’Etalab ainsi que par d’autres acteurs institutionnels en raison de la légèreté des tuiles vectorielles et des styles associés en comparaison à ceux mis à disposition actuellement par l’IGN.
Bien que ce service réponde à de nombreux besoins, il présente certaines limites.
❌ Les cas où vous ne devriez pas utiliser OpenMapTiles :
Si vous avez un besoin qui vous parait correspondre à celui des tuiles vectorielles et styles associés de l’IGN (voir des exemples en fin de guide). Ces tuiles sont un peu plus lourdes mais elles sont par nature plus homogènes en terme de contenu car elles utilisent les données de l’IGN. Celles du projet OpenMapTiles étant basées sur OpenStreetMap, la complétude dépend des contributions à OpenStreetMap.
Historiquement, pour faire du webmapping, on renvoyait des tuiles images qui étaient des images de cartes découpées en 256px ou 512px (si écran haute définition).
Ce qu'on peut encore voir par exemple :
Le découpage des tuiles est normalisé en s'appuyant sur "une grille" qui change avec les échelles et dont les conventions sont reprises par tous.
Même si ces solutions raster sont toujours fonctionnelles, il existe des cas qui nécessitent d’avoir plus de souplesse pour pouvoir styler des fonds de plan en particulier ou bien pour afficher une couche « par-dessus » les autres. Ils peuvent être adressés avec les tuiles vectorielles.
On parle abusivement de tuiles vectorielles pour désigner généralement deux choses :
les tuiles vectorielles à proprement parler
les styles « Mapbox Vector Style »
On peut les assimiler à des objects vectoriels, des points, des lignes, des polygones qui sont associés à des attributs par exemple un nom. On groupe ces objets par couche, généralement un objet métier, par exemple, les limites communales, les commerces, etc. On découpe ensuite ces vecteurs selon une emprise fixe qui reprend celle historiquement utilisées par les tuiles raster. On peut ainsi voir quelles couches contiennent une tuile.
Il existe plusieurs standards pour ces tuiles mais celui le plus adopté est celui de la société Mapbox : on parle de "Mapbox Vector Tiles" ou MVT.
Leur contenu est encapsulé dans un format binaire appelé Protocol Buffer, non spécifique à la cartographie, c'est pour cela que l'extension des tuiles est souvent .pbf
même si cela était historiquement .mvt
.
Quelques exemples pour inspecter :
Ils permettent d'indiquer pour quelles couches, pour quelles caractéristiques comme la population et quels zooms il faut appliquer un style.
Ces styles peuvent être : l'épaisseur du trait, sa couleur pour le contour communal, etc.
C'est avant tout la combinaison des tuiles vectorielles et des styles qui a permis à ce standard de s'imposer.
Généralement, on consomme ces tuiles vectorielles via une bibliothèque cartographique JavaScript. Il faut également noter que selon les bibliothèques, il est possible de profiter de la combinaison des deux mais que certains ne permettent pas de gérer les styles mais simplement de consommer les tuiles vectorielles, les pbf
mais en devant styler selon la syntaxe propre à la bibliothèque. Cela joue fortement sur les choix techniques à adopter selon votre besoin. Seuls Maplibre et OpenLayers via une bibliothèque intermédiaire sont à même de correctement utiliser les deux.
Les versions des tuiles pour les fonds de plan ont été mises à jour en mars 2022 et sont mises à jour une fois par semaine.
Nous abordons principalement l'usage avec MapLibre qui est capable de nativement gérer les tuiles et les styles associés.
Nous n'aborderons pas Mapbox GL JS, la bibliothèque JavaScript de Mapbox, car elle n'est maintenant plus OpenSource depuis la version 2.x et c'est MapLibre, une version forkée de la dernière version de Mapbox GL JS avant son passage en version non libre, qui a pris sa succession.
Voici quelques scénarios :
Selon vos besoins, vous pouvez choisir d'utiliser l'API de tuiles vectorielles de l'IGN plutôt que celles que nous mettons à disposition.
Voici deux exemples :
Lexique : Géocodage Le géocodage consiste à affecter des coordonnées géographiques (longitude/latitude) à une adresse postale (Wikipédia).
Il permet ainsi de positionner des adresses sur une carte ou encore de trouver les points de départ et d’arrivée pour déterminer votre trajet lorsque vous voyagez par exemple.
Pour réaliser un géocodage, il est nécessaire de disposer :
Un géocodeur transforme une donnée textuelle des données de référence en utilisant des algorithmes qui séparent l’adresse en syllabes, mots et groupes de mots.
Les différents éléments sont indexés, puis en s’appuyant sur des algorithmes relatifs à du traitement textuel, le géocodeur compare la similarité entre les mots constituant l’adresse à rechercher et ceux qui sont indexés depuis les données de référence.
Un algorithme permet généralement d’ordonner les résultats. Il s’agit par exemple de faire apparaitre en premier les résultats ayant les coordonnées fixes les plus proches ou encore ceux dont la population est la plus forte.
Il est également possible de filtrer selon des critères comme le pays (si le géocodeur a une vocation internationale, comme ) ou encore par type de résultat.
En pratique, un certain nombre de géocodeurs visent à réaliser des recherches de communes et de POIs (Points Of Interest ou points d’intérêts) et pas seulement des adresses.
Le géocodage peut aussi se faire de façon inverse, c’est-à-dire retourner une adresse en envoyant une coordonnée. Dans ce cas de figure, il s’agit de trouver la donnée de référence la plus proche des coordonnées envoyées.
La qualité des données de référence
Les données textuelles de l’adresse de référence ne sont pas toujours uniformes.
Exemple : "rue" peut être représenté par les lettres "r" ou "R" ou "rue" ou "Rue".
Il s’agit donc en premier lieu d’uniformiser les différentes manières de décrire le type de voie.
Il s’agit également d’omettre les articles lors d’une comparaison.
Exemple : chercher "rue métanies" au lieu de "rue des métanies".
D’un autre côté, les coordonnées géographiques peuvent manquer de précision. Dans certains cas, il arrive de disposer uniquement du centroïde de la commune, de la voie ou du lieu dit (point d’une zone géographique choisi au voisinage de son centre de gravité et dont les coordonnées servent de localisant pour cette zone).
Dans d’autres cas, les coordonnées peuvent avoir été interpolées : les adresses ont été positionnées en fonction du nombre de numéros dans une voie et la longueur de celle-ci.
Tapez votre adresse. Par exemple, "20 avenue de Ségur". Si le numéro est bien proposé et que la commune est la bonne pour le premier résultat, c’est la manière dont vous avez récupéré l’adresse qui est en cause. Si vous êtes en mode "batch", la première adresse retournée peut être mauvaise et c’est la 2ème ou 3ème adresse que vous attendiez.
Imaginons que vous pensiez que le numéro existe, mais ne le trouvez pas dans votre résultat de géocodage. Essayez alors de trouver la rue. Essayons "87 avenue de Ségur". On ne voit que des rues qui sont retournées suite à la recherche. Cliquez sur la rue qui semble correspondre à votre recherche. Cela va zoomer. Vous allez pouvoir voir s’il y a des adresses et lesquelles sont inventoriées.
La donnée de référence n’est pas présente : c’est un oubli ou personne ne l’a encore produite.
Le résultat est une adresse BAL. Votre commune est entrée dans une démarche de recensement et valorisation de ces adresses.
Zoomez sur la carte pour trouver votre commune ou l'organisme qui porte votre BAL, par exemple un intercommunalité.
Nous pouvons ensuite vérifier dans la liste l'existence du numéro.
Adresse IGN vs adresse cadastre vs adresse BAL.
La donnée est présente, mais les termes de recherche ne permettent pas de la trouver.
Il existe plusieurs solutions pour faire de l’autocomplétion dans un outil web.
Vous pouvez vous appuyer sur de nombreuses bibliothèques, celles-ci étant généralement liées à des bibliothèques cartographiques.
Exemples :
Exemples :
Exemples :
Avec Python, pour faire des appels unitaires, vous pouvez :
Lorsqu'on choisit cette option, on privilégie l'appel par le endpoint CSV de l'API.
Il faut préalablement s'assurer que son CSV est bien formaté : il s'avère que le géocodage peut ponctuellement dysfonctionner si le CSV n'est pas bien formaté.
Pour réaliser un géocodage massif, il faut généralement vérifier le formatage de votre CSV.
--> Vous faites du SIG, néophyte comme expert et utilisez le logiciel SIG QGIS ?
--> Vous utilisez d’autres outils?
Si ce n’est pas le cas, vous pouvez vous autohéberger.
Même si nous avons abordé l’usage du géocodeur Addok, utilisé par adresse.data.gouv.fr, il existe d'autres possibilités pour géocoder.
Il est ainsi possible d'installer des solutions OpenSource comme :
Une instance alternative d'Addok (http://demo.addok.xyz) est mise à disposition et contient des données venant de la BANO, des POIs d'OpenStreetMap ainsi que des intersections de rues/routes.
Ces tuiles ont une structure standardisée par un schéma ainsi que des styles par défaut associés à cette structure .
Si votre besoin nécessite des tuiles dont les informations ne sont pas dans les couches OpenMapTiles, un grand nombre d’acteurs commerciaux proposent de consommer des tuiles vectorielles en créant un compte, sans coût : .
Si vous avez besoin d’une qualité de service garantie, là encore, adressez-vous à ces mêmes acteurs commerciaux ou autohébergez-vous. Dans ce cas, pour des outils pour gérer vos propres tuiles vecteur en autohébergé, allez sur : .
Les tuiles du cadastre :
Le fond OpenMapTiles :
Vous pouvez aussi aller sur puis dans le bloc "DATA", choisir une couche et faire "Inspect".
Ici, nous avons choisi de nous concentrer sur la consommation des tuiles. Il existe de nombreux outils pour les générer. Nous vous renvoyons à nouveau à déjà mentionné.
Ils s'appuient sur le standard qui indique quelles sont les ressources "tuiles" (l'URL) à consommer puis quelles couches de cette ressource doivent être utilisées puis comment les styles doivent être appliqués.
On peut par exemple aller sur puis dans le menu supérieur, cliquer sur "Open". Dans la popup qui apparaît, dans la section "Load from URL", coller l'URL https://openmaptiles.geo.data.gouv.fr/styles/osm-bright/style.json
puis sur le bouton "Open URL" pour voir le style utilisé par défaut sur les tuiles vectorielles.
Pour avoir un aperçu, vous pouvez vous rendre sur : .
Avec MapLibre
Exemples pour MapLibre et OpenLayers
MapLibre
Maplibre :
OpenLayers :
Leaflet :
Pour un aperçu, ouvrir :
Si vous souhaitez héberger vous-même, nous vous recommandons de passer par combiné avec NGinx.
OpenLayers :
Maplibre :
Ici, nous avons utilisé le plan "Standard" dont l'URL est . Vous verrez qu'il est possible de choisir d'autres styles et même d'avoir des tuiles vectorielles pour d'autres éléments que les fonds de plan. Pour cela, consultez la documentation officielle côté IGN, .
Nous vous recommandons en complément de regarder car la 1ère documentation à date mentionne encore une clé d'API alors que bien que présente, celle-ci est publique et s'appelle essentiels
, ce que vous pouvez voir dans les démos mises à disposition.
Nous nous concentrons ici sur les cas liés aux adresses, le géocodeur utilisé par étant spécifiquement conçu pour répondre à ce besoin.
Vérifier en utilisant l’ :
Vous pouvez confirmer si l'adresse existe en allant sur .
Cliquez sur le polygone. Allons par exemple à .
Descendons et recherchons une commune puis cliquons dessus, par exemple .
On peut maintenant chercher par nom de voie ou lieu dit pour vérifier que la voie existe. Prenons .
Vous êtes un particulier ? Vous pouvez récupérer les coordonnées de votre commune pour lui faire part de vos retours en passant par puis en cherchant votre commune.
utiliser ;
passer par : il existe une .
En JavaScript, vous pouvez utiliser que ce soit pour un usage côté navigateur ou côté serveur (Node.js/deno).
Il existe une interface graphique pour envoyer des fichiers CSV sur dont la taille maximum est de 50Mo.
Pour tester, téléchargeons puis suivez l'exemple en utilisant le GIF animé ci-dessous.
Solution partant d'appels unitaires plutôt que des appels CSV :
Solution partant d'appels à l'API CSV. Il suffit de récupérer , de décompresser le fichier. Ensuite, il vous suffit de lancer le script Python avec python chunk-csv-python.py
. Cela permettra de faire l'appel vers l'API CSV soit en une fois, soit en plusieurs phases. On obtiendra ainsi le fichier annuaire-des-debits-de-tabac-2018-utf8-20lines.geocoded.csv
qui est la version géocodée par l'API CSV d'un fichier de 20 lignes ainsi que myresults.csv
qui est une version qui résulte d'une phase de découpage d'un gros fichier en plusieurs morceaux, d'appels à l'API CSV à partir de chacun de ces fichiers, puis du réassemblage des fichiers ainsi retournés. Vous n'avez plus qu'à adapter le code du fichier chunk-csv-python.py
.
(attention, la solution fait des appels unitaires plutôt que des appels CSV)
Géocodage massif avec une solution en ligne de commande utilisant Node.js :
Recherchez des adresses :
Géocodez des tables depuis une table dans QGIS QBano : . À ce jour, le plug-in est mal maintenu, il vaut mieux récupérer puis installer le plug-in depuis celui-ci.
Avec PyQGIS, vous pouvez aussi géocoder en partant de :
Vous faites du R ?
Vous souhaitez intégrer la recherche dans le CMS SPIP ?
Si vous êtes un organisme public, vous pouvez faire une demande pour augmenter les quotas par défaut sur l’API publique .
Dans ce cas, le plus simple est de passer par l’utilisation de Docker : .
Il est possible aussi de regarder du côté de Addok, le logiciel open source derrière l’API Adresse si vous avez des besoins plus spécifiques au niveau de votre installation ou de la personnalisation de la recherche : .
Leurs principaux intérêts sont de pouvoir chercher des POIs (un centre commercial, une enseigne, etc.) ainsi que de marcher sur des données internationales, contrairement à .
Il est aussi possible de détourner Addok pour lui faire effectuer d’autres types de recherche, par exemple des POIs en utilisant le projet par exemple.
Vous pouvez aussi vous appuyer sur les services mis à disposition par l’IGN pour le géocodage : (voir les sections "Services de géocodage" et "Service de recherche Look4"). Vous pouvez aussi regarder
Accéder et utiliser les données d'adresses
Géocoder une adresse
Utiliser l'API Adresse
Utiliser l'API Découpage administratif
Utiliser les tuiles vectorielles