Récemment, j’ai dû géolocaliser une centaine d’adresses. Je n’ai trouvé que Batchgeocodeur qui s’appuie sur les services de Google et qui répondait partiellement à mes besoins. Les problèmes avec cette application sont le temps entre chaque requête (1sec), la limitation du nombre d’adresses à géocoder pour l’ensemble des utilisateurs et l’impossibilité de corriger manuellement et en live les points mal placés.
J’ai donc développé une application répondant spécifiquement à mes besoins que je partage ici.
Le principe
Quatre services peuvent être sollicités pour géocoder les adresses:
- Bing
- IGN/Geoportail
- OSM/ maquest
- La B ase A dresse N ationale (BAN)
À noter que la requête vers le service de Google se fait directement à partir du navigateur sans passer par un proxy ce qui devrait limiter le nombre de requêtes par utilisateur unique et non par la totalité des utilisateurs.
Pour chaque résultat, un score représentant la précision et de la qualité du géocodage est attribué
- 3x => commune
- 6x => rue
- 9x => adresse (rue + numéro)
Le « x » étant la façon dont a été attribuée l’adresse (extrapolation, relevé terrain, etc…)
Ce score permet de comparer les résultats entre les différents services et de ne garder que le plus élevé.
Ainsi en utilisant plusieurs services à la suite, il est possible d’optimiser la qualité de ces résultats.
Seuls les résultats ayant un score inférieur à la valeur donnée dans le champ prévu à cet effet sont géocodés. Par défaut la valeur est à 93 ce qui correspond à une localisation à l’adresse (numéro extrapolé).
Licence et CGU
L’utilisateur final s’engage à respecter les termes des différents fournisseurs de services qu’il utilise.
Dans le cadre de la convention (voir PJ) autour de la Base Adresse Nationale, OpenStreetMap France est chargé de la diffusion de la version sous licence ODbL de ces données de référence en complément de celle diffusée sous licence gratuite de repartage concédée par l’IGN et La Poste.
OpenStreetMap data is licensed under the Open Data Commons Open Database License (ODbL).
This document is intended for website and mobile developers who want to use geocoding data within maps provided by one of the Google Maps APIs.This service is generally designed for geocoding static (known in advance) addresses for placement of application content on a map; this service is not designed to respond in real time to user input, for example. For dynamic geocoding (for example, within a user interface element), consult the documentation for the Google Maps JavaScript API Client Geocoder and/or the Google Play services Location APIs.Geocoding is a time and resource intensive task. Whenever possible, pre-geocode known addresses (using the Google Maps Geocoding API described here or another geocoding service), and store your results in a temporary cache of your own design.
Petite précision, l’application utilise également l’API Google Maps
J’ai contacté l’IGN par mail il y a plusieurs semaines pour savoir si cette application était en contradiction avec sa CGU, mais je n’ai toujours pas eu de réponse, donc j’imagine qu’ils consentent..
Voici le paragraphe qui nous concerne :
L’accès des Utilisateurs Finaux au service adresse est gratuit dès lors qu’il est proposé sous la forme d’une interface de saisie d’adresse ou de coordonnées permettant l’envoi d’une unique requête. Le résultat de la requête doit être matérialisé de façon visible sur la fenêtre cartographique, par exemple par l’affichage d’un ponctuel et/ou le recentrage de la carte sur les coordonnées résultant de l’opération de géocodage.
Je considère que l’application à une interface de saisie -importer des données ainsi que la table qui permet de modifier l’adresse-. Une unique requête est envoyée pour chaque adresse et le résultat est matérialisé sur la carte.
Fonctionnalités :
- Importer des données à partir d’un CSV
- Importer des données par copier/coller
- Effectuer le géocodage uniquement si les scores sont inférieurs à un score
- Géocoder avec Google
- Géocoder avec Bing
- Géocoder avec IGN/Géoportail
- Géocoder avec OSM/Mapquest
- Géocoder avec la Ban
- Possibilités de modifier les composants de l’adresse directement dans la table en double cliquant dessus.
- Il est possible de forcer le géocodage d’une ligne en cliquant sur l’un des 4 icônes en bout de ligne.
- Pour chaque groupe de score une couleur au marker est attribué
- Déplacer le marker manuellement en le faisant glisser sur la carte (le score passe alors à 100)
- Trier les résultats en cliquant sur l’entête d’une colonne
- Centrer la carte sur la ligne sélectionnée
- Lors d’un clic sur un marqueur, mise en surbrillance de la ligne correspondante
- Exporter les résultats en CSV, KML et GeoJSON
Comment ça marche?
L’import des données
Après avoir ouvert la fenêtre en cliquant sur le bouton “Importer des données”, vous pouvez importer un fichier CSV à partir du 1er onglet ou par dans le 2eme onglet par copier/coller. Les données doivent nécessairement posséder une ligne de titre.
Pour le premier cas, le CSV doit être encodé en UTF-8 et les colonnes séparées par une virgule, un point-virgule ou une tabulation.
L’import par copier/coller permet de copier une feuille Excel par exemple et de le coller dans le champ dédié.
Une fois cela fait, il faut indiquer les champs communes, CP, rue et numéro.
Il est ensuite possible de modifier les adresses directement dans la table en double cliquant dessus.
Géocodage
Cliquer sur le bouton correspondant au service désiré. Le processus de géocodage se lance alors et une barre de progression s’affiche.
À la fin du processus, la carte se centre sur l’ensemble des markers
Il est possible de relancer le géocodage à partir d’un autre service, pour améliorer les résultats.
Le champ “Geocoder uniquement les adresses dont le « score » est inférieur à :” sert à faire exactement ce qu’il dit…
Ainsi, seuls les scores inférieurs à la valeur de ce champ vont être concernés par la prochaine vague de géocodage.
Résultat
Les résultats sont indiqués sur la carte, les couleurs des markers correspondant aux scores, mais également dans la table.
Outre les données initialement présentes, l’application ajoute plusieurs champs:
- lng: logitude (x)
- lat: latitude (y)
- géocoder : service qui à donné ce résultat
- score
Les markers issus des résultats peuvent être déplacés manuellement sur la carte par ‘drag’. Le score de celui-ci devient 100 et le type de géocoder devient alors « Manuel »
Export
Il est possible d’exporter ces résultats en GeoJson, KML et CSV. Je vous conseille fortement le format GeoJson qui, lui, ne semble pas présenter de bugs