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 :
- On créé un vecteur de type point avec les champs longitude et latitude;
- les fonctions d’accession des coordonnées géographiques sont présentées à l’aide de la calculatrice de champ;
- 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 :
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.
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.
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.
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.
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′)).
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.
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.
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.
Vous cherchez à générer automatiquement un identifiant unique auto-incrémenté dans QGIS?
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.
View Comments (20)
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!
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
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.
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";
Bonjour darksabersan, je vous remercie pour vos réponses détaillées et constructives.
Bien cordialement,
FD
Merci, tutoriel très clair et concret
Pierre,
Je vous remercie pour votre commentaire.
Bien cordialement,
FD
Bonjour et merci pour ces explications très claires. Étant encore très débutant dans la geomatique, je souhaitais savoir si il existait une extension, ou une commande, qui permettrait de générer automatiquement dans une légende d atlas un lien de renvoi vers une cartographie Web- Geoportail au mieux, OSM, Google maps au pire. Merci. Jux.
Bonjour à Tous.
J'ai un souci avec la mise en page de ma carte dans QGIS. en effet je n'arrive pas afficher les coordonnées sur le cadre de droite de la grille. les coordonnées au dessus, en dessous et à gauche s'affiche sauf à droite.
j'ai essayé avec les versions de QGIS 3.18, 3.22 et 3.28 je n'y arrive pas.
Merci de me donner un coups de pouce
Un grand merci pour ce tutoriel clair et juste bien illustré pour bien comprendre chaque étape.
Cela faisait des mois que je me compliquais la vie à convertir des coordonnées GPS sans savoir que l'on pouvait le faire de Qgis !!! ahah merci beaucoup pour ce gain de temps :)
Bien à vous
Victoria
Merci Victoria pour votre retour.
Déjà grand merci pour ce tutoriel très édifiant et intéressant. cependant, j'aimerais savoir, comment faire pour ajouter des entités géométriques (polygon par exemple) dans une couche multipolygon. je me résume j'ai créé une couche multipolygone vide dans laquelle j'aimerai ajouter progressivement et individuellement des polygones. y'a t il une astuce de renseigner également le champ geometry avec le formulaire ????
Bonjour Daryl,
Je ne suis pas certain de comprendre la question. Vous voulez créer un nouveau champ attributaire correspondant à la géométrie autre que le shape? Si oui sous quel format? Texte, Json, WKT, etc?
FD
Même 5 ans après la formation que tu as dispensé en GB, tes tuto sont toujours utiles Monsieur Florian Delahaye!!
Merci Isolde! Tout va bien pour toi?
FD
ça va bien. j'ai changé de boulot où j'ai repris l'utilisation quasi-quotidienne de QGIS, alors après 2 ans sans y avoir touché je dois reprendre mes marques
Et toi ça va?
Ah oui, tu vas être expert en QGIS!
Pour moi, ça va tranquille en Bretagne :) .
A bientôt,
FD
j'ai rejoins la Bretagne aussi depuis septembre.
La formule de conversion ne fonctionne pas dans mon cas (3.38). J'ai un message d'erreur syntaxique lorsque je rentre la formule. Le $x fonctionne bien, mais pas la conversion.
Bonjour Franck,
S'il y a une erreur syntaxique, l'expression est mal saisie. Dans l'expression transform, les SCR (ex: 'EPSG:2154') sont entourés de simple quote ' et non des guillemets ou d'apostrophe.
Cdlt