[QGIS-it-user] Digest di QGIS-it-user, Volume 68, Numero 22

Grazie Andrea.
Faccio un esempio pratico
Ho uno shapefile poligonale con n feature e una tabella attributi con 2 variabili, con 3 valori di RGB.
VAR1: ‘243,243,243’ ; ‘234,197,221’ ; ‘230,163,208’
VAR2: ‘243,243,243’ ; ‘194,241,213’ ; ‘139,226,174’

Duplicando la geometria e dando rappresentazione per le due variabili, impostando per il vettore che si sovrappone la modalità di fusione “moltiplica”, ottengo una rappresentazione ben riassumibile con una legenda bivariata.

La legenda posso costruirla direttamente nel compositore di stampa o più agevolmente con GIMP (ad es.), andando di fatto ad sovrapporre le due scale colore.

Se però potessi combinare direttamente ad es il valore di VAR1 ‘243,243,243’ con il valore di VAR2 ‘139,226,174’ mediante il calcolatore di campi, avrei la possibilità di ottenere la stessa elaborazione senza duplicare il layer.
Inoltre poi avrei quantomeno una simbologia “reale” nel mio progetto e non solo come elemento grafico nel layout.

Spero di aver spiegato meglio la questione,
M.

···

Massimo Figaroli
Ambientologo e Agrotecnico Laureato

Como (CO) - P.IVA 03422160139

@ massimo.figaroli@gmail.com

pec massimo.figaroli@aisapec.it

cell. 3381471605

Skype massimofigaroli
Web www.massimofigaroli.it Linkedin ECOSBN

Ai sensi del Regolamento (UE) 2016/679, Le informazioni contenute in questo messaggio e in ogni documento o file ad esso allegato sono riservate e confidenziali. Il loro utilizzo è consentito esclusivamente al destinatario del messaggio o a diversa persona da questo autorizzata, per le finalità indicate nel messaggio medesimo. Qualora Lei non fosse la persona cui il presente messaggio è destinato, La invitiamo ad eliminarlo dal Suo Sistema e a distruggere le varie copie o stampe, dandocene gentilmente comunicazione. Ogni utilizzo improprio è contrario ai principi del Regolamento (UE) 2016/679. Regione Lombardia – Giunta Regionale opera in conformità al Regolamento (UE) 2016/679 citato. Per qualsiasi informazione a riguardo si prega di contattarci al seguente indirizzo e-mail: massimo.figaroli@gmail.com

Ciao Massimo,
purtroppo continua a non essermi chiaro cosa intendi con "tabella attributi con 2 variabili, con 3 valori di RGB". Una tabella attributi ha campi (o colonne).

Comunque, se il tuo layer contiene due campi, VAR1 e VAR2 di tipo stringa e ognuno contiene una singola stringa contenente una tripletta di valori decimali delle componenti colore separati da virgola (rappresentante un singolo colore), allora potresti usare una espressione come:

array_to_string( array_foreach( generate_series( 0, 2 ), round( array_get( string_to_array( VAR1 ), @element ) * array_get( string_to_array( VAR2 ), @element ) / 255 ) ) )

che crea una stringa contenente una tripletta di valori decimali delle componenti colore separati da virgola, in cui i valori sono calcolati moltiplicando il valore di ogni componente colore della stringa nel campo VAR1, con il valore della rispettiva componente colore della stringa nel campo VAR2 e dividendo il risultato per 255.

