[Gfoss] Aggregare operazioni con SQL

Totò Fiandaca pigrecoinfinito a gmail.com
Mar 24 Ott 2017 16:27:27 CEST


Ciao a tutti,
volevo ringraziare Furieri per la condivisione dello script.

Mi sono permesso di creare un gist [0], perchè la condivisione è alla base
di tutto!!!

Ho testato lo script su spatialite_gui, funziona benissimo; basta copiarlo
ed incollarlo!!!

saluti

[0] https://gist.github.com/pigreco/30eaba334b8b20f23cd9d64e049c6926

Il giorno 24 ottobre 2017 15:29, Massimiliano Moraca <
massimilianomoraca a gmail.com> ha scritto:

> Grazie mille Sandro, ho dato una attenta lettura ad entrambe le mail ma mi
> servirà un po' per assimilare gli script della seconda :D
> Per il "battesimo" della tabella hai ragione ma volevo cercare di mantenere
> inalterati i nomi degli shp presi dal PTR della Campania da cui provengono
> i vettori del geodatabase di prova.
>
> ____________
>
> Massimiliano Moraca <http://massimilianomoraca.it/>
>
> Il giorno 24 ottobre 2017 14:56, <a.furieri a lqt.it> ha scritto:
>
> > On Tue, 24 Oct 2017 14:53:44 +0200, a.furieri a lqt.it wrote:
> >
> >> vedi l'esempio allegato (che si basa sul tuo DB campione).
> >>
> >>
> > sorry, pare che la mailing lista non accetta neppure 3KB
> > di allegato.
> >
> > copio lo SQL script a seguire nel corpo della mail
> > S
> >
> > --------------------------------------------------------
> > --
> > -- 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);
> >
> > _______________________________________________
> > Gfoss a lists.gfoss.it
> > http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
> > Questa e' una lista di discussione pubblica aperta a tutti.
> > I messaggi di questa lista non hanno relazione diretta con le posizioni
> > dell'Associazione GFOSS.it.
> > 801 iscritti al 19/07/2017
> >
> _______________________________________________
> Gfoss a lists.gfoss.it
> http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
> Questa e' una lista di discussione pubblica aperta a tutti.
> I messaggi di questa lista non hanno relazione diretta con le posizioni
> dell'Associazione GFOSS.it.
> 801 iscritti al 19/07/2017
>



-- 
*Ing. Salvatore Fiandaca*
*mobile*.:+39 327.493.8955
*m*: *pigrecoinfinito a gmail.com <pigrecoinfinito a gmail.com>*
*C.F*.: FNDSVT71E29Z103G
*P.IVA*: 06597870820
*blog:*
* https://pigrecoinfinito.wordpress.com/
<https://pigrecoinfinito.wordpress.com/> FB: Co-admin
- https://www.facebook.com/qgis.it/ <https://www.facebook.com/qgis.it/>**
<https://www.facebook.com/qgis.it/> *
*FB: moderatore - **https://www.facebook.com/groups/GisItalia/
<https://www.facebook.com/groups/GisItalia/>**
<https://www.facebook.com/groups/GisItalia/> *
*TW:  <http://goog_95411464>**https://twitter.com/totofiandaca
<https://twitter.com/totofiandaca>*

43°51'0.54"N  10°34'27.62"E - EPSG:4326

“Se la conoscenza deve essere aperta a tutti,
perchè mai limitarne l’accesso?”
R. Stallman

Questo documento, allegati inclusi, contiene informazioni di proprietà di
FIANDACA SALVATORE e deve essere utilizzato esclusivamente dal destinatario
in relazione alle finalità per le quali è stato ricevuto. E' vietata
qualsiasi forma di riproduzione o divulgazione senza l'esplicito consenso
di FIANDACA SALVATORE. Qualora fosse stato ricevuto per errore si prega di
informare tempestivamente il mittente e distruggere la copia in proprio
possesso.


Maggiori informazioni sulla lista Gfoss