Message posté par : Léandre Béron
----------------------------------------
Bonjour,
Nous travaillons sur des données des friches de notre collectivité.
Deux attributs sont présents :
- surf_tup : Surface du foncier
- idpar_tup : Liste des IDU des parcelles constituant la friche
Je souhaiterais donc mettre à jour ces informations de façon automatique.
Cela passe par une comparaison spatiale donc demande un minimum de temps. J'utilise un
ST_PointOnSurface pour ne prendre uniquement les véritables parcelles qui constituent la
friche et non celles voisines en plus.
J'ai d'abord mis en place le process sur un TRIGGER BEFORE ISNERT OR UPDATE qui
fonctionne mais qui est extrêmement long.
J'aurais donc souhaité passer sur un AFTER INSERT OR UPDATE en pensant diminuer le
temps d'enregistrement pour l'utilisateur.
J'ai donc mis en place ceci :
-----------------
Citation :
CREATE FUNCTION schema.table_saisi_auto()
RETURNS trigger
LANGUAGE 'plpgsql'
COST 100
VOLATILE NOT LEAKPROOF
AS $BODY$
BEGIN
-- champs automatisés
NEW.sit_datmaj = current_date;
-- CALCUL SOMME SURFACE CADASTRE DES PARCELLES QUI SONT CONCERNEES PAR LA FRICHE
(INTERSECT FRICHE AVEC POINT ON SURFACE PARCELLE)
NEW.surf_tup = SUM("SUPF")
FROM cadastre."PARCELLE" par
WHERE ST_Intersects(ST_PointOnSurface(NEW.geom),par."GEOM");
-- LISTE LES PARCELLES QUI SONT DANS CETTE FRICHE
NEW.idpar_tup = string_agg(parc."IDU", ', '::text)
FROM cadastre."PARCELLE" parc
WHERE ST_Intersects(ST_PointOnSurface(parc."GEOM"), NEW.geom);
RETURN NEW;
END;
$BODY$;
-- CREATION DES TRIGGERS
CREATE TRIGGER schema_table_control_saisi
BEFORE INSERT OR UPDATE
ON schema.table
FOR EACH ROW
EXECUTE PROCEDURE schema.table_control_saisi();
CREATE TRIGGER table_saisi_auto
AFTER INSERT OR UPDATE
ON schema.table
FOR EACH ROW
EXECUTE PROCEDURE schema.table_saisi_auto();
-----------------
Aucune erreur lors de l'enregistrement d'une modification géométrique sous QGIS,
mais temps de chargement très long + ne se passe rien dans les 2 champs en question.
--> Egalement, comment optimiser la mise à jour de ces informations ? Le cadastre
utilisé est sur 466 communes et nous travaillons sur 39 communes. Définir une table
spécifique des parcelles (avec le millésime) uniquement sur ces 39 communes me ferait-il
gagner un temps non négligeable ? Le trigger ne devrait plus à passer toutes les parcelles
mais beaucoup moins, non ?
--> Je peux aussi passer par une vue qui reconstitue ces deux informations (et
n'ayant donc plus besoin de les faire disposer sur ma table), mais sera-t-elle plus
performante ?
Bien Cordialement,
Léandre Béron
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=354689#p354689
Pour y répondre : geobd(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net