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

Printemps des cartes 2024

#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: 1538

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.


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#4 Mon 16 March 2015 11:36

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

Re: Création Trigger - Automatisation calcul transformation 4326 vers 2154

Bonjour,

C'est écrit dessus smile
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

 

Pied de page des forums

Powered by FluxBB