Более

Plpgsql объединяет ST_Overlaps и ST_Intersects

Plpgsql объединяет ST_Overlaps и ST_Intersects


У меня вопрос по созданию триггерной функции в postgres с двумя условиями:

При создании линии в QGIS должно быть либо перекрытие, либо пересечение. Итак, я написал две функции, каждая из которых работает либо с ST_Overlaps, либо с ST_Intersects.

СОЗДАТЬ ИЛИ ЗАМЕНИТЬ ФУНКЦИЮ check_linesintersecting () ВОЗВРАЩАЕТ ТРИГГЕР КАК $ BODY $ DECLARE BEGIN IF TG_OP = 'INSERT' THEN IF (SELECT COUNT (*) FROM (SELECT gid FROM line_layer AS t WHERE st_intersects (NEW.geom), t. foo) THEN RAISE EXCEPTION 'Speicherung abgebrochen: Ueberschneidende Linien!'; RETURN NULL; ЕЩЕ ВОЗВРАТ НОВЫЙ; КОНЕЦ ЕСЛИ; ELSIF TG_OP = 'UPDATE' THEN IF (SELECT COUNT (*) FROM (SELECT gid FROM line_layer AS t WHERE st_intersects (NEW.geom, t.geom) AND (t.gid <> OLD.gid)) AS foo)> 0 ЗАТЕМ ПОДНИМАЙТЕ ИСКЛЮЧЕНИЕ «Speicherung abgebrochen: Ueberschneidende Linien!»; RETURN NULL; ИНАЧЕ ВОЗВРАТ НОВЫЙ; КОНЕЦ ЕСЛИ; КОНЕЦ ЕСЛИ; КОНЕЦ; $ BODY $ LANGUAGE plpgsql;

Все, что мне нужно было сделать, чтобы он обнаружил перекрытие, - это изменить ST_Intersects на ST_Overlaps. Но как я могу комбинировать ST_Overlaps и ST_Intersects?

Я пробовал использовать один и тот же цикл сразу после друг друга, но тогда работает только первая функция. Какие-нибудь подсказки?


что, если вы используете вложенное предложение if-else?

если они пересекаются, перекрываются ли они?

if --intersection if --both then else --only correct then end if end if

Смотреть видео: Топ ошибок со стороны разработки при работе с PostgreSQL. Алексей Лесовский Data Egret