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

a.furieri a lqt.it a.furieri a lqt.it
Mer 12 Lug 2017 15:01:08 CEST


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



Maggiori informazioni sulla lista Gfoss