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

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

  1. Salve, questo tipo di selezione è possibile anche mettendo in relazione anche due layer con feature puntuali? perché la relazione sono riuscito a farla, posso visualizzarla nella tabella attributi, ma non riesco a fare la selezione, e visualizzarla a schermo.
    ho provato ad utilizzare la macro e il plugin Select By Relationship

    "Mi piace"

  2. Per l’ennesima volta ho dovuto rileggermi il tuo post per ricordarmi le soluzioni da adottare per selezionare le feature da una relazione 1 a M. A questo punto mi chiedo: ma se effettivamente questa necessità si ripresenta spesso (e non credo solo a me o a te) e, visto che le soluzioni a questa “lacuna” sono già belle che pronte (vedi Borruso, Larosa e Mandolesi) …come mai ancora non si implementa QGIS con un “pulsantino” ad hoc che ci permetta di fare queste operazioni di routine?

    Piace a 2 people

    1. Temo di dovermi rimangiare il mio ultimo commento a questo post. Ho appena fatto caso in QGIS 3.6 (non so se ciò che vado dicendo era già presente nelle versioni precedenti) che aprendo il pannello delle proprietà della Tabella “figlio” (per capirci, in genere, il foglio elettronico relazionato con lo shape file “padre”) nelle opzioni “Tipo widget” c’è la voce, da spuntare, “Per l’identificazione sulla mappa”. Ora è tardi, è ora di cena, e non ho tempo per approfondire la questione ma, dal primo tentativo che ho fatto, sembrerebbe che attivando questa funzione, QGIS ora faccia proprio quello che mi auspicavo nel mio precedente ultimo commento a questo post.

      Piace a 1 persona

Lascia un commento

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