Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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 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