Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#1 21/03/2017 23:15:38
- annesig
- Membre
PostGIS Trigger et update de deux tables ayant une relation spatiale
Bonjour,
Je dispose de deux couches géographiques gérées sous PostGIS.
L'une est de type polygones. L'autre contient des points.
Il existe une relation entre ces deux tables : les points sont positionnés dans les polygones.
Je souhaiterais écrire un déclencheur et sa fonction de telle manière que :
pour chaque mise à jour de la colonne géométrique ou insertion dans la table qui contient les polygones,
la tables des points soient également mise à jour.
Cette table de points contient un champ "id_polygon".
Je souhaiterais que ce champ se remplisse ainsi automatiquement à partir des valeurs id des polygones au sein desquels il sont positionnés.
De quelle manière procéderiez-vous ?
Je vous remercie par avance
Hors ligne
#2 22/03/2017 16:55:09
- annesig
- Membre
Re : PostGIS Trigger et update de deux tables ayant une relation spatiale
J'ai trouvé la réponse grâce à de l'aide sur le forum GEOREZO.
Je la dépose ici aussi au cas où cela aiderai quelqu'un ;-)
En imaginant une table "commune" et une table "points"
Code de la fonction :
CREATE OR REPLACE FUNCTION public.maj()
RETURNS trigger AS
$BODY$
DECLARE
BEGIN
IF TG_OP = 'INSERT' or TG_OP = 'UPDATE' THEN
update public.points set id_commune = public.commune.gid FROM public.commune where st_within (points.geometrie, commune.geometrie);
END IF;
return NEW;
END;$BODY$
LANGUAGE plpgsql VOLATILE SECURITY DEFINER
COST 100;
ALTER FUNCTION public.maj()
OWNER TO postgres;
Code du trigger :
CREATE TRIGGER trigger_maj
AFTER INSERT OR UPDATE OF geometrie
ON public.commune
FOR EACH ROW
EXECUTE PROCEDURE public.maj();
Hors ligne