banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Fri 15 April 2016 08:37

varrieta
Participant occasionnel
Date d'inscription: 30 Mar 2016
Messages: 13

Remplissage automatique d'un attribut de longueur

Bonjour,

J'ai une couche de type ligne shape qui possède un attribut "longueur" et je souhaiterais que celui-ci se remplisse automatiquement à la création d'un nouvel objet. J'ai créer cette requête SQL:

Code:

ALTER TABLE test ADD COLUMN longueur double precision DEFAULT "St_Length()";

Malheureusement la requête ne marche pas car il semble que la fonction St_Length ne puisse être appelée comme cela. Quelqu'un a-t-il une idée?

D'avance merci!

Hors ligne

 

#2 Fri 15 April 2016 09:26

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1554

Re: Remplissage automatique d'un attribut de longueur

Bonjour,

En général, on ne stocke pas les attributs/valeurs en double dans une table.
La valeur 'longueur' est déja présente dans la géométrie (st_length(geom)).

Vous pouvez créer une vue sur cette table, avec la colonne longueur qui vaut st_length(geom). La valeur de longueur sera alors toujours juste car venant de la geom elle-meme.

S vous devez vraiment stocker la geom ET sa longueur dans une table, il faut faire un trigger et mettre a jour la longueur a chaque opération sur la geom (update, insert).

La valeur DEFAULT doit etre fixe.

Nicolas

Hors ligne

 

#3 Fri 15 April 2016 09:35

varrieta
Participant occasionnel
Date d'inscription: 30 Mar 2016
Messages: 13

Re: Remplissage automatique d'un attribut de longueur

Merci pour votre réponse!

Oui j'aurais effectivement besoin de stocker geométrie et longueur dans la table pour simplifier la vie des utilisateurs (les objets sont ensuite créer depuis QGIS). J'ai essayé de faire un trigger, mais je ne sais pas comment le lier avec la colonne longueur?

Code:

CREATE OR REPLACE FUNCTION t_longueur() RETURNS trigger AS
$BODY$BEGIN
  NEW.t_longueur := ST_Length(NEW.geom);
  RETURN NEW;
END;$BODY$ LANGUAGE plpgsql;

CREATE TRIGGER test_longueur
  BEFORE INSERT OR UPDATE ON test.geom
  FOR EACH ROW EXECUTE PROCEDURE t_longueur();

Dernière modification par varrieta (Fri 15 April 2016 09:37)

Hors ligne

 

#4 Fri 15 April 2016 09:39

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1554

Re: Remplissage automatique d'un attribut de longueur

Votre trigger a l'air bon (pas testé)

Le lien se fait avec une table (test) pour laquelle vous dites que la valeurs de la colonne t_longueur vaut st_length(geom) pour chaque nouvelle ligne (NEW.t_longueur := ....)

Sinon le forum fourmille d'exemples sur les triggers.

Nico

Hors ligne

 

#5 Fri 15 April 2016 09:43

varrieta
Participant occasionnel
Date d'inscription: 30 Mar 2016
Messages: 13

Re: Remplissage automatique d'un attribut de longueur

Super, ça marche! Je m'étais juste trompée sur la variable (longueur et pas t_longueur). J'ai créé l'objet dans QGIS et la longueur est mise à jour automatiquement. Merci beaucoup pour vos conseils, ils m'ont été très utiles!

Dernière modification par varrieta (Fri 15 April 2016 09:44)

Hors ligne

 

Pied de page des forums

Powered by FluxBB