Skip to content

Instantly share code, notes, and snippets.

@aborruso
Forked from pigreco/che_bello.sql
Created October 25, 2017 10:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aborruso/32ae4e667d3e14971e720b021d3aba6e to your computer and use it in GitHub Desktop.
Save aborruso/32ae4e667d3e14971e720b021d3aba6e to your computer and use it in GitHub Desktop.
-- 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
-- by Alessandro FURIERI
-- 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);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment