DoGeocodeur : Geocoder des adresses avec Google/Bing/IGN/OSM

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.

dogeocodeur

Le principe

Quatre services peuvent être sollicités pour géocoder les adresses:

  • Google
  • Bing
  • IGN/Geoportail
  • OSM/ maquest
  • La Base Adresse Nationale (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.

BAN:

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.

Mapquest:

OpenStreetMap data is licensed under the Open Data Commons Open Database License (ODbL).

Google Maps:

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

BING

IGN:

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

 

DoGeocodeur, c’est par ici

29 pensées sur “DoGeocodeur : Geocoder des adresses avec Google/Bing/IGN/OSM

  • 24 juin 2015 à 14 h 24 min
    Permalink

    Bonjour,

    Avant tout bravo pour votre appli très fonctionnelle!
    Je souhaiterais utiliser les coordonnées X Y dans un logiciel SIG, pouvez vous me confirmer le système de projection suivant: WGS84 – EPSG 4326 ?

    D’avance merci!

    Héloïse

    Répondre
    • 29 juin 2015 à 15 h 50 min
      Permalink

      Bonjour,
      Oui je confirme, les coordonnées sont bien en WGS84 (epsg 4326)

      Répondre
  • 25 août 2015 à 20 h 29 min
    Permalink

    Bonjour,

    Je tiens à vous remercier, vous venez de sauver ma soirée et une prise de tête pour géocoder mes données !

    Excellent travail et merci beaucoup !

    Répondre
  • 26 août 2015 à 14 h 30 min
    Permalink

    Bonjour,
    Félicitations du très bon boulot.
    Pouvez-vous m’expliquez comment interpréter les scores s’il vous plait? A quoi correspond exactement le nombre du score?
    Merci

    Répondre
  • 3 février 2016 à 1 h 13 min
    Permalink

    Merci, une belle alternative au batchgeocodeur (google only), qui ma bien servie pendant mes études.
    trés beau travail : )

    Répondre
  • 24 février 2016 à 9 h 04 min
    Permalink

    Bonjour,

    Merci pour ce super outil. Petite question concernant la précision du géocodage. Le numéro 3 = commune ; 6 = rue ; 9 = numéro.
    Est-il possible de connaître également à quoi correspond chaque deuxième chiffre dans le score du géocodage?

    Répondre
  • 25 mars 2016 à 10 h 35 min
    Permalink

    Bonjour,

    L’application est vraiment super intéressante et facile d’utilisation. En revanche, elle semble fonctionner uniquement pour la France. Un même outil existe-t-il sur le périmètre Europe (hormis batchgeocodeur.mapjmz.com) qui semble ne plus fonctionner (en tout cas, je n’arrive pas à y accéder aujourd’hui) ?

    D’avance merci de votre réponse.

    Jean-Philippe

    Répondre
    • 25 mars 2016 à 22 h 07 min
      Permalink

      Bonjour et merci.
      En effet, cela fonctionne uniquement en France,d’ailleurs, les services de la BAN et de l’IGN ne couvent que ce territoire.

      J’ai rapidement fait une modification afin d’utiliser l’application pour géocoder des adresses hors de France mais seulement avec le service de Google.
      C’est par ici: http://dogeo.fr/_apps/DoGeocodeur/world-google-only/

      Répondre
      • 31 mars 2016 à 14 h 41 min
        Permalink

        Bonjour Fabien,

        Merci beaucoup pour cette modification, ça répond parfaitement à mon besoin !

        Bonne fin de journée,
        Jean-Philippe

        Répondre
  • 11 mai 2016 à 9 h 42 min
    Permalink

    Bonjour,

    Je me joins aux différents utilisateurs pour vous remercier pour cet outil vraiment très pratique et performant.

    Je me demande s’il n’y aurait pas un petit souci dans le géocodage : j’ai des adresses sur une seule commune, et lorsque je géocode le fichier avec la BAN, je me retrouve avec des points partout en France, et qui sont considérés comme étant bien placés (en vert). Est-ce que la rue ne serait pas prise en compte avant la commune?

    Vous souhaitant une bonne journée.

    Marjorie

    Répondre
    • 17 mai 2016 à 10 h 53 min
      Permalink

      Bonjour,
      J’ai essayé de reproduire ce que vous décrivez avec des noms de rue tels que Victor Hugo, rue Pasteur, etc. mais je n’ai noté aucun problème.
      Pouvez vous me transmettre un exemple?

      Répondre
  • 1 juin 2016 à 12 h 04 min
    Permalink

    Bonjour,
    Votre utilitaire est vraiment très performant et efficace. Bravo.
    Est-il possible d’avoir des icônes de marquages de taille ou couleur dépendant d’un score que l’on pourrait choisir.
    En fait je cherche à positionner sur la carte les utilisateurs d’un service, et l’idée serait d’avoir des icônes de petite taille pour un nombre inférieur à 5 utilisateurs sur une commune, de 5 à 50, de 50 à 500 etc…

    Jean-Christophe

    Répondre
  • 19 juillet 2016 à 14 h 27 min
    Permalink

    Bonjour,
    Superbe outil !! Félicitations! Simple, pratique et efficace 🙂

    Bon courage !

    Répondre
  • 21 juillet 2016 à 10 h 32 min
    Permalink

    Congratulates.
    Belle démarche. Je viens de tester ton service.
    Ergonomique, performant, novateur avec les technos du moment.

    Bravo pour ton code et pour ta réponse aux attentes de géomaticiens et autres.
    Si tu cherches du taffe, n’hésite pas de me contacter.
    Jérôme

    Répondre
  • 25 août 2016 à 22 h 22 min
    Permalink

    Formidable, ma question est de savoir est ce que l’application est fonctionnelle en Afrique plus précisément au niger.merci

    Répondre
  • 13 octobre 2016 à 22 h 06 min
    Permalink

    Votre application est vraiment excellente, je me demandais comment j’allais faire avec mes 600 adresses !
    Juste une question : ça fonctionne bien en copier-coller, mais si j’importe un fichier CSV les lignes ne sont pas reconnus comme telles.

    Répondre
  • 12 décembre 2016 à 21 h 49 min
    Permalink

    Bonsoir,

    Sur un tout petit jeu de données (10 lignes) l’interface et le service me semble performant.
    Merci pour votre travail !

    Il me semble que la tolérance à l’erreur (un peu excessive) peut être un axe amélioration.
    En effet, j’ai géocodé l’adresse (inexistante) suivante :
    rue;cp;ville
    rue de paris;;Marseille
    J’attendais un résultat à mimima à Marseille, mon géocodage a été réalisé dans Paris.

    Les distances d’edition sont calculées par les webservice de geocodage (bing, google) ?
    Vous vous appuyez sur d’autres technologies ?

    Je vous souhaite une bonne soirée

    Répondre
  • 27 décembre 2016 à 10 h 38 min
    Permalink

    Bonjour
    L’application est vraiment très pratique.
    Petite question toutefois : que deviennent les données brutes uploadées pour le géocodage? sont elles mémorisées ou détruites à l’issue du traitement?
    Merci et bravo encore!

    Répondre
    • 27 décembre 2016 à 10 h 53 min
      Permalink

      Bonjour,
      Seules champs servant à l’adresses sont envoyées à un serveur. Dans le cas de Google ou de la BAN la requête va directement chez eux sans passer par « chez moi ». Pour les autres, elles passent par mon serveur qui relais la requête (un proxy est nécessaire) mais rien n’est stocké.
      Le code est ici si vous voulez jeter un coup d’œil : https://github.com/DoFabien/DoGeocodeur
      Après savoir si les différents services stockent l’adresse à quelque part… je ne sais pas.

      L’export se fait du côté client donc aucune requête vers un serveur n’est réalisée.
      J’espère avoir compris répondu à votre question

      Répondre
      • 28 décembre 2016 à 11 h 37 min
        Permalink

        Merci pour la réponse Fabien!
        Bonne journée

        Répondre
      • 28 décembre 2016 à 11 h 38 min
        Permalink

        La réponse correspond à mon interrogation. Merci Fabien et bonne journée!

        Répondre
  • 1 mars 2017 à 15 h 04 min
    Permalink

    Bonjour,

    actuellement en projet recherche sur du géocodage en Inde, je voudrais savoir si votre application web permet de géocoder des adresses sur la ville de Calcutta.

    Répondre
    • 1 mars 2017 à 15 h 06 min
      Permalink

      je voudrais pouvoir comparer le géocodage de Bing maps et de Google Maps

      Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *