[Gfoss] Intersezione layer multipli - spatialite

Giuseppe Patti gpatt a tiscali.it
Gio 19 Giu 2014 08:50:04 CEST


Lungi da me voler trasgredire la grammatica di SQL!

Con UNION ALL, la query che avevo in mente si semplifica notevolmente.

Grazie per la dritta, e complimenti ancora per l'ottimo lavoro fatto con 
Spatialite



Il 18/06/2014 12.11, a.furieri a lqt.it ha scritto:
> On Wed, 18 Jun 2014 11:45:28 +0200, Giuseppe Patti wrote:
>> Ciao a tutti.
>>
>> Ho creato un db spatialite contenente diversi layer di tipo polygon,
>> tutti nello stesso sistema di riferimento.
>> Vorrei chiedervi se ritenete sia possibile creare una query in grado
>> di eseguire l'intersezione tra un elemento specifico di un layer
>> (selezionato con where) e tutti gli altri layer senza dover richiamare
>> ciascuna coppia, ovvero se ho i layer A,B,C,D e scelgo un elemento di
>> A, vorrei evitare di chiamare le intersezioni A,B e A,C e A,D e poi
>> eseguire l'unione...in sostanza vorrei fare un "carotaggio" di tutti i
>> livelli.
>>
>
> SQL e' un linguaggio standard con precisi requisiti sontattici:
> uno di questi e' sicuramente che l'elenco completo delle
> tavole da interrogare quando si effettua una qualsiasi query
> deve sempre essere specificato in modo assolutamente esplcito.
>
> ergo: non e' sicuramente possibile sperare di potere avere qualche
> strumento "automagico" in grado di capire che una tavola deve essere
> confrontata con tutte le altre.
> si lavora sempre necessariamente coppia per coppia, specificandole
> una alla volta
>
> un possibile hint utile per semplificare.
> nulla vieta di usare una inner sub-query per aggregare piu' di una
> tavola in un singolo resultset; dopo di che si puo' usare quel
> resultset provvisorio all'interno di un'ulteriore query (outer query).
>
> qualcosa tipo questo (uso i dataset CC-BY del censimento ISTAT):
>
> SELECT 'com' AS object, nome, geom
> FROM comuni
> UNION ALL
> SELECT 'pro' AS object, nome, geom
> FROM province
> UNION ALL
> SELECT 'reg' AS object, nome, geom
> FROM regioni;
>
> questa prima query ti crea un elenco "piatto" con tutte le
> regioni, province e comuni (MultiPolygon).
> ora resta solo da inserire questo frammento come inner-query
> dentro ad una query piu' complessa.
> come "tavola guida" usero' gli Aeroporti (Point, sempre su
> base ISTAT CC-BY)
>
> SELECT a.sigla, a.nome, x.object, x.nome
> FROM aeroporti AS a
> JOIN (SELECT 'com' AS object, nome, geom
>       FROM comuni
>       UNION ALL
>       SELECT 'pro' AS object, nome, geom
>       FROM province
>       UNION ALL
>       SELECT 'reg' AS object, nome, geom
>       FROM regioni) AS x ON (ST_Intersects(a.geom, x.geom) = 1)
> WHERE a.sigla = 'PMO';
> ----------------------------------
> Falcone e Borsellino    com    Cinisi
> Falcone e Borsellino    pro    Palermo
> Falcone e Borsellino    reg    Sicilia
>
> ecco qua: in un sol colpo scopriamo che l'aeroporto
> PMO "Falcone e Borsellino" si trova nel comune di
> Cinisi, provincia di Palermo, regione Sicilia.
>
> ciao Sandro
>


Maggiori informazioni sulla lista Gfoss