Advertisement
Guest User

Untitled

a guest
Aug 31st, 2015
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.01 KB | None | 0 0
  1. CREATE TABLE label_point (
  2. gid serial NOT NULL,
  3. geom geometry(point, SRID),
  4. label_sample varchar(255),
  5. CONSTRAINT label_point_pkey PRIMARY KEY (gid)
  6. );
  7.  
  8. CREATE TABLE soil (
  9. gid serial NOT NULL,
  10. geom geometry(polygon, SRID),
  11. label varchar(255),
  12. CONSTRAINT soil_pkey PRIMARY KEY (gid)
  13. );
  14.  
  15. CREATE OR REPLACE FUNCTION sample_label()
  16. RETURNS trigger AS $body$
  17. BEGIN
  18. IF GeometryType(NEW.geom) = 'POINT' THEN
  19. EXECUTE 'SELECT label FROM soil WHERE ST_Within($1, soil.geom) LIMIT 1'
  20. USING NEW.geom
  21. INTO NEW.label_sample;
  22. RETURN NEW;
  23. ELSEIF GeometryType(NEW.geom) = 'POLYGON' THEN
  24. EXECUTE 'UPDATE label_point SET label_sample = NULL WHERE ST_Within(label_point.geom, $1)'
  25. USING NEW.geom;
  26. RETURN NEW;
  27. END IF;
  28. END;
  29. $body$ LANGUAGE plpgsql;
  30.  
  31. CREATE TRIGGER tg_sample_label BEFORE INSERT OR UPDATE
  32. ON label_point FOR EACH ROW
  33. EXECUTE PROCEDURE sample_label();
  34.  
  35.  
  36. CREATE TRIGGER tg_sample_label AFTER INSERT OR UPDATE
  37. ON soil FOR EACH ROW
  38. EXECUTE PROCEDURE sample_label();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement