QGIS: Tematizzare usando tabelle in relazione 1:m

In questo blog post rispondo a questo quesito:

Ho una serie di poligoni (sezioni di censimento) con associata, in una relazione 1:M, una tabella dove più righe corrispondono ad una sezione. Come posso tematizzare la mappa secondo i dati presenti nella tabella associata? ad esempio voglio in rosso tutti i poligoni nella cui tabella associata sia presente nel campo un determinato valore.

Peppe (un utente di questo blog)

La logica da usare e quindi la funzione da utilizzare è descritta in questo mio blog post del 2016, dove utilizzo tabelle in relazione 1:m per etichettare le regioni italiane (in relazione con le province).

Utilizzando gli stessi strati (regioni e province ISTAT) e creando una relazione tra loro (1:m) proviamo a tematizzare le regioni in funzione di attributi presenti nella tabelle province:

tematizzazione (categorizzata) ed etichettatura utilizzando il campo ‘SIGLA’ presente nel layer in relazione:

Regioni e province in relazione 1:M
  • per tematizzare (categorizzato) ed etichettare uso l’espressione:

relation_aggregate( ‘rel’,’concatenate’,”SIGLA”,’,’)

ecco un altro caso banale: supponiamo di voler tematizzare tutte le regioni che hanno, nella sigla delle provincia, la lettera A:

etichetto e tematizzo quelle regioni che hanno province con sigla contenente la A
  • per tematizzare (categorizzato) uso l’espressione:

relation_aggregate( ‘rel’,’concatenate’,”SIGLA”,’,’) ILIKE ‘%A%’

  • per etichettare uso l’espressione:

array_to_string(array_filter(string_to_array( relation_aggregate( ‘rel’,’concatenate’,”SIGLA”,’,’)) , @element ILIKE ‘%A%’),’,’)

secondo caso: tematizzare ed etichettare le regioni in funzione del valore area delle province:

valore $area < 5000 kmq
  • per tematizzare (categorizzato) uso l’espressione:

relation_aggregate( ‘rel’,’max’,$area) <5000000000

  • per etichettare uso l’espressione:

format_number( array_to_string( array_filter( string_to_array( relation_aggregate( ‘rel’,’max’,$area,’,’)) , @element <5000000000),’,’)/1000000,0) || ‘ kmq’

per maggiori dettagli sulle funzioni usate consultare la mia guida HfcQGIS.

Buon lavoro con QGIS

Versione di QGIS utilizzata: 3.4.4

Se questo blog post vi è stato utile donate PayPal

Annunci

17 pensieri su “QGIS: Tematizzare usando tabelle in relazione 1:m

  1. Grazie Totò. Molto interessante. E se volessi tematizzare in base alla relazione e solo se la geometria contiene un elemento dell’Atlas? Nel caso sopra mettiamo che l’Atlas è basato sulle provincie ed io volessi colorare solo la regione che contiene la provincia. È possibile?

    Piace a 1 persona

  2. Grazie Totò. Molto interessante. E se volessi tematizzare in base alla relazione e solo se la geometria contiene un elemento dell’Atlas? Nel caso sopra mettiamo che l’Atlas è basato sulle provincie ed io volessi colorare solo la regione che contiene la provincia. È possibile?

    Piace a 1 persona

  3. Grazie Totò, davvero spunti significativi, per uno strumento potentissimo.
    Mi chiedevo se oltre alla visualizzazione del risultato “VERO/FALSO” vi fosse la possibilità di visualizzare nel Layer Panel l’intera lista degli (m) presenti nella tabella relazionata a 1 nella geometria.
    Per tentare di spiegarmi meglio:
    nel tuo esempio : seleziona / discrimina tutte le regioni che contengono “provincie che iniziano con la lettera A”, mi chiedo se fosse possibile avere nel Layer Panel (e quindi tematizzare) l’elenco di tutte le iniziali (possibili) delle province e non solo “A” versus “tutti gli altri”.
    In altre parole, poter discriminare (raggruppare /selezionare/ tematizzare) regioni con attributi comuni presenti in province diverse.
    spero di essermi spiegato e grazie ancora

    Piace a 1 persona

    1. Ciao,
      per quanto riguarda l’esempio riportato basterebbe usare questa espressione per ottenere la lista dei valori anche nel panel layer:

      array_to_string(array_filter(string_to_array( relation_aggregate( ‘rel’,’concatenate’,”SIGLA”,’,’)) , @element ILIKE ‘%A%’),’,’)

      sperando di aver capito la richiesta.

      Piace a 1 persona

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 )

Google photo

Stai commentando usando il tuo account Google. 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 )

Connessione a %s...

This site uses Akismet to reduce spam. Learn how your comment data is processed.