QGIS: selezionare feature partendo dalle relazioni 1:M

Il titolo di questo articolo è molto esplicativo e rappresenta, al tempo stesso, una lacuna presente nel GIS Desktop Open Source più famoso al mondo, QGIS.

Questa lacuna è legata al fatto che necessita l’attributo geometrico (feature) affichè un GIS  possa effettuare una selezione con visualizzazione a schermo (per non parlare delle tematizzazioni ed etichettature), ma non tutte i layer sono dotati di geometria e spesso (per mia esperienza diretta) per arricchire un layer, con altre informazioni, si utilizzano tabelle in join o in relazione (1:M), quest’ultime tabelle sono quasi sempre senza geometria.

Per spiegare meglio l’utilità di una tale caratteristica farò un piccolo esempio chiarificatore:

supponiamo di effettuare una mappatura e censimento della PI (pubblica illuminazione ) di un Comune: un layer puntuale (con geometria, detto padre) raccoglierà tutte le informazioni sul lampione (posizione, altezza, tipologia, materiale, foto ecc…); un secondo layer (senza geometria, detto figlio) raccoglierà tutte le informazioni sulle sorgenti luminose presenti in ogni lampione ( possono essere 1 o M sorgenti) come lunghezza sbraccio, altezza sorgente, tipo lampada, potenza ecc…:

DSCN2001

questa seconda tabella (figlio) verrà messa in relazione con il primo layer (padre).

Fin qui niente di difficile o impossibile; il problema sorge quando si ha la necessità di interrogare la tabella (figlio) e di visualizzare il risultato su schermo, cioè:

supponiamo che volessi selezionare tutti i lampioni (tabella padre) che hanno una potenza della lampada maggiore di 80 Watt (questa info si trova nella tabella figlia); oppure volessi sapere quanti lampioni montano lampade SAP oppure una combinazione di questi due dati; attualmente NON è possibile farlo nativamente in QGIS in quanto NON è possibile selezionare e visualizzare layer senza geometria.

Dopo questa lunga premessa, vediamo qualche soluzione:

  1. prima soluzione ideata e realizzata da Andrea Borruso: tramite una azione Python sulla tabella figlia; realizza anche lo zoom alla selezione;
  2. seconda soluzione ideata e realizzata da Salvatore Larosa: tramite una macro da usare a livello di progetto; è necessario definire le relazioni al livello di progetto; attivare le macro; copiare ed incollare lo script nella sezione macro del progetto ;
  3. terza soluzione realizzata da Luca Mandolesi: è un plugin (sperimentale) che si basa sullo script di Larosa e basti pigiare un semplice tasto dopo aver definito le relazioni.

video tutorial:

azione Python:

 

Macro:

Plugin:

 


Note finali: Questa caratteristica è presente in altri GIS Desktop meno famosi o con licenza; questo articolo ha un duplice obiettivo: primo, quello di evidenziare la lacuna; secondo, di sensibilizzare gli sviluppatori QGIS in modo da implementarla, a livello nativo, quanto prima.

Un grosso ringraziamento a quanti si sono prodigati nella realizzazione delle soluzioni sopra elencate: Andrea Borruso, Salvatore Larosa, Luca Mandolesi

Ringrazio anche Maurizio Fodera che ha ribadito il problema e mi ha invogliato nella ricerca di una soluzione!!!


il plugin è nella repository ufficiale di QGIS

Annunci

2 pensieri su “QGIS: selezionare feature partendo dalle relazioni 1:M

Rispondi

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

Logo WordPress.com

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

Foto Twitter

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

Foto di Facebook

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

Google+ photo

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

Connessione a %s...