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*
_______________________________________________
[email protected]
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
_______________________________________________
[email protected]
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