@@ -0,0 +1,82 @@
-- Thread: http://lists.gfoss.it/pipermail/gfoss/2017-October/042175.html
-- per eseguire lo SQL script devi semplicemente:
-- aprire una shell dei comandi (finestra nera)
-- posizionarti sulla cartella dove hai messo il tuo DB "campania_test.sqlite"
-- ed infine eseguire questo comando:
-- spatialite napoli.sqlite <moraca.sql
-- vedrai che alla fine ti troverai con un nuovo DB di
-- nome "napoli.sqlite" che contiene esclusivamente
-- gli elementi di pertinenza del Comune di Napoli.
-- IN ALTERNATIVA ALLA SHELL, USARE spatialite_gui con spatialite 4.4.0 RC0
-- LINK risorsa: http://www.gaia-gis.it/gaia-sins/windows-bin-amd64-test/
-- NB: il buffer è fissato a 1000 m
-- abbiamo appena creato un nuovo DB "MAIN", che e' ancora completamente vuoto.
-- ora "attacchiamo" al "MAIN" il DB "vecchio" che contiene i dati da importare
--
ATTACH DATABASE ' ./campania_test.sqlite' AS vecchio;
--
-- ora utilizziamo la funzione CreateClonedTable per creare le tavole
-- nel "MAIN" ricopiando tal quali le definizioni corrispondenti
-- dichiarate nel DB "vecchio".
-- NOTA: cosi' siamo sicuri che verrano riprodotte fedelmente le
-- definizione dalla Primary Key, degli Spatial Index etc
--
SELECT CreateClonedTable(' vecchio' , ' comuni' , ' comuni' , 1 );
SELECT CreateClonedTable(' vecchio' , ' 2_rete_ferroviaria' , ' 2_rete_ferroviaria' , 1 );
SELECT CreateClonedTable(' vecchio' , ' complessi_idrogeologici' , ' complessi_idrogeologici' , 1 );
--
-- ora andiamo a copiare il solo Comune di Napoli dal "vecchio" al "MAIN"
--
INSERT INTO main .comuni (id, pk2_28, campan2_id, comune, pr, geom)
SELECT id, pk2_28, campan2_id, comune, pr, geom
FROM vecchio .comuni
WHERE comune = ' Napoli' ;
--
-- ora copiamo gli elementi ferroviari
-- in questo caso dovremo calcolare l'intersezione tra le
-- geometrie da importare ed il Buffer basato sul Comune.
-- in questo caso NON utilizzeremo lo Spatial Index.
--
-- nota: occorre un cast esplicitio al tipo MultiLinestring,
-- perche' le intersezioni saranno facilmente Linestring
-- elementari.
--
-- nota #2: battezzare una tavola con un nome che inizia con
-- una cifra e' assolutamente indecente :-PACKAGE
-- vedi tutta la marea di double quoting che implica per
-- rendere legale il nome secondo la sintassi SQL
--
INSERT INTO main." 2_rete_ferroviaria" (id, pk2_72, tipo, opzioni, descrizion, geom)
SELECT v .id , v .pk2_72 , v .tipo , v .opzioni , v .descrizion ,
CastToMultiLinestring(ST_Intersection(v .geom , n .geom ))
FROM vecchio." 2_rete_ferroviaria" AS v,
(SELECT ST_Buffer(geom, 1000 .0 ) AS geom FROM main .comuni ) AS n
WHERE ST_Intersects(v .geom , n .geom ) = 1 ;
--
-- ora infine copiamo i complessi idrogeologici
-- piu' o meno e' come il caso precedente, ma questa volta
-- utilizziamo anche lo Spatial Index.
--
-- note: dobbiamo fare un cast al tipo MultiPolygon perche'
-- spesso le intertsezioni saranno Poligoni semplici.
--
INSERT INTO main .complessi_idrogeologici (id, pk2_26, stringa, area, perimeter,
id_tipo_co, tipo_compl, id_tipo_fo, id_tipo_pe, id_grado_p, note, geom)
SELECT v .id , v .pk2_26 , v .stringa , v .area , v .perimeter , v .id_tipo_co , v .tipo_compl ,
v .id_tipo_fo , v .id_tipo_pe , v .id_grado_p , v .note ,
CastToMultiPolygon(ST_Intersection(v .geom , n .geom ))
FROM vecchio .complessi_idrogeologici AS v,
(SELECT ST_Buffer(geom, 1000 .0 ) AS geom FROM main .comuni ) AS n
WHERE ST_Intersects(v .geom , n .geom ) = 1 AND v .ROWID IN (
SELECT rowid FROM SpatialIndex
WHERE f_table_name = ' DB=vecchio.complessi_idrogeologici'
AND search_frame = n .geom );