In questo modo dovresti ottenere un colore che è il "prodotto" (Blending mode: Multiply) dei colori in VAR1 e VAR2 (secondo https://en.wikipedia.org/wiki/Blend_modes#Multiply_and_Screen)

Chiaramente puoi adattare l'espressione anche ad altre modalità di blending, se conosci la funzione che lega i valori dei colori in input ai valori del colore in output.

Un altra possibilità, più elegante, è quella di scrivere una piccola funzione in Python che svolge lo stesso compito della precedente espressione e poi usare tale funzione al posto dell'espressione nel calcolatore di campi.

A presto.

Andrea

Il 01/07/2021 08:54, Massimo Figaroli ha scritto:

Grazie Andrea.
Faccio un esempio pratico
Ho uno shapefile poligonale con n feature e una tabella attributi con 2 variabili, con 3 valori di RGB.
VAR1: '243,243,243' ; '234,197,221' ; '230,163,208'
VAR2: '243,243,243' ; '194,241,213' ; '139,226,174'

Duplicando la geometria e dando rappresentazione per le due variabili, impostando per il vettore che si sovrappone la modalità di fusione "moltiplica", ottengo una rappresentazione ben riassumibile con una legenda bivariata.

La legenda posso costruirla direttamente nel compositore di stampa o più agevolmente con GIMP (ad es.), andando di fatto ad sovrapporre le due scale colore.

Se però potessi combinare direttamente ad es il valore di VAR1 '243,243,243' con il valore di VAR2 '139,226,174' mediante il calcolatore di campi, avrei la possibilità di ottenere la stessa elaborazione senza duplicare il layer.
Inoltre poi avrei quantomeno una simbologia "reale" nel mio progetto e non solo come elemento grafico nel layout.

Ciao,
dopo una breve pausa rispondo al suggerimento ricevuto da Andrea Giudiceandrea.
Riscontro positivissimo: in sostanza la tua espressione che utilizza “array” produce colori praticamente uguali a quelli ottenuti con il metodo manuale (su alcune combinazioni si riscontrano differenze di ±1 unità sui canali R, G, B ma è praticamente impercettibile).
La tua espressione, come mi scrivevi, di fatto replica la modalità di fusione layer “moltiplica” che vado ad applicare al vettore di sovrapposizione.

Quindi, se da un lato la costruzione della legenda bivariata l’ho fatta con GIMP, l’elaborazione dell’output cartografico può essere ottenuta mediante il calcolatore di campi (che poi è la risposta alla domanda che ponevo).

Grazie, un aiuto preziosissimo.

Massimo Figaroli

···

Massimo Figaroli
Ambientologo e Agrotecnico Laureato

Como (CO) - P.IVA 03422160139

@ massimo.figaroli@gmail.com

pec massimo.figaroli@aisapec.it

cell. 3381471605

Skype massimofigaroli
Web www.massimofigaroli.it Linkedin ECOSBN

Ai sensi del Regolamento (UE) 2016/679, Le informazioni contenute in questo messaggio e in ogni documento o file ad esso allegato sono riservate e confidenziali. Il loro utilizzo è consentito esclusivamente al destinatario del messaggio o a diversa persona da questo autorizzata, per le finalità indicate nel messaggio medesimo. Qualora Lei non fosse la persona cui il presente messaggio è destinato, La invitiamo ad eliminarlo dal Suo Sistema e a distruggere le varie copie o stampe, dandocene gentilmente comunicazione. Ogni utilizzo improprio è contrario ai principi del Regolamento (UE) 2016/679. Regione Lombardia – Giunta Regionale opera in conformità al Regolamento (UE) 2016/679 citato. Per qualsiasi informazione a riguardo si prega di contattarci al seguente indirizzo e-mail: massimo.figaroli@gmail.com

Il 12/07/2021 13:11, Massimo Figaroli ha scritto:

in sostanza la tua espressione che utilizza “array” produce colori praticamente uguali a quelli ottenuti con il metodo manuale (su alcune combinazioni si riscontrano differenze di ±1 unità sui canali R, G, B ma è praticamente impercettibile).

Ciao Massimo,
la differenza di ±1 unità che riscontri potrebbe dipendere dall’arrotondamento al numero intero più vicino necessario dopo la divisione per 255 del prodotto tra i valori dei corrispondenti canali dei due colori.

In realtà, dalla mappa in PDF che mi hai inviato, sono più propenso a pensare che la differenza sia dovuta al fatto che quando usi in QGIS due layer sovrapposti impostando trasparenza e/o blending e poi esporti il layout in PDF, allora la relativa mappa nel PDF sarà una immagine jpeg compressa; mentre se usi un unico layer, allora la relativa mappa nel PDF non sarà un’immagine ma sarà vettoriale.

Pertanto, mentre la mappa contenente il singolo layer, essendo vettoriale, mantiene l’esatto (e corretto) valore di ogni colore, la mappa con i due layer sovrapposti in trasparenza/blending, essendo una immagine JPEG compressa, presenterà delle differenze di colore dovute all’algoritmo di compressione JPEG che è di tipo “lossy” e quindi introduce degli artefatti.

Poi verificarlo ingrandendo molto, nella visualizzazione del layout in PDF, il contorno dei poligoni nella mappa con i layer sovrapposti: vedrai i tipici artefatti (pixel con colori non omogenei) della compressione JPEG, mentre i colori sono netti e definiti nella mappa con unico layer.

Puoi anche verificarlo esportando il layer non in PDF, ma nel formato immagine PNG, che non ha una compressione “lossless” e quindi non introduce artefatti.

Fammi sapere se è effettivamente questo il motivo per il quale riscontri la piccola differenza di colore.

A presto.

Andrea

Dimanticavo…

Ho dimenticato di scrivere che c’è un plugin apposito per creare legende bivariate: | L’hai provato? Inoltre, le versioni di QGIS (sia 3.16 che 3.20) installabili con il nuovo Standalone installer .MSI o tramite il nuovo OSGeo4W Network Installer v2, permettono di selezione un formato di compressione lossless, quindi senza artefatti, per l’esportazione nel formato PDF. A presto. Andrea

···

Il 12/07/2021 22:27, Andrea Giudiceandrea ha scritto:

Il 12/07/2021 13:11, Massimo Figaroli ha scritto:

in sostanza la tua espressione che utilizza “array” produce colori praticamente uguali a quelli ottenuti con il metodo manuale (su alcune combinazioni si riscontrano differenze di ±1 unità sui canali R, G, B ma è praticamente impercettibile).

In realtà, dalla mappa in PDF che mi hai inviato, sono più propenso a pensare che la differenza sia dovuta al fatto che quando usi in QGIS due layer sovrapposti impostando trasparenza e/o blending e poi esporti il layout in PDF, allora la relativa mappa nel PDF sarà una immagine jpeg compressa; mentre se usi un unico layer, allora la relativa mappa nel PDF non sarà un’immagine ma sarà vettoriale.

https://plugins.qgis.org/plugins/BivariateLegend/https://github.com/webgeodatavore/bivariate_legend/