[Gfoss] Viste in Spatialite

a.furieri a lqt.it a.furieri a lqt.it
Lun 4 Giu 2018 18:17:51 CEST


On Mon, 4 Jun 2018 17:55:06 +0200, Alessandro Ciali wrote:
> Ciao a tutti, sto riscontrando un comportamento assurdo con le viste
> SpatiaLite. Ho creato una vista in un DB SpatiaLite tramite il DB 
> manager
> di QGIS, unendo un file puntuale con una tabella tramite un semplice 
> join
> con corrispondenza 1 a 1. purtroppo quando carico la vista in QGIS 
> 2.14.17
> mi succedono cose strane:
> - se clicco con l'identify su una feature, mi vengono restituiti i 
> valori
> corretti per i vari campi, ma non si apre la form, pur avendo 
> spuntato la
> voce "auto open form" e individuando una sola feature
> - se cerco di selezionare una o più features, mi vengono selezionati 
> anche
> oggetti al di fuori del rettangolo di selezione, e magari non tutti 
> gli
> oggetti all'interno del riquadro vengono selezionati
>
> Il DB spatiaLite l'ho creato da QGIS (create new SpatiaLite Layer), 
> la
> vista dal DB manager. Le tabelle spaziali e quelle senza geometrie 
> sembrano
> non avere nessun problema, vengono caricate e visualizzate 
> correttamente in
> QGIS.
>
> tengo a precisare che la stessa procedura (ovviamente la query 
> necessita di
> piccole correzioni) in Postgres mi restituisce viste perfettamente
> funzionanti
>
> Qualcuno si è imbattuto in questo problema? Sbaglio qualcosa io o è 
> un
> problema di QGIS/SpatiaLite?
>

ciao Alessandro,

le Spatial Views di SpatiaLite hanno dei requisiti ben precisi e molto
stringenti; se non li rispetti il caos e' assicurato.

1. la colonna Geometry della Spatial View deve corrispondenre 
esattamente
    ad una colonna Geometry di una delle Spatial Tables subordinate.
2. non sono ammesse funzioni SQL che possano alterare in qualsiasi
    modo la geometria originaria (in altre parole: ST_Transform,
    ST_Union, ST_Difference, ST_Buffer etc sono sempre rigorosamente
    proibite in una Spatial View.
3. la Spatial View deve necessariamente contenere una colonna di nome
    ROWID, che deve coincidere esattamente con il ROWID della Spatial
    Table che fornisce la Geometry.

tutti queste restrizioni sono imposte dalla particolare struttura
dello Spatial Index di SpatiaLite, che non ha nulla a che vedere
con quella adottata da PostGIS.
anche se entrambi producono risultati funzionali praticamente
identici, l'architettura interna e' totalmente diversa.
se la Spatial View non e' stata correttamente definita finisce
che il suo Spatial Index di supporto "impazzisce", con risultati
assolutamente paradossali ed apparentemente sconcertanti.

dal quadro che ci fornisci, questo parrebbe proprio il tuo caso;
molto verosimilmente la tua Spatial View si e' presa un po' troppa
liberta' con lo Spatial Index, ed ora funziona in modo del tutto
inattendibili (piu' o meno a casaccio).

hint: prova a condividere la tua struttura dati, ed in particolare:
- gli statements CREATE TABLE della/e Table(s) che utilizzi nella
   tua Spatial View
- lo statement CREATE VIEW che hai usato
- la registrazione della tua Spatial View che hai inserito nella
   meta-tavola "views_geometry_columns"

se chiarisci meglio tutti questi aspetti potro' darti un parere
piu' mirato e meglio argomentato, e magari anche qualche suggerimento
utile per uscire dal pasticcio.

ciao Sandro





Maggiori informazioni sulla lista Gfoss