Legenda con barra di colori continui per vettoriali in QGIS

Una mia collega ha l’esigenza di visualizzare una legenda a barra con colori continui per un layer vettoriale di punti.

L’obiettivo è ottenere questo

rasterBar_Vscalebar

mentre in QGIS normalmente si ha questo

Selection_059

In QGIS esiste un plugin che fa esattamente quanto richiesto: Colour Scale Bar

Interfaccia del plugin

Interfaccia del plugin

Come si vede dall’interfaccia del plugin, è possibile utilizzare lo stile di un raster caricato in QGIS (“Use corrent rast“) oppure selezionare un file txt o un file qml (il file di stile di QGIS) per assegnare delle classi di colori (“Click to select a colour table (*.txt) or a QGIS properties file (*qml)“).

L’opzione migliore sarebbe quella di sfruttare le potenzialità delle proprietà di stile fornite da QGIS e quindi creare una legenda in QIGS da includere poi direttamente in fase di composizione di mappa.

Qui però ci sono 2 problemi:

  1. il plugin dà come output un file di immagine (png), che quindi deve essere inclusa a posteriori nella composizione della mappa e non sarà comunque integrata nell’interfaccia di QGIS;
  2. il plugin funziona solamente con i raster, e quindi la definizione degli stili non si accoppia bene con la necessità di avere una legenda simile per un layer vettoriale.

Si può comunque aggirare l’ostacolo conuna soluzione alternativa: partendo da un qml relativo a un raster creato a parte (che non c’entra niente con i dati e lo stile del layer puntuale) si può riadattarlo manualmente (aprendo il file qml con qualsiasi editor di testo) con gli intervalli e i colori che ci servivono e realtivi alle classi definite per il vettoriali (modificando i valori di valuelabelcolor) ottenendo ad es. il seguente qml:

<!DOCTYPE qgis PUBLIC ‘http://mrcc.com/qgis.dtd&#8217; ‘SYSTEM’>
<qgis version=”2.10.1-Pisa” minimumScale=”-4.65661e-10″ maximumScale=”1e+08″ hasScaleBasedVisibilityFlag=”0″>
<pipe>
<rasterrenderer opacity=”1″ alphaBand=”0″ classificationMax=”12.30″ classificationMinMaxOrigin=”MinMaxFullExtentEstimated” band=”1″ classificationMin=”19.50″ type=”singlebandpseudocolor”>
<rasterTransparency/>
<rastershader>
<colorrampshader colorRampType=”INTERPOLATED” clip=”0″>
<item alpha=”255″ value=”12.30″ label=”12.30″ color=”#2B83BA”/>
<item alpha=”255″ value=”12.33″ label=”12.33″ color=”#80BFAB”/>
<item alpha=”255″ value=”12.53″ label=”12.53″ color=”#C7E8AD”/>
<item alpha=”255″ value=”12.64″ label=”12.64″ color=”#FFFFBF”/>
<item alpha=”255″ value=”12.87″ label=”12.87″ color=”#FDC980″/>
<item alpha=”255″ value=”14.07″ label=”14.07″ color=”#F07C4A”/>
<item alpha=”255″ value=”14.50″ label=”14.50″ color=”#D7191C”/>
<item alpha=”255″ value=”19.50″ label=”19.50″ color=”#9f0d0f”/>
</colorrampshader>
</rastershader>
</rasterrenderer>
<brightnesscontrast brightness=”0″ contrast=”-9″/>
<huesaturation colorizeGreen=”128″ colorizeOn=”0″ colorizeRed=”255″ colorizeBlue=”128″ grayscaleMode=”0″ saturation=”0″ colorizeStrength=”100″/>
<rasterresampler maxOversampling=”2″/>
</pipe>
<blendMode>0</blendMode>
</qgis>

A questo punto si può usare questo nuovo qml come input nel plugin e avere in output la legenda richiesta.

Potete poi giocare con i vari parametri nell’interfaccia del plugin per ottenere un risultato più vicino alle vostre esigenze.

ScaleBar_filledLa procedura ovviamente non è per niente dinamica ed è piuttosto macchinosa…

Esistono metodi migliori per farlo? 🙂

Annunci

5 pensieri su “Legenda con barra di colori continui per vettoriali in QGIS

  1. Ciao,
    argomento che non mi ero mai posto ma che è interessante. (sperando di aver capito il problema)

    Per ottenere uno stile qml di un raster basta creare un raster.

    quindi se ‘rasterizzi’ il vettore puntuale e poi utilizzassi il plugin eviteresti di manomettere il file qml.
    ho fatto una semplice prova con un layer puntuale, rasterizzato con v.to.rast.attribute e poi il relativo file qml l’ho dato in pasto al plugin.

    ciao

  2. Grazie dell’input Totò, ci avevo pensato, però non capisco come fai a “portare” i valori RGB di stile creati nel vettoriale anche nel raster.
    Una volta rasterizzato il layer puntuale con i valori del campo di interesse poi devo cmq riclassificare lo stile. E qui il problema che vedo io è che con dati vettoriali le modalità di creazione degli intervalli sono vari (Equal interval, Quantile, Natural breaks, Standard deviation, Pretty breaks), mentre per i raster vedo solo Equal…
    Tu come fai?

    • Ciao,
      premetto che è la prima volta che affronto questa problematica.
      ecco la prova che ho fatto:
      1. tematizzo il vettore puntuale con uno stile categorizzato (selezionando l’attributo che serve) e una scala di colori (che mi appunto);
      2. rasterizzo il vettore puntuale (v.to.rast.attribute) e poi tematizzo utilizzando i falsi colori, con scala colori uguale a quella del vettore puntuale e fissando lo stesso numero di classi.
      3. ho paragonato le due legende (quella a punti e quella a barra) e mi sembrano sufficientemente coerenti.

      poi, ripeto, mai affrontato un problema simile; stamani ho letto la tua email che mi ha incuriosito parecchio.

      Saluti
      Totò

      • Grazie Totò,
        se capisco bene, tu sposti l’editing delle classi e dei colori nell’interfaccia di QGIS, mentre io lo faccio modificando direttamente il qml su un editor di testo, ma bisogna farlo comunque a manina 🙂

  3. Ho aggiornato l’articolo con alcune informazioni di dettaglio perché mi sono accorto, a qualche mese dalla scrittura, che nemmeno io mi ricordavo più esattamente cosa avevo fatto 🙂
    Sepro di aver aggiunto elementi utili.

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...