In QGIS esistono vari modi per selezionare feature ma non quello tramite SQL, perché non implementarlo??

Per selezione intendo la possibilità di selezionare, in una tabella, una serie di righe che soddisfano una espressione (anche spaziale).

Ecco un esempio
due layer (comuni_rt e fiume_arno): selezionare i comuni – uno per ogni provincia, che contengono il tratto più lungo del fiume Arno.
Usando gli strumenti di processing di QGIS e in particolare l’algoritmo Selezione per espressione, l’espressione da usare è:
array_first(
array_sort(
array_filter(
array_agg(
length(intersection(geometry(get_feature( 'fiume_arno','nome','ARNO')), $geometry)), "cod_prov"), -- calcola lunghezza
@element is not null -- esclude i valori NULL
), ascending:=false) ) -- ordina in modo ascendente
=
length(intersection(geometry(get_feature( 'fiume_arno','nome','ARNO')), $geometry)) -- calcola lunghezza
Allo stesso risultato si perviene usando SQL e in particolare questa query spaziale:
SELECT cod_prov, c.geometry as geom
FROM fiume_arno f, comuni_rt c
WHERE st_intersects (c.geometry, f.geometry) =1
GROUP BY 1
HAVING MAX (st_length(st_intersection (c.geometry, f.geometry)));
ma NON crea una selezione, crea una nuova tabella (un nuovo layer) con le sole righe che soddisfano la query stessa:
I vantaggi di poter selezionare tramite SQL sarebbero importanti:
- didattica: SQL è un linguaggio utilizzato in tutti i GIS e non solo;
- semplicità: il linguaggio SQL è un linguaggio basato sul paradigma dichiarativo;
- documentazione: è completa e si trova facilmente nel web;
Per scrivere l’espressione (di sopra) usata in QGIS ho dovuto sudare parecchio (per questo caso specifico molto complesso)
Perché è importante selezionare rimanendo nella stessa tabella:
- per modificare gli attributi alfanumerici;
- per modificare la geometria (esempio correzione topologica);
- calcoli vari.
Riferimenti:
Ringraziamenti:
Condivido pienamente l’idea di implementare SQL in Qgis, magari anche una console/shell simile a quella di python. Esiste il db-manager ma non è molto molto pratico come pgadminIII.
Anche sarebbe utile far aggiornare le librerie di spatialite5 in Qgis.
Personalmente trovo più efficace e vantaggioso lavorare a monte con Postgresql o spatialite con tabelle e viste rispetto a scrivere formule in Qgis.
Saluti e grazie per il sempre interessante blog!
"Mi piace"Piace a 1 persona
Ciao Simone e grazie per il commento.
Voglio precisare che in QGIS è possibile usare SQL in vari modi ma non per selezionare feature all’interno di una tabella.
Per quanto riguarda aggiornare spatialite 5 non è un problema degli sviluppatori di QGIS ma di spatialite5 che è ancora in versione beta.
saluti
"Mi piace""Mi piace"