Geocodage d’adresses avec QGis 2.8

Le géocodage d’adresses permet de convertir des adresses vers une couche de points. On passe d’une information textuelle à une information spatiale. Cette pratique est utilisée principalement dans les secteurs du géomarketing et des transports, mais avec le développement d’applications web, elle s’avère utile dans presque tous les domaines du SIG.
Le problème avec le géocodage n’est pas d’ordre technique, mais réside surtout sur l’évolution des techniques et des moyens utilisables. Si vous recherchez sur Google « géocodage adresses france » vous obtiendrez des tutoriaux très bien détaillés, mais souvent périmés. Voici donc un tutoriel au goût du jour du mois de mai 2015 que nous mettrons à jour (promis-juré!) quand il deviendra caduc.

Il est possible de géocoder des adresses à partir de QGis façon gratuite. Il y a 2 plugins qui permettent ceci:
-le plugin Geocode affiche une fenêtre où l’on peut rentrer une adresse et qui génère le point géographique correspondant. Il utilise soit Google soit Nominatim (OpenStreetMaps)
-le plugin MMQGIS qui accepte une table en entrée au format texte et qui génère une couche de points. Ce plugin utilise Google et Openstreetmaps, ou bien une couche propre du réseau routier.

Aucun des deux plugins ne nécessite une clé API Google, ni autre chose que l’installation du plugin.

Le premier plugin étant tout simple: installer, lancer, rentrer une adresse et voir le point résultant, nous allons voir ici comment traiter une table d’adresses.

Installation du plugin

Cliquez sur Extension -> Installer/Gérer les extensions
ouverture de la liste d'extensions de qgis wien 2.8
Sélectionnez mmqgis puis Installer l’extension.

Vous aurez alors un nouveau menu MMQGIS :
menu mmqgis ajouté à l'interface de qgis 2.8 wien

Les données à géocoder

Le format utilisé pour rentrer les données à géocoder est le format texte csv (séparateur virgule). Comme on va utiliser un service web (soit google soit openstreetmap) il convient de structurer un minimum vos adresses.
Même si ce n’est pas indispensable, ça vous évitera des erreurs de géocodage si vous créez  trois champs: rue (ou adresse), ville et pays

exemple de fichier texte à géocoder avec qgis 2.8 wien

 

Vous rentrez les noms des champs sur la première ligne du fichier, en les séparant par des virgules, puis les différentes adresses à géocoder, une par ligne du fichier.

Utilisation du plugin MMQGIS

Nous allons utiliser l’option Geocode qui propose deux options:

    -Geocode csv with Google / OpenstreetMap
    -geocode with Street layer

Nous allons utiliser ici la première option. pour utiliser la deuxième il vous faut posséder une couche du réseau routier avec obligatoirement, pour chaque tronçon, quatre champs contenant la numérotation mini-maxi de chaque côté de la rue.

En cliquant sur le menu MMQGIS -> Geocode -> Geocode csv with Google / OpenstreetMap vous ouvrez la fenêtre de paramétrage du plugin:

paramétrage du geocodage de mmqgis sous qgis 2.8 wien

 

Dans Input csv file, pointez sur votre fichier texte

Déroulez les fenêtres Addres field, City field et Country field pour leur affecter les noms des champs de votre fichier texte (ici rue, ville et pays).

Choisissez le service web à consulter (Google ou Openstreetmap). Google établi certaines limitations à la quantité d’adresses géocodées par jour (actuellement 2500). Il est rare d’atteindre ces limites, mais si ça vous arrive, d’abord consultez la page https://developers.google.com/maps/documentation/geocoding/, puis essayez sur OpenStreetMap.

Dans Output shapefile donner le nom au fichier résultat

Dans Not found output list donner un nom pour le fichier texte où seront placées les adresses qui n’auront pas pu être géocodées. Ce fichier vous pourrez l’éditer pour corriger les adresses et l’utiliser comme fichier en entrée du plugin.

Le fichier shape produit contient deux champs supplémentaires:

addrtype : correspondant à l’élément type de Google ou à la class attribute d’OpenstreetMap. Ce champ indique le type d’adresse qui a été utilisée par le service Web (locality, route, place, park, highway,…)

addrlocat : correspond au location_type de Google ou au type attribute d’OpenStreetMap. Ce champ indique la précision de la localisation (centre géométrique, interpolation, approximation, …)

Une fois lancée, la commande affiche le résultat dans la fenêtre cartographique:

résultat du géocodage avec mmqgis dans qgis 2.8 wien

 

 

