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

Pour sécuriser votre compte sur les forums du GeoRezo, nous demandons de changer votre mot de passe.

Vous allez recevoir un message pour effectuer ce changement de mot de passe.

Merci de bien respecter les règles préconisées.

#1 Tue 20 February 2018 18:08

pgilbert
Juste Inscrit !
Lieu: Noisy-le-Grand
Date d'inscription: 20 Feb 2012
Messages: 5

Postgis / trigger et fonction sommer un nombre de points sur une zone

Bonjour à tous,

Je débute avec les fonctions et les triggers sur postgresql et postgis. J'ai besoin d'aide. Je voudrais mettre à jour automatiquement un attribut d'une couche polygone à la création d'une nouvelle entité (ou sa modification) avec la somme d'un attribut d'entités ponctuels intersectant cette nouvelle entité.

Pour mon exemple, il s'agit d'électeurs suivant un zonage. j'ai 2 couches:
- electeur(ponctuelle)
  - id
  - electeurs (nombre_electeurs)
  - geom
- zonages
  - id
  - nb_elec (champs à mettre à jour automatiquement)
  - geom


J'ai testé à la création de la fonction suivante

Code:

 CREATE OR REPLACE FUNCTION public.nb_elec()
RETURNS trigger AS
$BODY$ 

BEGIN

NEW.nb_elec = tot_elect as 

(select sum(electeurs) 

from public.zonages 

join public.electeur 

on st_intersects(electeur.geom, NEW.geom)
group by new.geom)

RETURN NEW;

END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;

et la création du trigger suivant

Code:

CREATE TRIGGER t_nbelec
AFTER INSERT OR UPDATE
ON zonages
FOR EACH ROW
EXECUTE PROCEDURE public.nb_elec();

merci pour votre aide

Hors ligne

 

#2 Tue 20 February 2018 22:59

Rémi F
Juste Inscrit !
Date d'inscription: 18 Nov 2016
Messages: 6

Re: Postgis / trigger et fonction sommer un nombre de points sur une zone

Bonjour, essayez directement ceci :

Code:

CREATE OR REPLACE FUNCTION public.nb_elec()
RETURNS trigger AS
$BODY$ 

BEGIN

NEW.nb_elec := (select sum(a.electeurs) from public.electeur a where st_intersects(new.geom, a.geom));

RETURN NEW;

END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;

CREATE TRIGGER t_nbelec
BEFORE INSERT OR UPDATE
ON public.zonages
FOR EACH ROW
EXECUTE PROCEDURE public.nb_elec();

Hors ligne

 

#3 Mon 12 November 2018 15:45

pgilbert
Juste Inscrit !
Lieu: Noisy-le-Grand
Date d'inscription: 20 Feb 2012
Messages: 5

Re: Postgis / trigger et fonction sommer un nombre de points sur une zone

merci pour votre réponse

Hors ligne

 

Pied de page des forums

Powered by FluxBB