0
AND
isleft =
adresse.calcul_point_position(adresse.calcul_segment_proche(v.geom, p1.geom), p1.geom)
ORDER BY dist LIMIT 1) AS a;
suff = ARRAY ['bis', 'ter', 'qua', 'qui', 'a', 'b', 'c', 'd', 'e'];
SELECT numero into numb
FROM(
SELECT ST_Distance(pgeom, p1.geom) as dist, p1.numero as numero
FROM adresse.point_adresse p1, adresse.voie v
WHERE statut_voie_num IS FALSE AND p1.id_voie = idvoie AND v.id_voie = idvoie AND
(ST_LineLocatePoint(v.geom, ST_ClosestPoint(v.geom, pgeom)) - ST_LineLocatePoint(v.geom, ST_ClosestPoint(v.geom, p1.geom))) <0
AND
isleft =
adresse.calcul_point_position(adresse.calcul_segment_proche(v.geom, p1.geom), p1.geom)
ORDER BY dist LIMIT 1) AS b;
IF numa IS NOT NULL AND numb IS NOT NULL THEN
test = false;
IF numb - numa > 2 THEN
numc = numa+2;
ELSE
FOREACH rec IN ARRAY suff LOOP
IF (SELECT TRUE FROM adresse.point_adresse p WHERE p.id_voie = idvoie AND p.numero = numa AND p.suffixe = rec) IS NULL AND NOT test THEN
test = true;
numc = numa;
s = rec;
END IF;
END LOOP;
END IF;
ELSIF numa IS NOT NULL AND numb IS NULL THEN
numc = numa+2;
ELSIF numa IS NULL AND numb IS NOT NULL THEN
IF numb - 2 >0 THEN
numc = numb - 2;
ELSIF numb - 2 <= 0 THEN
test = false;
FOREACH rec IN ARRAY suff LOOP
IF (SELECT TRUE FROM adresse.point_adresse p WHERE p.id_voie = idvoie AND p.numero = numb AND p.suffixe = rec) IS NULL AND NOT test THEN
test = true;
numc = numb;
s = rec;
END IF;
END LOOP;
END IF;
ELSIF numa IS NULL AND numb IS NULL THEN
IF isleft AND NOT sens THEN
numc = 1;
ELSIF NOT isleft AND NOT sens THEN
numc = 2;
ELSIF isleft AND sens THEN
numc = 2;
ELSIF NOT isleft AND sens THEN
numc = 1;
END IF;
END IF;
return query SELECT numc, s, idvoie;
END;
]]>
0;
END;
]]>
0.0
OR (NEW.valide IS DISTINCT FROM OLD.valide AND NEW.valide) THEN
-- Cas où id_voie est null, calculer un nouvel id_voie
IF NEW.id_voie IS DISTINCT FROM OLD.id_voie
OR (NEW.id_voie IS NULL AND NEW.valide)
OR ST_DISTANCE(NEW.geom, OLD.geom) > 0.0 THEN
SELECT adresse.get_id_voie(NEW.geom) into idvoie;
-- Aucune voie dévérouillée trouvée
IF idvoie IS NULL THEN
return NULL;
END IF;
NEW.id_voie = idvoie;
END IF;
-- Vérification que la nouvelle adresse n'existe pas déjà
IF (NEW.numero != OLD.numero
OR NEW.suffixe IS DISTINCT FROM OLD.suffixe
OR NEW.id_voie IS DISTINCT FROM OLD.id_voie)
AND (SELECT adresse.num_exists(NEW.numero, NEW.suffixe, NEW.id_voie)) THEN
return NULL;
END IF;
-- Modification du nom complet de la voie
SELECT nom_complet into adrvoie FROM adresse.voie WHERE id_voie = NEW.id_voie;
IF NEW.suffixe IS NOT NULL THEN
NEW.adresse_complete = CONCAT(NEW.numero, ' ', NEW.suffixe, ' ', adrvoie);
ELSE
NEW.adresse_complete = CONCAT(NEW.numero, ' ', adrvoie);
END IF;
END IF;
RETURN NEW;
END IF;
RETURN NULL;
END;
]]>