Ajouter automatiquement les coordonnées géographiques dans QGIS

Chaque géométrie spatiale d’un vecteur contient un ensemble des coordonnées géographiques associées. Dans un logiciel SIG comme QGIS, on observe la forme de l’entité géographique caractérisée par un Système de Coordonnées de Références (SCR). Selon le format de données, on peut lire l’ensemble des coordonnées géographiques des entités géographiques constituant le vecteur dans un éditeur de texte. On peut citer notamment les formats de données GeoJSON, le KML ou encore le GPX. Différentes raisons amènent l’utilisateur de la donnée à enregistrer les longitudes et les latitudes des entités dans la table attributaire. Ainsi, l’objectif de ce tutoriel est de montrer comment ajouter automatiquement les coordonnées géographiques dans QGIS. Pour cela, on suit trois étapes :

  1. On créé un vecteur de type point avec les champs longitude et latitude;
  2. les fonctions d’accession des coordonnées géographiques sont présentées à l’aide de la calculatrice de champ;
  3. Puis, on modifie les propriétés des champs attributaires du vecteur.

I. Création d’un vecteur de type point dans QGIS

I.1. Création de la couche SIG avec les champs attributaires des longitudes et des latitudes

Pour illustrer ce tutoriel, on créé une couche SIG de type point en format Shapefile. Dans QGIS, dans le menu Couche, on sélectionne créer une couche puis Nouvelle couche Shapefile :

Création d'une couche Shapefile dans QGIS
Figure 1 : Création d’une couche SIG en format Shapefile dans QGIS

Dans la nouvelle fenêtre, on choisit :

  • le nom de la couche SIG -nom de fichier-;
  • l’encodage;
  • le type de géométrie, ici point;
  • la projection géographique. Dans cet exemple, la projection Lambert-93 est associée aux données vectorielles.

Puis, les champs de la table attributaire sont :

  • Par défaut, l’identifiant id de type entier;
  • On ajoute le nouveau champ longitude de type nombre décimal d’une longueur totale de 15 avec 12 décimaux;
  • Enfin, le champ latitude est également créé en nombre décimal d’une longueur de 14 avec 12 décimaux.
Création de la couche SIG de type point avec la liste des attributs
Figure 2 : Création de la couche SIG de type point avec la liste des attributs.

La couche SIG apparaît dans le panneau couche suite à son enregistrement.

I.2. Ajouts d’entités ponctuelles au vecteur dans QGIS

Après avoir créé la structure du vecteur, on dessine des entités géographiques sur le canevas de QGIS. Pour cela, la couche est en mode édition puis on ajoute un point : Éditer > Ajouter une entité ponctuelle.

Ajout d'une entité ponctuelle dans un vecteur
Figure 3 : Ajout d’une entité ponctuelle dans un vecteur.

Ensuite, on clique sur la carte en un lieu. Une nouvelle fenêtre s’ouvre dans laquelle les champs attributaires sont vides. Pour le moment, on saisit seulement un numéro d’identifiant. Les valeurs des longitudes et des latitudes seront ajoutées dans la section suivante. Plusieurs points sont dessinés et enregistrés pour l’exemple.

II. QGIS : Fonction d’accession des coordonnées géographiques

II.1. Fonctions QGIS x et y

Pour rappel, chaque entité géométrique du vecteur contient les coordonnées géographiques de chaque point. Alors comment accéder aux longitudes et aux latitudes dans QGIS? Par définition, si on projette les coordonnées géographiques dans un repère, les longitudes correspondent aux valeurs des abscisses X et les latitudes aux ordonnées en Y.

Dans QGIS, la calculatrice de champs possède une rubrique Géométrie. A l’intérieur, la fonction QGIS $x affectée à la géométrie « renvoie la coordonnée x d’une géométrie ponctuelle ou la coordonnée x du centroïde d’une géométrie non ponctuelle ». La fonction $y est identique pour la coordonnée y. On note que la fonction $x est équivalente à l’expression x($geometry).

Mettons à jour les valeurs des colonnes longitude et latitude dans la table attributaire. Dans la calculatrice de champs, on sélectionne mise à jour d’un champ existant et la colonne longitude puis on saisit $x.

