Триггер BEFORE INSERT на проверку вложенности геометрии

Ответить
Аватара пользователя
dab
Гуру
Сообщения: 671
Зарегистрирован: 16 дек 2011, 20:02
Репутация: 170
Ваше звание: Гуру
Откуда: Москва
Контактная информация:

Триггер BEFORE INSERT на проверку вложенности геометрии

Сообщение dab » 16 ноя 2012, 14:27

Задача при создании новой геометрии квартала проверять на вложенность его в определенный район.
При попадании квартала в существующий район - через триггер присваивать значения поля внешнего ключа id_rayon. Используются схемы соответствующие местным системам координат, поэтому присутствует TG_TABLE_SCHEMA.
Вопрос:
В коде функции public.kvr_ins можно ли как-то обойтись без st_astext() и public.st_geomfromtext(), а значение NEW.geom сразу использовать в SELECT?
PostgreSQL 9.1.5, compiled by Visual C++ build 1500, 64-bit

Код: Выделить всё

CREATE OR REPLACE FUNCTION public.kvr_ins ()
RETURNS trigger AS
$body$
DECLARE
  id_rn INTEGER;
  textg VARCHAR;
BEGIN
  IF NEW.id_rayon IS NULL THEN
    textg = public.st_astext(NEW.geom);
    EXECUTE 'SELECT '||quote_ident(TG_TABLE_SCHEMA)||'.rayon.id FROM '||quote_ident(TG_TABLE_SCHEMA)||'.rayon '||
      'WHERE public.st_within(public.st_geomfromtext('||quote_literal(textg)||'), ' || quote_ident(TG_TABLE_SCHEMA) || '.rayon.geom)' INTO id_rn;      
    NEW.id_rayon = id_rn;
  END IF;  
  RETURN NEW;
END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;

CREATE TRIGGER kvartal_tri
  BEFORE INSERT 
  ON msk5603.kvartal FOR EACH ROW 
  EXECUTE PROCEDURE public.kvr_ins();

Ответить

Вернуться в «PostGIS/PostgreSQL»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 11 гостей