Pages: 1
- Sujet précédent - Création Trigger - Automatisation calcul transformation 4326 vers 2154 - Sujet suivant
#1 Wed 11 March 2015 14:12
- marlon.deg
- Participant occasionnel
- Lieu: Condom
- Date d'inscription: 25 Nov 2013
- Messages: 13
Création Trigger - Automatisation calcul transformation 4326 vers 2154
Bonjour,
Je fais appel à la grande confrérie géomaticienne = D
Je travaille actuellement sur une base de données qui est alimentée par un formulaire en ligne (je récupère des adresses d'entreprises. Je géocode ces adresses et récupère donc des coordonnées lat-long et une colonne géométrie (SRID 4326).
J'utilise mapserver pour afficher ces coordonnées (points) sur une carte mais en RGF93 - nouvelle colonne géométrie (SRID 2154).
Je souhaite automatiser le passage de la géométrie 4326 à la géométrie 2154 et créer un trigger.
Problème, je n'ai jamais créé de trigger et j'avoue que je suis un peu perdu dans tout ça. J'ai récupéré quelques informations sur internet et sur le forum mais rien qui n'explique comment construire son trigger.
Je sais qu'il faut définir une fonction puis un trigger (tout ça sera mon code, ai-je bon ?).
J'ai essayé (en récupérant des bouts de code à droite à gauche et en adaptant) d'écrire quelque chose, voilà ce que ça donne :
(ma colonne geom2154 est la nouvelle colonne géométrie, en 2154 comme son nom l'indique : P ; la colonne the_geom est la colonne géométrie d'origine en 4326)
Code:
CREATE or replace function st_tr() returns trigger as $$ $BODY$ DECLARE BEGIN NEW.geom2154 := st_transform(NEW.the_geom,2154); RETURN NEW; END; $$ LANGUAGE PLPGSQL; drop trigger if exists st_transform_trigger on ptut2013_entreprise; create trigger st_transform_trigger BEFORE UPDATE OR INSERT ON ptut2013_entreprise FOR EACH ROW EXECUTE PROCEDURE st_tr();
Est-ce quelqu'un aurait des pistes ? Des sites pour m'aider ou même une correction sur ce code (qui me paraît bien mystérieux)
Merci par avance.
Hors ligne
#2 Wed 11 March 2015 14:43
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: Création Trigger - Automatisation calcul transformation 4326 vers 2154
Bonjour,
Je ne suis pas sur qu'avoir deux colonnes pour le meme point dans deux systèmes de projection soit une très bonne idée: ca duplique des données.
Vous pouvez définir une vue sur votre table, en appelant st_transform(geom, 2154) lors de la création de la vue, ou, si la version reprojetée n'existe que pour la carto, appeler st_transform directement dans la clause DATA de votre MapFile MapServer:
Code:
... DATA "geom from (select gid, st_transform(geom, 2154) as geom from matable) using unique gid".
Concernant les triggers, c'est en effet un mécanisme de création en deux étapes:
1) Définition de la fonction qui sera utilisée par le trigger
2° Définition du trigger sur la table, en précisant son mode d'action.
Votre code parait bon, a un détail près:
$BODY$ est en trop: "$$" est utilisé pour délimiter des chaines de caractères longues (en plus de ''): le code de la fonction est envoyé a PG comme une grosse chaine de caractère.
On trouve souvent les fonctions PG définis entre les délimiteurs $$ et $$. Mais on peut aussi mettre un nom entre les $, pour rentre le code plus clair:
Code:
create fonction toto() returns int as $$ ... $$ language....; ou create fonction toto() returns int as $BODY$ ... $BODY$ language...;
Nicolas
Hors ligne
#3 Mon 16 March 2015 10:59
- marlon.deg
- Participant occasionnel
- Lieu: Condom
- Date d'inscription: 25 Nov 2013
- Messages: 13
Re: Création Trigger - Automatisation calcul transformation 4326 vers 2154
Bonjour,
Merci de votre réponse, j'y vois un peu plus clair.
J'ai essayé de créer ce trigger sous PG... Et bien sûr un petit message d'erreur apparaît.
Hors ligne
#4 Mon 16 March 2015 11:36
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: Création Trigger - Automatisation calcul transformation 4326 vers 2154
Bonjour,
C'est écrit dessus
Erreur de syntaxe: les commandes SQL se terminent par un ";" pour faire comprendre à l'éditeur SQL ou commencent et finissent les requetes.
Là, vous avez un $BODY$ qui traine, accolé a un "CREATE..."
Nicolas
Hors ligne
#5 Thu 19 March 2015 08:23
- marlon.deg
- Participant occasionnel
- Lieu: Condom
- Date d'inscription: 25 Nov 2013
- Messages: 13
Re: Création Trigger - Automatisation calcul transformation 4326 vers 2154
Je vous remercie !
Hors ligne
Pages: 1
- Sujet précédent - Création Trigger - Automatisation calcul transformation 4326 vers 2154 - Sujet suivant