Message posté par : Vincent-SIABS
----------------------------------------
Bonjour,
Je travail à la mise en place d'un trigger permettant de "remonter" un info
dans une table en se basant sur un foonction spatial et une "clause"
attributaire.
Je m'explique : j'ai 2 tables :
- Table poste_source qui contient le nom du poste source
- Table Rsx_hta qui contient les réseaux partant du poste source.
Je souhaite faire remonter de façon automatique dans la table Rsx_hta le nom du
poste_source d'où part le réseau. Avec comme critère les règles suivantes :
1 - il faut que le point et la ligne aient leurs deux géométries se touchent en leur
contours extérieurs. Utilsation de la fonction ST_touches
2 - il faut que le champs nom_poste dans la table Rsx_hta soit vide ou null . Utilisation
du SELECT WHERE / AND / OR
J'ai donc écrit le code suivant :
-----------------
Code :
CREATE OR REPLACE FUNCTION remonte_poste_source ()
RETURNS "trigger" AS $$
BEGIN
NEW.nom_poste= (SELECT nom
FROM public.rsx_hta, public.postes_source
WHERE
(st_touches( public.rsx_hta.geom,public.postes_source.geom) AND nom_poste = ''
)
OR
(st_touches( public.rsx_hta.geom,public.postes_source.geom) AND nom_poste IS NULL )) ;
RETURN NEW;
END;
$$
LANGUAGE 'plpgsql'VOLATILE;
CREATE TRIGGER remonte_poste_source
BEFORE INSERT OR UPDATE ON public.rsx_hta
FOR EACH ROW EXECUTE PROCEDURE remonte_poste_source ();
-----------------
Le soucis est que si je commence à tracer du Rsx qui part du poste_1 et que je passe
ensuite à du réseau qui part du poste_2 le trigger me remonte toujours la valeur
"poste_1" même si le réseau par du poste_2. cf photo en pièce jointe. J'ai
tracé dans l'ordre chronologique en commençant par la 6. 6 et 7 sont
"justes" par contre 8 remonte poste_1 alors qu'il n'a aucune geométrie
commune avec... La bonen valeur serait poste_2.
Je n'arrive pas à isoler mon erreur
Merci de votre aide.
Bonne journée.
Vincent
----------------------------------------
Ce message est accompagné de fichiers, pour les télécharger, suivre le lien ci-dessous.
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=337820#p337820
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