Si cet article vous a intéressé et que vous pensez qu'il pourrait bénéficier à d'autres personnes, n'hésitez pas à le partager sur vos réseaux sociaux en utilisant les boutons ci-dessous. Votre partage est apprécié !

40 thoughts on “Geocodage d’adresses avec QGis 2.8

  1. Bonjour Mr Atilio
    Je ne sais pas si c’est réellement un problème de ma part ou une maj qui fait que le tutoriel n’est plus d’actualité, mais il m’est impossible d’effectuer le géocodage sur les communes qui m’intéressent pour localiser les entreprises inscrites au SIREN.
    Après avoir renseigné la voie la ville et le pays, un message d’erreur s’affiche ‘CSV file must be in UTF-8 enconding » alors que Notepad +++ m’assure que le fichier est en UTF-8 (j’ai essayé le sans BOM)
    Pourrez-vous essayer de votre coder de refaire votre tutoriel et éventuellement en faire une MAJ (c’était promis-juré!)

    1. Je pense que votre problème ne vient pas du codage en soi du fichier csv, mais du fait que vous utilisez des caractères accentués français dans votre fichier. Essayez avec un extrait de votre fichier en remplaçant les é,è,à,ù par e,a,u
      ça devrait marcher sans problème

  2. Bonjour,
    J’ai utilisée cette technique qui marche très bien, par contre j’aimerai ajouter des coordonée X et Y aux poins qui ont été crée. Savez-vous comment faire cela ?
    Je vous remercie,et bonne soirée à vous

    1. Ouvrez la table (clic droit sur le nom de la couche->ouvrir la table d’attributs)
      Cliquez sur le premier bouton à droite(Activer le mode édition)
      Cliquez sur l’avant dernier bouton(Ouvrir la calculatrice de champs)
      Laissez coché Créer un nouveau champ
      Rentrez Nom= X, Type =Nombre décimal
      Dans le bloc du milieu, ouvrez l’item Géométrie, puis double-cliquez sur $x
      Cliquez sur OK
      Vous aurez un champ nommé X avec la valeur de coordonnée X de vos entités.
      Répétez la procédure pour Y avec $y

  3. Bonjour,
    Merci pour votre tutoriel très clair.
    Savez-vous si cela est possible de faire l’inverse (trouver l’adresse du point) ? Je m’explique : j’ai une couche avec des points et j’aimerais attribuer une adresse (numéro de rue, rue et ville) pour chaque point existant.
    Merci d’avance !!

  4. Merci de votre réponse rapide !
    Pouvez-vous m’indiquez comment récupérer la latitude et la longitude dans un fichier .shp sur qgis ?
    Merci encore.

  5. Bonjour!

    Aucun résultat de mon côté. Le fichier shp comme le csv reste désespérément vide.

    S’agit d’un problème de version? J’utilise QGIS 2.12.

    Voyez vous d’autres sources de bug potentiel?

    Merci

    Bertrand

    1. Peut-être je ne comprends pas bien votre phrase, mais si le csv est vide qu’est-ce que vous vous attendez à avoir comme shape? En principe le csv contient une adresse par ligne et le shape résultat un point par ligne du csv.

      1. Effectivement François, j’aurais du être plus précis.

        Le fichier csv dont je parle correspond à la liste des adresses non trouvées « not found Output List ».
        C’est ce fichier qui est vide.

        Le shp de sortie l’est également. Il n’y a aucune entrée dans la table.

        En gros, il ne fait rien mais sans se planter!

        1. Je vais essayer de chez moi depuis un autre ordinateur. Il est possible que le proxy de mon entreprise bloque la connexion au service WEB.

          D’ailleurs, quel est le service web au juste qui est utilisé?

  6. Bonjour,

    Je suis parvenu à géocoder plusieurs paquets d’adresses renvoyant à des listes csv différentes. Pour 3 de ces listes le géocodage par le service google s’est fait avec « addrtype : street_address » et « addrlocat : RANGE INTERPOLATED » mais une d’entre-elles regroupe plusieurs adresses en un point et à l' »addrlocat : locality » et « addrlocat : APPROXIMATE ». Ces listes sont pourtants parfaitement identique du point de vue de la forme. Comment expliquer la différence de cette dernière et comment cela peut-il être modifier?

  7. Bonjour,
    j’ai une base de 2500 adresses à cartographier mais en suivant ce tuto il me dit que google limite à 6 adresses…. existe-t-il une solution?

      1. Merci pour votre réponse rapide.
        j’ai essayé mais j’ai un message d’erreur à la 8eme adresse me disant que le CSV dois être en UTF8 (ce qui est le cas j’ai vérifié). ou alors j’ai Qgis ne répond pas.

  8. Bonjour, votre tuto est super
    cependant je ne parviens pas géocoder. J’ai rempli tous les champs comme vous l’avez présenté il me semble….mais je ne sais pas pour quelle raison lorsque je clique sur OK pour lancer le géocodage il m’affiche : Ernno 13 : permission denied u’nomdufichierdesadressesnontrouvées.csv’

    Auriez-vous une solution ?

    1. manifestement vous avez indiqué de mettre les adresses non trouvées dans un fichier appelé nomdufichierdesadressesnontrouvées.csv et il ne peut pas accéder. Peut-être est-il ouvert dans un éditeur de texte, ou vous n’avez pas le droit d’écriture dans le répertoire (si c’est program files, par exemple), ou bien il y a une errur dans le path que vous avez indiqué

  9. Bonjour,

    J’utilise un proxy

    J’ai une erreur :

    Une erreur est apparue lors de l’exécution du code Python :

    Traceback (most recent call last):
    File « C:/Users/IAY5909/.qgis2/python/plugins\mmqgis\mmqgis_dialogs.py », line 1358, in run
    shapefilename, notfoundfile, fields, service, apikey, 1)
    File « C:/Users/IAY5909/.qgis2/python/plugins\mmqgis\mmqgis_library.py », line 2416, in mmqgis_geocode_web_service
    x, y, addrtype, addrlocat, formatted_addr = mmqgis_geocode_address_osm(address)
    File « C:/Users/IAY5909/.qgis2/python/plugins\mmqgis\mmqgis_library.py », line 381, in mmqgis_geocode_address_osm
    message = « Failure connecting to maps.googleapis.com:  » + unicode(e)
    UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe9 in position 58: ordinal not in range(128)

    Version de Python :
    2.7.5 (default, May 15 2013, 22:44:16) [MSC v.1500 64 bit (AMD64)]

    Version de QGIS :
    2.8.1-Wien Wien, exported

    Chemin vers Python : [‘C:/PROGRA~1/QGISWI~1/apps/qgis/./python/plugins\\processing’, ‘C:/PROGRA~1/QGISWI~1/apps/qgis/./python’, u’C:/Users/IAY5909/.qgis2/python’, u’C:/Users/IAY5909/.qgis2/python/plugins’, ‘C:/PROGRA~1/QGISWI~1/apps/qgis/./python/plugins’, ‘C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\matplotlib-1.3.1-py2.7-win-amd64.egg’, ‘C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\nose-1.3.3-py2.7.egg’, ‘C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\tornado-4.0.1-py2.7-win-amd64.egg’, ‘C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\backports.ssl_match_hostname-3.4.0.2-py2.7.egg’, ‘C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\certifi-14.05.14-py2.7.egg’, ‘C:\\lns\\ArcGis\\bin’, ‘C:\\PROGRA~1\\QGISWI~1\\bin\\python27.zip’, ‘C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\DLLs’, ‘C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib’, ‘C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\plat-win’, ‘C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\lib-tk’, ‘C:\\PROGRA~1\\QGISWI~1\\bin’, ‘C:\\PROGRA~1\\QGISWI~1\\apps\\Python27’, ‘C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages’, ‘C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\PIL’, ‘C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\jinja2-2.7.2-py2.7.egg’, ‘C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\markupsafe-0.23-py2.7-win-amd64.egg’, ‘C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\pytz-2012j-py2.7.egg’, ‘C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\win32’, ‘C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\win32\\lib’, ‘C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\Pythonwin’, ‘C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\Shapely-1.2.18-py2.7-win-amd64.egg’, ‘C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\six-1.3.0-py2.7.egg’, ‘C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\wx-2.8-msw-unicode’, ‘C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\xlrd-0.9.2-py2.7.egg’, ‘C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\xlwt-0.7.5-py2.7.egg’, u’C:/Users/IAY5909/.qgis2//python’, ‘C:\\Users\\IAY5909\\.qgis2\\python\\plugins\\mmqgis/forms’, ‘C:\\PROGRA~1\\QGISWI~1\\apps\\qgis\\python\\plugins\\fTools\\tools’]

  10. Bonjour

    voici mon fichier codé en UTF8 :

    Adresse,Codepostal,Ville,Pays
    132 cours Charlemagne,69002,LYON,France
    1 avenue Georges Pompidou,69003,LYON,France

    Toujours la même erreur…

    J’ouvre qgis (je n’ai aucune couche peut-être en faut-il une? De quel type?)
    puis dans MMQGIS / GEOCODE / Address-city-country / OK

    Le séparateur de colonne peut-il être un « ; » ou absolument « , » ?

    merci de votre réponse

    Cordialement Laurent FRAISSE

    1. J’ai recopié le contenu de votre fichier adresse dans un fichier texte, exécuté mmqgis et j’ai un point de créé au coin de la rue Paul Montrochet, à Lyon.
      Le séparateur est forcément la virgule, car vous n’avez pas d’option de configuration ((et CSV c’est comma separated par défaut)
      L’erreur peut venir de votre configuration réseau (message = « Failure connecting to maps.googleapis.com: »

      1. Merci de votre réponse.

        Y a t-il un paramètre pour le reseau dans qgis ?
        J’utilise un httpproxy

        Mon reseau fonctionne. J’ai internet. Mais toujours l’erreur…

        Cordialement Laurent FRAISSE

        1. Non, il n’y a rien à paramétrer dans QGis.
          Le plugin se connecte à maps.googleapis.com. Il faut voir si votre pare-feu le permet.
          D’autre part, moi je suis avec QGis 2.18 et la version du plugin 2017.2.28
          Je ne peux pas vous dire si avec votre version ça doit marcher aussi.

  11. Bonjour,
    MMQGis semble permettre de grandes choses mais garde de la distance avec le novice que je suis.
    En bref, quand j’importe un fichier CSV et qu’il calcule la position des points, ceux ci sont différemment situés par rapport à ces mêmes points calculés individuellement via le géocode classique. De même quand j’affiche les layer openstreet, il y a un décalage.
    On pourrait croire à un problème de SRC, et pourtant tous mes SRC sont identiques.
    Quelqu’un pourrait-il m’aider?
    Bien le merci,
    jihef

  12. Bonjour,

    Dans ce cas, plus de message d’erreur mais rien n’apparait sur la carte et le fichier notfound contient les lignes :

    rue,ville,pays

    164 anatole france 29200, brest,france

    1. Désolé, il fut un temps où openstreetmaps comprenait « anatole france » comme une rue. Apparemment maintenant il lui faut « rue anatole france » pour la trouver… Essayez « 164 rue anatole france 29200, brest, france », ça devrait marcher

  13. Bonjour, je débute sur qgis et dans le sig en général et ne suis pas très doué en informatique.

    J’ai une question qui va peut-être paraître grotesque mais je me lance.

    J’ai téléchargé le fichier SIREN, comme indiqué mais comment dois-je faire pour garder les données et créer des nouveaux champs (comme dans votre exemple rue, ville, pays) alors que je ne connais pas les entreprises présentes sur mes communes (4 en l’occurrence) ?

    pour le dire autrement, mon fichier csv contient un grand nombre de colonnes, est-ce que je dois le modifier directement ou passer par excel pour ne créer que ces 3 colonnes précédemment citées ?

    Merci d’avance
    Cordialement.

    1. Je ne sais pas quel fichier SIREN vous avez téléchargé, mais comme expliqué dans l’article
      « Dans Input csv file, pointez sur votre fichier texte csv »
      Puis:
      Déroulez les fenêtres Addres field, City field et Country field pour leur affecter les noms des champs de votre fichier SIREN
      La seule chose à faire est de repérer dans votre fichier csv quels champs contiennent les informations « adresse », « ville » et « pays », et les sélectionner dans les menus déroulants du plugin

    1. En fait si j’ai encore un problème,

      Dans le fichier que j’ai téléchargé, il y a une colonne pour le numéro de la voie, une pour la rue et une pour le code postale hors il me faudrait une seule colonne pour ces 3 informations donc comment dois-je procéder ?

  14. Bonjour, j’essaie en vain de geocoder une adresse à paris, mais j’ai toujours la même erreur « Request Denied: 0 addresses geocoded » j’ai essayé avec open street map ca ne fonctionne pas, j’ai tenté de remplacer les virgule par des points virgules, et j’ai même cherché une clé API mais toujours rien même avec vos adresses (celles de l’exemple Brest) je ne comprend vraiment pas

  15. Bonjour des collègues ont effectué des mesures QOS, couverture à la réunion. Cependant on sait aperçu qu’il manquait des points sur certaines routes. Ma question est la suivante :
     » Comment corriger/ajouter les points oubliées sur les parcelles de route ?
    PS : Je possède un fichier GPX et un fichier Excell format cvs.

    N’hésiter pas à revenir pour tous compléments d’informations je serai ravi d’échanger avec vous.

    Bonne journée à vous

Répondre à Mickael Annuler la réponse

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