Estoy utilizando QGIS y POSTGIS, por ejemplo para calcular automáticamente el área de un nuevo polígono creado. Lo hago con el siguiente código:
CREATE OR REPLACE FUNCTION calc_area()
RETURNS trigger AS
$BODY$
BEGIN
NEW.fla_ha := st_area(NEW.geom)/10000;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql;
CREATE TRIGGER area_calculate BEFORE INSERT OR UPDATE ON nutzungen
FOR EACH ROW EXECUTE PROCEDURE calc_area();
Definición del problema:
¿Cómo puedo cambiar mi disparador, de modo que las ediciones en la geometría de un polígono existente (nuevo vértice ...) se reconocerá y el valor de área de edad se sobrescribe.
Si utilizo ACTUALIZACIÓN en combinación con un AFTER-TRIGGER me actualiza toda la columna fla_ha y no la fila concreta:
CREATE OR REPLACE FUNCTION "area_new"()
RETURNS trigger AS
$BODY$BEGIN
UPDATE nutzungen SET fla_ha=ST_AREA(NEW.geom)/10000;
END;$BODY$
LANGUAGE plpgsql VOLATILE
ALTER FUNCTION "area_new"()
OWNER TO postgres;