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
  • Select an option

  • Save aborruso/32ae4e667d3e14971e720b021d3aba6e to your computer and use it in GitHub Desktop.

Select an option

Save aborruso/32ae4e667d3e14971e720b021d3aba6e to your computer and use it in GitHub Desktop.

Revisions

  1. @pigreco pigreco revised this gist Oct 24, 2017. 1 changed file with 2 additions and 0 deletions.
    2 changes: 2 additions & 0 deletions che_bello.sql
    Original file line number Diff line number Diff line change
    @@ -15,6 +15,8 @@

    -- 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
    --
  2. @pigreco pigreco created this gist Oct 24, 2017.
    82 changes: 82 additions & 0 deletions che_bello.sql
    Original file line number Diff line number Diff line change
    @@ -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);