#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