QGIS perché non selezionare tramite SQL?

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

ecco alcuni modi per selezionare

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

selezione

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
QGIS e la selezione

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:

SQL tramite Virtual Layer: crea nuovo layer!!!!

I vantaggi di poter selezionare tramite SQL sarebbero importanti:

  1. didattica: SQL è un linguaggio utilizzato in tutti i GIS e non solo;
  2. semplicità: il linguaggio SQL è un linguaggio basato sul paradigma dichiarativo;
  3. 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:

  1. per modificare gli attributi alfanumerici;
  2. per modificare la geometria (esempio correzione topologica);
  3. calcoli vari.

Riferimenti:

Ringraziamenti:

Pubblicità

2 pensieri su “QGIS perché non selezionare tramite SQL?

  1. 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!

    Piace a 1 persona

    1. 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"

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.