[Gfoss] Automatizzare l'intersezione con un TRIGGER

Massimiliano Moraca info a massimilianomoraca.it
Sab 28 Dic 2019 17:21:17 CET


Salve a tutti, sto dedicando questi giorni a familiarizzare con i TRIGGER
in PostGIS prendendo spunto da questa[1] guida. Sono riuscito a creare
automaticamente un buffer a partire dall'editing di un vettore lineare e
quello che voglio fare ora è eseguire un *intersection* tra i buffer e
alcuni poligoni. Ho quindi due tabelle principali: *buffer* e *polygons*;
l'output dell'intersezione deve confluire in una tabella in cui verranno
riportati anche gli id dei poligoni da cui è scaturita l'intersezione(idb
per buffer e idp per polygons). La tabella in cui confluiranno questi dati
l'ho chiamata *intersection_output*.

Ho scritto quindi questo TRIGGER:

> CREATE OR REPLACE FUNCTION intersection_function() RETURNS trigger AS
> $BODY$
> BEGIN
> SELECT
> a.idb,
> b.idp,
> ST_Intersection(a.geom, b.geom) as geom
> FROM
> buffer AS a,
> polygons AS b
> WHERE ST_Intersects(a.geom, b.geom);
> RETURN NEW;
> END;
> $BODY$
> LANGUAGE 'plpgsql';
> CREATE TRIGGER make_intersection
> AFTER INSERT ON intersection_output
> FOR EACH ROW EXECUTE PROCEDURE intersection_function();


Mi aspetto quindi che ogni volta che creo un poligono, ad esempio con QGIS,
nella tabella *buffer*, esso venga intersecato con il o i poligoni,
presenti in *polygons*, che vengono coperti dall'area di buffer ed il
risultato di questa intersezione deve essere scritto in
*intersection_output*.

Il problema che riscontro è che la tabella delle intersezioni resta sempre
vuota nonostante sia le geometrie di buffer che di polygons siano in 4326.

Sicuramente sbaglio io qualcosa ma non mi è chiaro dove.


____
[1] http://www.postgresqltutorial.com/creating-first-trigger-postgresql/

*ing.Massimiliano Moraca*
*Analisi, progettazione e sviluppo di soluzioni GIS e WebGIS*
*P.IVA*: 08700081212
*CELL*: 333 59 49 583 (*lun - ven 9.00 - 18.00*)
*WEB*: www.massimilianomoraca.it
* Attività svolta ai sensi della Legge 4 del 14 gennaio 2013, art.1*


Maggiori informazioni sulla lista Gfoss