[Gfoss] Spatialite e spatial view

salve a tutti,

sto cercando di riprodurre quanto facevo già con postgis in spatialite.
Una cosa molto semplice ma stranamente non riesco nè con spatialite-gui ne da sql puro.
Voglio creare una spatial view di buffer di 1km attorno a punti che sono già nel DB.
Uso:

CREATE VIEW “pippo11” AS
SELECT “ROWID” AS “ROWID”, “name” AS “name”, ST_Buffer(“Geometry”,1000) AS “Geometry”
FROM “bus_stop”

Poi registro la view:

INSERT INTO views_geometry_columns (view_name, view_geometry, view_rowid, f_table_name, f_geometry_column)
VALUES (‘pippo11’, ‘geometry’, ‘rowid’, ‘bus_stop’, ‘geometry’)

Ma mi dice che la tabella è del tipo read-only
Dove sbaglio?
Grazie
P

···

Ing. Pierluigi De Rosa (PhD)
cel: 3497558268 / fax: 075 7823038
skype: pierluigi.derosa

Il 06/10/2015 14:57, pierluigi de rosa ha scritto:

Poi registro la view:
INSERT INTO views_geometry_columns (view_name, view_geometry,
view_rowid, f_table_name, f_geometry_column)
VALUES ('pippo11', 'geometry', 'rowid', 'bus_stop', 'geometry')
Ma mi dice che la tabella è del tipo read-only
Dove sbaglio?

se e' una vista, non e' una tabella.
no?
saluti.

--
Paolo Cavallini - www.faunalia.eu
QGIS & PostGIS courses: http://www.faunalia.eu/training.html

On Tue, 6 Oct 2015 14:57:45 +0200, pierluigi de rosa wrote:

salve a tutti,

sto cercando di riprodurre quanto facevo già con postgis in
spatialite.
Una cosa molto semplice ma stranamente non riesco nè con
spatialite-gui ne da sql puro.
Voglio creare una spatial view di buffer di 1km attorno a punti che
sono già nel DB.
Uso:

CREATE VIEW "pippo11" AS
SELECT "ROWID" AS "ROWID", "name" AS "name",
ST_Buffer("Geometry",1000) AS "Geometry"
FROM "bus_stop"

Poi registro la view:

INSERT INTO views_geometry_columns (view_name, view_geometry,
view_rowid, f_table_name, f_geometry_column)
VALUES ('pippo11', 'geometry', 'rowid', 'bus_stop', 'geometry')
Ma mi dice che la tabella è del tipo read-only
Dove sbaglio?

ciao Pierluigi,

non sbagli nulla; e' semplicemente che per definizione le Views
di SQLite sono sempre di tipo read-only.

se vuoi puoi anche trasformare una qualsiasi View di SQLite in
un oggetto dotato di piene capacita' read-write, ma in questo
caso pero' devi anche provvedere ad installare dei Triggers
che intercettino gli eventi INSERT, UPDATE e DELETE rimappandoli
nel modo piu' opportuno.

una spiegazione piu' completa e dettagliata la trovia qua:
https://www.gaia-gis.it/fossil/libspatialite/wiki?name=writable-view

se vuoi renderti la vita molto piu' semplice puoi usare
SpatiaLite-GUI che supporta un wizard "Query/View composer"
che e' in grado di generarti automaticamente tutti i Triggers
che servono per ottenere una Spatial View "updatable".

infine, nota bene:

INSERT INTO views_geometry_columns (view_name, view_geometry,
view_rowid, f_table_name, f_geometry_column)
VALUES ('pippo11', 'geometry', 'rowid', 'bus_stop', 'geometry')

questa notazione e' incompleta, ti stai mangiando una colonna;
la forma completa e' invece:
INSERT INTO views_geometry_columns (view_name, view_geometry,
    view_rowid, f_table_name, f_geometry_column, read_only)
VALUES ('pippo11', 'geometry', 'rowid', 'bus_stop', 'geometry', 1 | 0);

l'ultimo valore "read_only" e' proprio quello che QGIS usa
per stabilire se la tua View e' di tipo read-only oppure
read-write.
ovviamente se ti limiti a settare il valore "read_only=0" senza
installare correttamente tutti i Triggers di supporto QGIS
ti dara' un sacco di errori al primo tentativo che farai di
andare a fare qualche operazione di scrittura su quella View.

ciao Sandro