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@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