[Gfoss] ST_Union e PostGIS

a.furieri a lqt.it a.furieri a lqt.it
Mer 13 Dic 2017 18:18:38 CET


On Wed, 13 Dec 2017 17:46:13 +0100, Massimiliano Moraca wrote:
> Da premettere che non ho usato(ancora) nessun plugin o tool di QGIS
> per manipolare il db.
>
> I TRIGGER (di cui so 0!) potrebbero ovviare alla creazione delle 
> view?
>

si e no: tu hai due problemi distinti e separati.
1. far girare le cose sotto SQL; e qua la tua View (proprio quella
    che hai gia' realizzato) potrebbe risultare decisamente utile.
2. riuscrire a convincere QGIS che deve visualizzare determinati
    dati; qua scattano tutta una serie di vincoli ulteriori, e la
    presenza di una aggregata crea un sacco di problemi.

insomma, detto con altre parole, a te serve gestire due "layers":
a. il primo e' un vero e proprio layer/tavola, e su cui andrai a
    fare INSERT/UPDATE/DELETE
b. il secondo rappresenta semplicemente l'aggregazione del primo,
    ad eclusivo beneficio dei processi di visualizzazione di QGIS.
    definire alcuni opportuni Triggers potrebbe consentirti di
    rendere totalmente automatico il processo di corretta
    sincronizzazione tra le due tavole.


> Mi spiego meglio. Mi sono rassegnato, per ora, a creare le tabelle e
> non le view: un trigger potrebbe fare in modo che aggiornata la
> tabella principale(ammesso si possa fare questo distinguo) si attivi
> automaticamente l'aggiornamento di quella "correlata" all'area
> aggiornata?
>

esattamente: e' proprio cosi'.
se vuoi entrare piu' in profondita' ti consiglio di studiarti
il codice SQL dei triggers a supporto dello Spatial Index.

prova a spulciare con SpatiaLite GUI una qualsiasi tavola con
geometria e Spatial Index; vedrai che ha associati tre triggers
il cui nome sara' "gii_<tavola>_<geom>" e "giu_<tavola>_<geom>"

come vedrai, il trigger "gii_" intercetta tutte le INSERT sulla
tavola-madre, ed aggiorna coerentemente lo Spatial Index.
invece "giu_" intercetta tutte le UPDATE (ma solo nel caso in
cui la geometria sia realmente variata), ed anche in questo
caso aggiorna lo SpatialIndex.

ovviamente il tuo caso richiedera' un approccio diverso, ma
l'idea di fondo e' identica; ogni evento che tocca la
tavola-madre dovra' riflettersi automaticamente sull'altra
tavola.


> Come ho scritto stavo provando con i filtri di QGIS, ma forse Sandro
> quando parlavi dell'approccio ingannevole di QGIS ti riferivi a
> questo?
>

mi riferivo semplicemente alla mia esperienza diretta maturata sulla
mailing list di spatialite.
per il 90% degli utenti (power users Spatial SQL, sviluppatori
Java/C++/Python etc) il problema delle Spatial Views e delle Views
"updatable" non si pone proprio, e' qualcosa che non interessa o
che al massimo viene percepito come un'ardita stravaganza tecnica.
tutte le domande relative a questi due argomenti arrivano solo
ed esclusivamente dagli utenti di qgis.
pare abbastanza ovvio che e' una specie di "bisogno indotto" ;-)

ciao Sandro


Maggiori informazioni sulla lista Gfoss