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;]]>