Spatialite, Come combinare create view e cointains in un unico SQL?

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Spatialite, Come combinare create view e cointains in un unico SQL?

Luca Moiana

Ciao a tutti,

in Spatialite, ho tre tabelle, di cui due spaziali, una punti e una poligoni:

a)CASSETTE
-----------------------------------
| cassetteid | strno | anno |
-----------------------------------

b)SOSTEGNI (punti)
-------------------------------------
| sostegnoid | strno | geom |
-------------------------------------

c)REGIONI (poligoni)
-----------------------
| regione | geom |
-----------------------

Attualmente, collego CASSETTE e SOSTEGNI così da avere le coordinate di CASSETTE:


CREATE VIEW "cassette_view" AS
SELECT "a"."strno" AS "strno", "a"."anno" AS "anno"
FROM "cassette_nido" AS "a"
JOIN "sostegni" AS "b" USING ("strno")

Poi, una seconda query, per attribuire la regione di appartenenza ai punti:

update cassette_view set regione=(select regione from regioni
where Contains(regione.geom, cassette_view.geom));

Esiste un modo per combinare le due operazioni in un solo SQL?

grazie mille

_______________________________________________
[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.
808 iscritti al 07/03/2017
Reply | Threaded
Open this post in threaded view
|

Re: Spatialite, Come combinare create view e cointains in un unico SQL?

Andrea Peri
hai verificato che un tale update ti funziona in spatialite/sqlite ?

Il 12 Lug 2017 14:13, "Luca Moiana" <[hidden email]> ha scritto:

>
> Ciao a tutti,
>
> in Spatialite, ho tre tabelle, di cui due spaziali, una punti e una
> poligoni:
>
> a)CASSETTE
> -----------------------------------
> | cassetteid | strno | anno |
> -----------------------------------
>
> b)SOSTEGNI (punti)
> -------------------------------------
> | sostegnoid | strno | geom |
> -------------------------------------
>
> c)REGIONI (poligoni)
> -----------------------
> | regione | geom |
> -----------------------
>
> Attualmente, collego CASSETTE e SOSTEGNI così da avere le coordinate di
> CASSETTE:
>
>
> CREATE VIEW "cassette_view" AS
> SELECT "a"."strno" AS "strno", "a"."anno" AS "anno"
> FROM "cassette_nido" AS "a"
> JOIN "sostegni" AS "b" USING ("strno")
>
> Poi, una seconda query, per attribuire la regione di appartenenza ai punti:
>
> update cassette_view set regione=(select regione from regioni
> where Contains(regione.geom, cassette_view.geom));
>
> Esiste un modo per combinare le due operazioni in un solo SQL?
>
> grazie mille
>
> _______________________________________________
> [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.
> 808 iscritti al 07/03/2017
_______________________________________________
[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.
808 iscritti al 07/03/2017
Reply | Threaded
Open this post in threaded view
|

Re: Spatialite, Come combinare create view e cointains in un unico SQL?

a.furieri
In reply to this post by Luca Moiana
On Tue, 11 Jul 2017 15:35:28 +0000, Luca Moiana wrote:

> Ciao a tutti,
>
> in Spatialite, ho tre tabelle, di cui due spaziali, una punti e una
> poligoni:
>
> a)CASSETTE
> -----------------------------------
> | cassetteid | strno | anno |
> -----------------------------------
>
> b)SOSTEGNI (punti)
> -------------------------------------
> | sostegnoid | strno | geom |
> -------------------------------------
>
> c)REGIONI (poligoni)
> -----------------------
> | regione | geom |
> -----------------------
>
> Attualmente, collego CASSETTE e SOSTEGNI così da avere le coordinate
> di CASSETTE:
>
>
> CREATE VIEW "cassette_view" AS
> SELECT "a"."strno" AS "strno", "a"."anno" AS "anno"
> FROM "cassette_nido" AS "a"
> JOIN "sostegni" AS "b" USING ("strno")
>
> Poi, una seconda query, per attribuire la regione di appartenenza ai
> punti:
>
> update cassette_view set regione=(select regione from regioni
> where Contains(regione.geom, cassette_view.geom));
>
> Esiste un modo per combinare le due operazioni in un solo SQL?
>

ciao Luca,

vedo che ora stai postando in italiano i medesimi quesiti
che nei giorni scorsi avevi gia' posto in inglese sulla ML
di spatialite ricevendo diverse risposte pertinenti e ben
calibrate.

vado dritto sparato al nocciolo del problema; quello che
ci stai chiedendo non ha nessun senso.
Le VIEWs di SQLite sono rigorosamente read-only, ragion
per cui non possono mai supportare le operazioni di UPDATE
(a meno di avventurarsi sulla magia nera dei triggers, ma
e' un  discorso spinoso che ci porterebbe troppo lontano).

credo di capire che in effetti a te interessa un'unica cosa;
creare una View che raggruppi tutti assieme Cassette,
Sostegni e Regioni.
se questa mia interpretazione e' corretta, lascia perdere
l'UPDATE che non c'entra assolutamente nulla; quello che
ti serve e' una normalissima View come la seguente:

CREATE VIEW cassette_view AS
SELECT a.strno AS strno, a.anno AS anno, c.regione
FROM cassette_nido AS a
JOIN sostegni AS b USING (strno)
JOIN regioni AS c ON (ST_Contains(c.geom, b.geom) = 1);


naturalmente una query di questo tipo non potra' girare
in modo fluido ed efficiente, a meno che tu non abbia un
numero molto scarso di features da gestire.
verosimilmente occorrera' aggiungere uno Spatial Index
per imprimere un pizzico di efficienza.
... ma di questo ne riparleremo eventualmente dopo che
avrai finalmente chiarito cosa ti serve realmente.

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.
808 iscritti al 07/03/2017