-
-
Save aborruso/32ae4e667d3e14971e720b021d3aba6e to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- 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