gis
Database
Tables
(current)
Columns
Constraints
Relationships
Orphan Tables
Anomalies
Routines
split
Parameters
Name
Type
Mode
id_seg
integer
IN
xnode
real
IN
ynode
real
IN
Definition
DECLARE seg record; cut geometry; geom_init geometry; geom_term geometry; id_new_seg integer; BEGIN -- Récupération du point cliqué SELECT ST_GeomFromText('POINT(' || xnode || ' ' || ynode || ')',2154) INTO cut; -- Récupération du segment cliqué SELECT * FROM veloroutes.segment WHERE veloroutes.segment.id_segment=id_seg INTO seg; -- Vérification que le clique ne se situe pas trop loin d'un segment IF ST_Distance(cut, seg.geom)> 5 THEN RAISE EXCEPTION 'Aucun segment trouvé à proximité du clic : Distance > 5m '; END IF; -- Création des nouvelles géométries geom_init := ST_LineSubstring(seg.geom, 0, ST_LineLocatePoint(seg.geom, cut)); geom_term := ST_LineSubstring(seg.geom, ST_LineLocatePoint(seg.geom, cut), 1); -- Vérification que le point de coupure est à plus d'un mètre des extrémités du segment IF ST_length(geom_init)<1 OR ST_length(geom_term)<1 THEN RAISE EXCEPTION 'Impossible de couper : point trop proche de l''extrémité'; END IF; -- Modification du segment : -- OA----------(O)----------OB devient OA----------(O) UPDATE veloroutes.segment s SET geom = geom_init WHERE id_segment = seg.id_segment; -- Création d'un nouveau segment : -- (O)----------OB -- On récupère les valeurs issues du segment d'origine INSERT INTO veloroutes.segment( annee_ouverture, date_saisie, src_geom, src_annee, avancement, revetement, statut, gestionnaire, proprietaire, precision, sens_unique, geometrie_fictive, desserte_college, amenagement, amenagement_type, geom ) VALUES( seg.annee_ouverture, seg.date_saisie, seg.src_geom, seg.src_annee, seg.avancement, seg.revetement, seg.statut, seg.gestionnaire, seg.proprietaire, seg.precision, seg.sens_unique, seg.geometrie_fictive, seg.desserte_college, seg.amenagement, seg.amenagement_type, geom_term ) RETURNING id_segment into id_new_seg; -- Création des nouveaux elements de portion si besoin INSERT INTO veloroutes.element(id_portion,id_segment) SELECT veloroutes.element.id_portion, id_new_seg FROM veloroutes.element WHERE veloroutes.element.id_segment = id_seg; -- Return 1 RETURN 1; END;