Fonction QGIS d'accession à la longitude d'une géométrie spatiale
Figure 4 : Fonction QGIS d’accession à la longitude d’une géométrie spatiale.

On répète ce procédé pour le champ latitude.

Dans la table attributaire, on obtient les valeurs des coordonnées géographiques dans la projection de la couche SIG, ici en Lambert 93.

Affichage des coordonnées géographiques dans la table attributaire du vecteur
Figure 5 : Affichage des coordonnées géographiques dans la table attributaire du vecteur.

II.2. Fonctions QGIS de transformation des coordonnées géographiques dans une autre projection spatiale

Tout utilisateur a pour habitude de lire les coordonnées géographiques en degrés, c’est dire en projection WGS84 (EPSG 4326). Ainsi, on utilise la fonction QGIS Transform pour modifier la projection des géométries. Dans la calculatrice de champ, la syntaxe est : transform(geometry,source_auth_id,dest_auth_id) où :

  • geometry est la géométrie de chaque entité;
  • source_auth_id est l’Identifiant du SCR source;
  • et dest_auth_id est l’Identifiant du SCR cible.

Dans notre exemple, l’expression transform( $geometry ,’EPSG:2154′,’EPSG:4326′) retourne les géométries ponctuelles en projection WGS 84. Puis, on utilise les fonctions x et y comme précédemment. Ainsi, on obtient les longitudes en degrés décimaux en écrivant : x(transform( $geometry ,’EPSG:2154′,’EPSG:4326′)).

Fonction QGIS de transformation de la projection géographique de la géométrie
Figure 6 : Fonction QGIS de transformation de la géométrie en une autre projection géographique.

On adapte l’expression pour le champ latitude : y(transform( $geometry ,’EPSG:2154′,’EPSG:4326′)).

Dans la table attributaire, on obtient les coordonnées géographiques en degrés décimaux.

Affichage des coordonnées géographiques en degrés décimaux dans la table attributaire de QGIS
Figure 7 : Affichage des longitudes et des latitudes en degrés décimaux dans la table attributaire.

III. Génération automatique des valeurs attributaires d’un vecteur dans QGIS

Dans cette section, on montre comment ajouter automatiquement les coordonnées géographiques dans QGIS pour chaque nouvelle entité ponctuelle dessinée. Pour cela il faut modifier les valeurs attributaires par défaut dans les propriétés de la couche. Les propriétés de la couche sont accessibles en double cliquant sur la couche ou clic droit puis on sélectionne Propriétés.

Dans la fenêtre des propriétés de la couche SIG, à gauche, on choisit l’onglet Formulaire d’attributs et dans la liste déroulante Génération automatique. Les différents champs de la table attributaire sont disponibles à l’intérieur de la rubrique Fields. Dans un premier temps, on sélectionne le champ longitude. A droite, quatre onglets sont affichés : Général, Type d’outil, Contraintes et Défauts. Cette dernière rubrique permet de générer automatiquement les valeurs du champ par une expression. A cet emplacement, on saisit alors la même expression que dans la section précédente, c’est-à-dire : x(transform( $geometry ,’EPSG:2154′,’EPSG:4326′)) pour le champ longitude. On applique cette modification puis on répète le même procédé au champ latitude.

Génération automatique des valeurs des champs longitude et latitude dans QGIS
Figure 8 : Génération automatique des valeurs des champs longitude et latitude dans QGIS.

Maintenant, ajoutons une entité ponctuelle au vecteur. En mode édition, dès lors qu’on dessine un point, les coordonnées géographiques du lieu cliqué sur la carte apparaissent dans les champs attributaires longitude et latitude.

Ajouter automatiquement les coordonnées géographiques dans QGIS
Figure 9 : Génération automatique des coordonnées géographiques à l’ajout d’une entité géographique.

En conclusion, ce tutoriel QGIS a montré comment ajouter automatiquement les coordonnées géographiques dans QGIS. L’accession aux valeurs des longitudes et des latitudes des géométries vectorielles est possible grâce aux fonctions QGIS. Ces dernières disponibles à l’aide de la calculatrice de champ permettent de transformer « à la volée » les géométries dans une autre projection géographique. Enfin, la modification des propriétés des champs attributaires de la couche SIG automatise les valeurs des champs attributaires par défaut. Ainsi, à chaque nouveau dessin, les valeurs des longitudes et des latitudes sont ajoutées automatiquement dans la table attributaire du vecteur dans QGIS.

