[postgis-users] Automated area calculating

Johannes Sommer johann.online at gmx.de
Sun Feb 3 02:19:35 PST 2008


Hi Michael,

Michael Fuhr schrieb:
> What's the CREATE TRIGGER statement?
> CREATE OR REPLACE FUNCTION calc_area()RETURNS trigger AS
>   
> $BODY$
> BEGIN
>   NEW.area := st_area(NEW.geometry);
>   RETURN NEW;
> END;
> $BODY$
> LANGUAGE plpgsql;
>   
I tried this before - but no calculation happened. The important hint 
was the Trigger statement.
I did a "AFTER INSERT OR UPDATE" because I didn't know better. With

CREATE TRIGGER test_calc_area 
BEFORE INSERT OR UPDATE ON test FOR EACH ROW
EXECUTE PROCEDURE calc_area();


everything worked fine. Thank you for your help, Michael.
But I still don't know why you have to fire the trigger BEFORE an INSERT 
OR UPDATE and not AFTER this
happens.

greetings,
Johannes

Solution to automated area calculation:

--Start

CREATE OR REPLACE FUNCTION calc_area() RETURNS "trigger" AS 
$BODY$
BEGIN

-- Important: declare as 'CREATE TRIGGER BEFORE INSERT OR UPDATE' and not 

-- 'AFTER INSERT OR UPDATE'

  NEW.area_qm:=st_area(NEW.geometry);

  NEW.area_ha:=NEW.area_qm/10000.;

  RETURN NEW;

END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION calc_area() OWNER TO postgres;


CREATE TRIGGER test_calc_area 
BEFORE INSERT OR UPDATE ON test FOR EACH ROW
EXECUTE PROCEDURE calc_area();

--End







More information about the postgis-users mailing list