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

 

 

15 pensées sur “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?

Laisser un commentaire

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