[Gfoss] Viste in Spatialite

Alessandro Ciali alessandro.ciali a gmail.com
Mar 5 Giu 2018 12:17:01 CEST


Ciao Sandro e ciao a tutti,
la spatial table che ho usato per la geometria funziona correttamente, l'ho
importata da uno shape in un db spatialite direttamente da DB manager in
QGIS.
La query che ho usato per creare la view è questa:

SELECT p.the_geom, s.pkey_spu, s.ubicazione_prov, s.ubicazione_com,
s."ID_SPU", s."coord_X", s."coord_Y", s.mod_identcoord, s.desc_modcoord,
s.quota_slm, s.modo_quota, s.data_sito, s.note_sito
FROM "Sito_puntuale" s
LEFT JOIN ind_pu p ON p."ID_SPU" = s."ID_SPU"

e utilizzando l'opzione "create a view" sempre su db manager, dando per
scontato che la registrasse correttamente.

Inoltre non mi è chiara una cosa al punto 3 della tua risposta: se la
spatial view deve contenere necessariamente un  ROWID che corrisponde al  ROWID
della spatial table, come posso costruire spatial views con relazioni di 1
a N fra spatial table e tabelle semplici? In questo caso i valori di ROWID
si duplicheranno e non saranno più univoci.

Ad ora non posso condividere il db perchè i dati non sono di mia proprietà,
in caso vedo di reperire qualcosa con dati di mio possesso.

Grazie ancora per l'aiuto

Il giorno 4 giugno 2018 18:17, <a.furieri a lqt.it> ha scritto:

> 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
>
>
>
> _______________________________________________
> 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.
> 796 iscritti al 28/12/2017




-- 
Alessandro Ciali


Maggiori informazioni sulla lista Gfoss