QGIS: label, relazioni e aggregates

In questo articolo vedremo come sfruttare al meglio alcune nuove features della QGIS 2.16, in particolare la nuova categoria di funzioni che vanno sotto il nome di aggregates, queste nuova feature contiene molte funzioni di aggregazione tra cui quelle che useremo in questo esempio (relation_aggregate, concatenate), queste funzioni sono disponibili sia nel calcolatore di campi che nel costruttore di espressioni:

Immagine 5
features

immaginiamo di voler etichettare le 20 regioni italiane con le relative province in modo tale da leggere, regione per regione, il numero di province e i nomi delle province stesse.

Ingredienti:

  1. vettore delle regioni italiane ( 20 righe);
  2. vettore delle province italiane (110 righe);
Immagine 6
screenshot Regioni e Province QGIS 2.16

i due vettori possono essere messi in relazione (1:n) tra loro tramite il campo comune ‘cod_reg‘, quindi iniziamo con il creare la relazione a livello di progetto:

Immagine 7
creazione relazione

per visualizzare la relazione occorre impostare la modalità ‘modulo‘ nella tabella degli attributi del vettore ‘regioni‘: (nome della realzione ‘reg_pro’)

Immagine 8
tabella attributi modalità ‘modulo

per creare l’etichetta sul layer ‘regioni’ cliccare F7 si aprirà la nuovissima styling dock: selezioniamo le etichette e avviamo il costruttore di espressioni tramite l’icona epsilon (3):

Immagine 9
dock style

ecco la finestra espressione:

Immagine 10
finestra di dialogo espressioni

scriviamo la seguente formula:

relation_aggregate( ‘reg_pro’, ‘concatenate’,  “provincia”, ‘,’ )

 

che ci permette di ottenere il risultato desiderato:

Immagine 11
screenshot finale

 


note finali: queste nuove caratteristiche introdotte in QGIS 2.16 lo rendono unico nel panorama dei GIS Descktop Open Source e non. Per la prima volta è possibile usare le funzioni di aggregazione anche sulle relazioni tra tabelle attributi senza far uso di database con estensione spaziale come Spatialite o PostGIS.


video demo:

16 pensieri su “QGIS: label, relazioni e aggregates

  1. Salve,
    non riesco a trovare la possibilità di assegnare ad un vettore puntuale una vestizione con più di un simbolo.
    In pratica dovrei rappresentare un sito dove è stata eseguita più di un’indagine geologica delle quali ognuna ha un proprio simbolo.
    Ho visto che in ArcGis questa operazione è fattibile.
    Allego a tal proposito il link del manuale di rappresentazione microzonazione sismica dove all’appendice 2 viene fornita la suddetta indicazione.

    https://www.google.it/url?sa=t&source=web&rct=j&url=http://www.protezionecivile.gov.it/resources/cms/documents/StandardMS_3.0_open.pdf&ved=0ahUKEwiK_sm907_TAhWrA5oKHSSmDtsQFgglMAE&usg=AFQjCNEMbvnWT30olAI1oz_TPvat6lZdkA&sig2=UxpPw1WyVrA4ikrUfcu96w

    Come posso realizzarla in qgis?

    "Mi piace"

    1. Partendo dal presupposto che tra i punti e le indagini ci sia una relazione 1:n, quindi un vettore punto e una tabella indagine: l’unico modo che conosco è quello di tematizzare i punti con il metodo ‘spostamento punto’.
      Per poter far questo occorre creare un virtual layer e fare un join tra il vettore punti e la tabella indagini, cosi facendo si ha un nuovo layer puntuale con tanti punti sovrapposti quanti sono le indagini; poi, come detto sopra, tematizzare con ‘spostamento punto; si otterrà un effetto simile a quello richiesto.
      Appena ho un po’ di tempo farò un articolo e video.

      Piace a 1 persona

  2. Buongiorno ingegnere, anche io le sottopongo lo stesso problema. Ovvero, ho uno shape puntuale che rappresenta il SITO DI INDAGINE, ad esso, alla chiave primaria viene associata una tabella “INDAGINI” che può contenere a sua volta più indagini per ogni SITO, ed una seconda tabella “PARAMETRI”, che può contenere più parametri x ogni indagine. Quindi riassumendo, un sito puntuale rappresentato, può avere +indagini, ed ogni indagine + parametri. Nella rappresentazione grafica si deve vedere, cosi come vuole la protezione civile, il puntuale (SITO), ed una vestizione nell’intorno del punto delle n indagini e n parametri.

    "Mi piace"

  3. Buongiorno,
    Non mi è chiaro se tramite la funzione “aggregate” è possibile ereditare (per posizione) anche un attributo di un layer figlio (peraltro senza geometria) collegato (con una relazione) al layer padre, che in realtà è il vettore su agisce specificatamente la funzione aggregate.

    "Mi piace"

  4. No, i due Layer non sono in relazione.
    La necessità è quella di ereditare un attributo per posizione (da layer poligonale ad uno puntuale) , dove l’attributo però è nel layer figlio del layer poligonale (legato da una relazione 1 a N).

    "Mi piace"

  5. Buongiorno ingegnere,
    Prima di allegare il file (ma per questo chiedo gentilmente la modalità di invio) riprovo a rispiegare il problema, cercando di meglio specificare i diversi passaggi eseguiti.
    Ho un layer vettoriale (tipo punto) che deve prendere un attributo da un layer vettoriale (tipo poligono) che corrisponde alle zone OMI dell’AdE (disponibili sul sito della stessa).
    Per questo primo quesito ho utilizzato (con buon fine) la funzione aggregate (con filter “intersect”) e con questa ho ereditato la specifica zona OMI in ricade il punto “n” del mio layer (puntuale)
    L’attributo ricavato è poi la chiave per ereditare (sempre nel medesimo layer puntuale) degli attributi da un’altra tabella senza geometria, che contiene le quotazioni OMI distinte: per singola destinazione; per stato di manutenzione ed altro.
    (segnalo che la tabella delle quotazioni è pertanto legata da una relazione 1-N con il layer poligonale delle zone OMI)
    Per fare secondo quesito ho creato un’altro campo virtuale e utilizzato un’altra funzione di tipo aggregate, in questo caso con funzione filtro (non geometrico) sui campi della tabella Quotazioni OMI quali: la zona OMI (precedentemente ricavata con l’altra funzione aggregate e il campo tipologia destinazione che è necessariamente un campo valorizzato (ad esempio con un menu a tendina di campi predeterminati) nel mio vettore di lavoro (di tipo puntuale).
    La seconda sintassi funziona con valori costanti, ma da valori NULL quanto inserisco nella funzione aggregate i campi variabili.
    RingraziandoLa per la disponibilità, attendo eventuali istruzioni per l’allegazione dei file.
    Saluti

    "Mi piace"

    1. Buongiorno,
      non ho ben capito il problema e sarebbe auspicabile avere dei dati su cui ragionare.
      Per allegare i dati (se non ci sono problemi di privacy o non sono sensibili) puoi zipparli, mettere in un cloud (gdrive, mega, dropbox ecc…) e poi incolli qui il link.

      è per lavoro?

      saluti

      "Mi piace"

Lascia un commento

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