Taggé , , , .Mettre en favori le Permaliens.

A propos Florian Delahaye

Administrateur de Geomatick.com. Consultant en Géomatique, Président de SAS GEOMAZONE, Docteur en Géographie, Spécialités en SIG et Télédétection.

7 réponses à Ajouter automatiquement les coordonnées géographiques dans QGIS

  1. Loïc MOISAN dit :

    Bonjour Florian,

    Merci pour cet article très pratique avec un mode opératoire clairement détaillé.
    Par curiosité, est-ce que c’est un trigger qui agit lors de cette génération automatique?

    Salutations géomaticiennes!

    • Florian Delahaye dit :

      Bonjour Loïc,
      Merci pour ton commentaire. Darksabersan a répondu à ta question. Je tâche de faire un article sur les triggers dans PG dans de brefs délais.
      A bientôt.
      FD

  2. darksabersan dit :

    Loïc,
    Ce n’est pas un trigger mais une expression dans le formulaire d’attributs et il est lié à ton projet QGIS. Dès lors que tu fermes ton projet sans le sauvegarder tu perds les paramètres d’attributs que tu as définis et le seul moyen de le garder de manière permanente c’est de sauvegarder le style de couche dans une base de données postgres.
    Quand on parle de trigger, c’est plus en relation à une base de données, comme PostgreSQL. Dans cas, tu peux le paramétrer pour que les colonnes x et y soit renseigner à l’insertion ou à la mise à jour de ta couche.

    • darksabersan dit :

      Voici un exemple:
      — FUNCTION: schema.table_xy()

      — DROP FUNCTION IF EXISTS schema.table_xy();

      CREATE OR REPLACE FUNCTION schema.table_xy()
      RETURNS trigger
      LANGUAGE ‘plpgsql’
      COST 100
      VOLATILE NOT LEAKPROOF
      AS $BODY$
      BEGIN

      IF TG_OP = ‘INSERT’
      THEN

      — ST_X + 0.01 SI .00 ELSE ST_X(geom)
      NEW.x_srid_2154 = case when right(ST_X(NEW.geom)::numeric(12,2)::text,1) = ‘0’ THEN ST_X(NEW.geom)::numeric(12,2)+0.01 ELSE ST_X(NEW.geom)::numeric(12,5) END;
      — ST_Y + 0.01 SI .00 ELSE ST_Y(geom)
      NEW.y_srid_2154 = case when right(coalesce(ST_Y(NEW.geom),0)::numeric(12,2)::text,1) = ‘0’ THEN coalesce(ST_Y(NEW.geom),0)::numeric(12,2)+0.01
      ELSE coalesce(ST_Y(NEW.geom),0)::numeric(12,5) END;

      END IF;

      IF TG_OP = ‘UPDATE’
      THEN

      IF ST_Equals(NEW.geom,OLD.geom) is False
      THEN

      — ST_X + 0.01 SI .00 ELSE ST_X(geom)
      NEW.x_srid_2154 = case when right(ST_X(NEW.geom)::numeric(12,2)::text,1) = ‘0’ THEN ST_X(NEW.geom)::numeric(12,2)+0.01 ELSE ST_X(NEW.geom)::numeric(12,5) END;
      — ST_Y + 0.01 SI .00 ELSE ST_Y(geom)
      NEW.y_srid_2154 = case when right(coalesce(ST_Y(NEW.geom),0)::numeric(12,2)::text,1) = ‘0’ THEN coalesce(ST_Y(NEW.geom),0)::numeric(12,2)+0.01
      ELSE coalesce(ST_Y(NEW.geom),0)::numeric(12,5) END;

      END IF;
      END IF;

      RETURN NEW;

      END;
      $BODY$;

      ALTER FUNCTION schema.table_xy()
      OWNER TO « postgres »;

    • Florian Delahaye dit :

      Bonjour darksabersan, je vous remercie pour vos réponses détaillées et constructives.
      Bien cordialement,
      FD

  3. Pierre dit :

    Merci, tutoriel très clair et concret

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.