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. Grazie in anticipo _______________________________________________ [hidden email] 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. 666+40 iscritti al 5.6.2014 |
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 _______________________________________________ [hidden email] 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. 666+40 iscritti al 5.6.2014 |
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, [hidden email] 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 > [hidden email] 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. 666+40 iscritti al 5.6.2014 |
Free forum by Nabble | Edit this page |