[Gfoss] QspatiaLite 5.0.3

Luca Sigfrido Percich sigfrido a tiscali.it
Gio 26 Gen 2012 14:21:09 CET


Ciao Sandro,

grazie per i chiarimenti!

Se dopo aver caricato la vista regioni in QGIS (occhio che nel tuo
codice usi 'province' invece di 'regioni' nella insert in
views_geometry_columns come nome della view) visualizzi le proprietà del
layer, noterai che la colonna nro_prov ha Type vuoto.

Invece OGRINFO funziona correttamente.
ogrinfo -so istat.sqlite regioni
ti dirà, in fondo, nro_prov: Integer (0.0)

Se provi a modificare la vista aggiungendo un cast:
...
  r.nome_reg AS nome_reg, cast(Count(*) as float) AS nro_prov, 
...

QGIS risponde sempre con type vuoto per n_prov, ogrinfo invece dice
giustamente:

nrro_prov: real(0.0)

Ma a parte questo la tavola degli attributi del layer si vede
correttamente.

L'altro errore riportato in precedenza (i valori dei campi "ERROR") era
nel mio caso dovuto ad un non corretto popolamento di
views_geometry_columns (che tra l'altro ho scoperto ora essere case
sensitive, ovvero se metti geometry invece di GEOMETRY la vista non
viene elencata in QGIS).

Grazie ancora e buon lavoro

Sig


Il giorno gio, 26/01/2012 alle 12.57 +0100, a.furieri a lqt.it ha scritto:
> Giusto un paio di chiarimenti di base per quanto
> riguarda la corretta gestione delle Spatial Views 
> di SpatiaLite; basati su di un esempio facilmente
> replicabile, cosi' tutto e' piu' chiaro (spero ...)
> useremo spatialite_gui per predisporre il DB.
> 
> 
> 
> a) importiamo gli SHP dei confini amministativi ISTAT:
> 
> http://www.istat.it/it/files/2011/04/reg2011.zip
> http://www.istat.it/it/files/2011/04/prov2011.zip
> n.b.: usiamo regioni e province perche' sono meno
> numerose, e la query girera' snella e veloce senza 
> richiedere ottimizzazioni complicate.
> 
> 
> 
> b) a questo punto creiamo la VIEW:
>    
> CREATE VIEW regioni AS
> SELECT r.ROWID AS ROWID, r.cod_reg AS cod_reg, 
>   r.nome_reg AS nome_reg, Count(*) AS nro_prov, 
>   r.Geometry AS Geometry
> FROM reg2011 AS r
> JOIN prov2011 AS p ON (p.cod_reg = r.cod_reg)
> GROUP BY r.cod_reg;
> 
> *** un paio di punti da notare con cura:
> *** SQLite esige che tutte le colonne della VIEW
> *** abbiano un nome esplicito [.. AS cod_reg]
> *** puo' sembrare sciocco, ma solo in questo modo 
> *** si ottiene una definizione "pulita".
> ***
> *** ed occorre necessariamente inserire (esplicitamente)
> *** il riferimento al ROWID della tavola che contiene
> *** la Geometria (altrimenti SpatiaLite non sara' poi
> *** in grado di utilizzare lo Spatial Index, se esiste)
> 
> 
> 
> c) infine occorre registrare la VIEW nella apposita tavola 
>    di metadati (views_geometry_columns):
> 
> INSERT INTO views_geometry_columns
>   (view_name, view_geometry, view_rowid, 
>    f_table_name, f_geometry_column)
> VALUES ('province', 'Geometry', 'ROWID', 
>   'reg2011', 'Geometry');
> 
> 
> 
> d) fatto: potete finalmente aprire QGIS e connettere la 
>    VIEW "regioni" che apparira' come qualsiasi altro layer.
> 
> ====
> 
> per quanto mi riguarda personalmente non ho idea se i vari 
> plugin per QGIS come Qspatialite e/o DB Manager implementino 
> il supporto che consente di definire nel modo corretto le 
> Spatial Views di SpatiaLite.
> eventualmente contattate i rispettivi sviluppatori e/o 
> aprite un ticket su QGIS.
> 
> ciao Sandro



Maggiori informazioni sulla lista Gfoss