[Gfoss] Automatizzare l'intersezione con un TRIGGER

Massimiliano Moraca info a massimilianomoraca.it
Sab 28 Dic 2019 18:19:02 CET


Ora che mi ci fai ragionare effettivamente il target della INSERT è
sbagliato ma non dovrebbe essere nemmeno polygons che sono "statici" ma
buffer visto che traccio io i poligoni in buffer.
Comunque sostituendo polygons continuo ad ottenere una tabella vuota in
intersection_output mentre sostituendo con buffer ottengo questo messaggio
di errore nel momento in cui voglio salvare il poligono creato:

> Could not commit changes to layer buffer
> Errors: ERROR: 1 feature(s) not added.
>
> Provider errors:
> PostGIS error while adding features: ERRORE: la query non ha una
> destinazione per i dati restituiti
> HINT: Se vuoi scartare i risultati di una SELECT, utilizza PERFORM.
> CONTEXT: funzione PL/pgSQL intersection_function() riga 3 a istruzione SQL



*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*


Il giorno sab 28 dic 2019 alle ore 17:45 <a.furieri a lqt.it> ha scritto:

> Massimiliano,
>
> premetto che non ho nessuna familiarita' con i Triggers di PostreSQL,
> ma conosco molto bene quelli di SQLite.
>
> CREATE TRIGGER make_intersection AFTER INSERT ON intersection_output
>
> con la clausola AFTER INSERT di cui sopra tu stai chiedendo a Postgres
> di attivare il tuo trigger ogni volta che viene inserita una nuova
> riga nella tavola "intersection_output"
> ma da tutta la spiegazione precedente io ho capito che questa (come
> del resto dice il nome) e' appunto la tavola di output destinata a
> collezionare le intersezioni.
> sembra che tu le tue INSERT con QGIS le fai invece su "polygons",
> e di conseguenza quel trigger non scattera' mai.
>
> almeno a lume di naso quel trigger va definito come:
>
> CREATE TRIGGER make_intersection AFTER INSERT ON polygons
>
> ciao Sandro
>
>
> On Sat, 28 Dec 2019 17:21:17 +0100, Massimiliano Moraca wrote:
> > 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*
> > _______________________________________________
> > Gfoss a lists.gfoss.it
> > http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
> > Questa e' una lista di discussione pubblica aperta a tutti.
> > I messaggi di questa lista non hanno relazione diretta con le
> > posizioni dell'Associazione GFOSS.it.
> > 764 iscritti al 23/08/2019
>
> _______________________________________________
> Gfoss a lists.gfoss.it
> http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
> Questa e' una lista di discussione pubblica aperta a tutti.
> I messaggi di questa lista non hanno relazione diretta con le posizioni
> dell'Associazione GFOSS.it.
> 764 iscritti al 23/08/2019


Maggiori informazioni sulla lista Gfoss