QGIS | conditional labeling

QGIS si rivela (almeno per le mie necessita’) uno strumento sempre piu’ potente e versatile. A riguardo lascio un breve post su come impostare una etichettatura condizionale. Per spiegarsi: come fare per visualizzare le etichette (label) solamente di determinati oggetti di un layer (nel mio caso PostGIS)? Per questo devo ringraziare la lista qgis-users ed in particolare Andreas Neumann, Giuseppe Sucameli, Nathan Woodrow, Martin Dobias e Mayeul Kauffmann per avere sollevato la questione ed averne indicato la soluzione.

Nel mio caso specifico volevo “etichettare” soltanto alcune zone territoriali omogenee di PRG: in particolare le zone A, B, C, e D tralasciando quelle a servizi ed agricole (E ed F). Nella tabella attributi del layer vettoriale poligonale si trova un campo chiamato “AmbitoIdZona” che contiene le informazioni necessarie.

– Apriamo lo strumento “Layer Labeling Options” cliccando sull’icona relativa o tramite la finestra delle proprieta’ del layer interessato.

– Spuntiamo il tick “Etichetta questo vettore” e clicchiamo sul pulsante “Modifica espressione” (quello con il simbolo dell’espressione);

– Nel frame in basso scriviamo l’espressione:

CASE WHEN “AmbitoIdZona” IN (‘A’,’B’,’C’,’D’) THEN “AmbitoIdZona” || ‘;’ || “NumeroZona” END

Nota: nell’espressione l’etichetta comprende il valore di due campi “AmbitoIdZona” e “NumeroZona”. Il punto e virgola ‘;’ indica di andare a capo. Questa impostazione si configura nella sezione “Formattazione” ed in particolare valorizzando il campo “A capo con il carattere” nel quale si indica un carattere a piacere (nel mio caso il ‘;’ appunto).

 

Aggiornamento: come impostare etichette di colore diverso a seconda del valore contenuto nel campo da etichettare o in altro campo

Facciamo un esempio concreto: ho un layer poligonale che riporta gli ambiti di alcuni strumenti urbanistica attuativi. Uno dei tanti attributi si chiama “Stato” che puo’ contenere i due valori: ‘vigente’ o ‘decaduto’. Vogliamo fare in modo che l’etichetta riporti il nome dello strumento urbanistico (dato che risiede nel campo “Nome”) e sia di colore rosso se lo “Stato”=’decaduto’ e di colore verde se “Stato”=’vigente’.

Andiamo sulle proprietà del layer e ci posizioniamo sulla scheda “Etichette” quindi su “Testo”. Definiamo un colore di default (nel nostro caso il verde con RGB=0,255,0 e poi clicchiamo sull’icona riportata a destra “Sovrascrittura definita dai dati (espressione)”. Compare la finestra di configurazione dell’espressione e digitiamo quanto segue:

CASE WHEN nome_campo=’valore’ THEN color_rgb(255,0,0) END

che tradotto riportando i nostri dati diventa:

CASE WHEN “Stato”=’decaduto’ THEN color_rgb(255,0,0) END

In questo modo vedremo le etichette (il testo dell’etichetta) rosse nel caso in cui il campo “Stato” ha valore=’decaduto’ e verdi negli altri casi

 

 

Annunci

raspberry pi | prima installazione

logo raspberry pi

Ho acquistato un raspberry pi (versione 512 MB RAM o modello B). Riporto alcuni passaggi importanti per la prima installazione.

Innanzitutto bisogna installare il sistema sulla scheda SD (ho provato con due schede: una da 8 GB e l’altra da 16 GB).

I passi che descrivo sono stati provati su Debian testing.

1) autenticarsi come root e prima di inserire la scheda SD nello slot digitare:

# fdisk -l

compare un elenco delle memorie (hd) presenti

2) inserire la scheda SD: alla richiesta di montare la memoria di massa confermare con “ignora”

3) impartire nuovamente il comando:

# fdisk -l

dovrebbe comparire un messaggio simile al seguente (memoria SD da 8 GB):

/dev/mmcblk0p1

/dev/mmcblk0p2

3) passiamo ora alla creazione delle partizioni mediante il programma “fdisk”. Digitare:

# fdisk /dev/mmcblk0

In questo modo entriamo nel programma “fdisk” che ci accoglie con il messaggio

Command (m for help):

A questo punto digitiamo “d” per eliminare (“d” sta per “delete”) le eventuali partizioni presenti; quindi a console avremo:

Command (m for help): d

selected partition 1

4) poi dare il comando “p” (per vedere le partizioni presenti) e non dovremmo avere messaggi di risposta. Significa che le partizioni sono state cancellate

5) creiamo una singola partizione con “n” (“new”), poi “p” per vedere la partizione creata e poi “1”. Battere 2 volte “invio” confermando i valori riportati: 2048 e 15523839

6) cambiamo il tipo di file system. Digitiamo “t”, poi “l” e poi “b”. In questo modo indichiamo di creare una partizione FAT 32.

7) verifichiamo con “p” nuovamente

8) scriviamo la tabella delle partizioni con “w”

9) formattiamo la scheda SD con il comando:

# mkfs.vfat /dev/mmcblk0p1

10) quando torna il cursore sul terminale espellere la scheda SD e reinserirla; questa volta, alla richiesta di aprire la memoria di massa confermare con “ok”

11) come utente (non root) possiamo impartire il comando:

$ mount | grep -i mmcblk0p1

per vedere dove è stata montata la memoria; dovremmo ottenere un messaggio del tipo:

/dev/mmcblkop1 on /media/sit/092……(e altro codice)

12) entriamo nella directory indicata:

$ cd /media/sit/ 092….

13) decomprimiamoci all’interno il file NOOBS scaricato da qui

$ unzip /percorso/al/file/NOOBS_v1_3_4.zip

seguiranno una serie di messaggi; alla fine usciamo dalla directory:

$ cd

14) smontiamo la scheda SD

# umont /dev/mmcblk0p1

e inseriamo la scheda nel nostro raspberry. Accendiamolo dopo averlo collegato ad un monitor/TV via HDMI e seguiamo le istruzioni. Possiamo installare uno o più sistemi. Io ho provato Raspbian e Openelec (quest’ultimo con XBMC è un formidabile media center).

GRASS GIS fund raising per Vienna Code Sprint 2014

Con molto piacere pubblico questa richiesta fondi per il prossimo GRASS GIS Code Sprint di Vienna
 
 
“Dear GRASS GIS Users,
 
In the occasion of the upcoming Vienna Code Sprint 2014 [1], the GRASS GIS Project Steering Committee decided to officially join this code sprint, considering the great opportunity for joint activities. More than 60+ developers from the most important OSGeo project communities will join the event.
While the GRASS developers are donating their valuable time, the community of enthusiast users may contribute with donations, even symbolic, that will be used to cover out-of-pocket expenses of the participants.
Companies can also decide to sponsor specific tasks! Please don’t hesitate to contact us for further details.
As usual, all of the work done in the community sprint will be directly contributed back to the GRASS project for the benefit of everyone who uses it. The scope is to publish a first release candidate of the stable GRASS GIS 6.4.4 version as well as a tech preview release of GRASS GIS 7. For further information don’t hesitate to contact Markus Neteler (neteler@osgeo.org).
 
For your convenience, here our easy-to-use Paypal button:
 
For our alternative bank transfer option, please contact Martin Landa (landa.martin
@gmail.com)”
 
Thanks for your support!
The GRASS Developers Team
 
 
 
 
About GRASS GIS
The Geographic Resources Analysis Support System (http://grass.osgeo.org/), commonly referred to as GRASS GIS, is an Open Source Geographic Information System providing powerful raster, vector and geospatial processing capabilities in a single integrated software suite. GRASS GIS includes tools for spatial modeling, visualization of raster and vector data, management and analysis of geospatial data, and the processing of satellite and aerial  imagery. It also provides the capability to produce sophisticated presentation graphics and hardcopy maps. GRASS GIS has been translated into about twenty languages and supports a huge array of data formats. It can be used either as a stand-alone application or as backend for other software packages such as QGIS and R geostatistics. It is distributed freely under the terms of the GNU General Public License (GPL). GRASS GIS is a founding member of the Open Source Geospatial Foundation (OSGeo).

2013 in review

Anche quest’anno il team di WordPress ha inviato il suo “annual report”. Lo pubblico as is:

The WordPress.com stats helper monkeys prepared a 2013 annual report for this blog.

Here’s an excerpt:

The concert hall at the Sydney Opera House holds 2,700 people. This blog was viewed about 15,000 times in 2013. If it were a concert at Sydney Opera House, it would take about 6 sold-out performances for that many people to see it.

Click here to see the complete report.

GRASS, QGIS | individuare collina e pianura di un territorio

Un collega mi ha chiesto di indicargli le percentuali di territorio (comunale) pianeggiante e collinare.

Avevo a disposizione un DEM con risoluzione 5m (realizzato con GRASS a partire dalle curve di livello della CTRN) ed il vettoriale del limite amministrativo.Tuttavia il DEM (chiamato dem_5m) ricopre un’area pressochè rettangolare ben più ampia del limite del comune ed avevo la necessità di “clipparlo” sul boundary di interesse. Ho agito per passi successivi utilizzando GRASS dall’interno di QGIS.

L’immagine sottostante illustra la situazione di partenza (dem e confine):

dtm e confine

dtm a 5 m e confine comunale

Ecco i passi seguiti:

– conversione del vettoriale del confine comunale in raster:

$ v.to.rast input=confine_comune out=confine_comune (comando lanciato dalla shell del plugin qgis grass)

– impostazione della regione di lavoro sul raster appena creato:

$ g.region rast=confine_comune res=5

– creazione di una MASK dal confine per clippare il dem su di esso in un secondo momento:

$ r.mask input=confine_comune

– clip del dem per delimitarlo al territorio comunale (con r.mapcalc); si ottiene un raster che chiameremo “dem_comune”:

$ r.mapcalc “dem_comune=dtm_5m – confine_comune”

– calcolo del territorio considerato collinare (da una stima si è deciso di considerare tale il territorio con quota > 120 m s.l.m. in quanto rappresenta la quota media del piede di collina dell’area di lavoro):

$ r.mapcalc “collina=dem_comune>120”

– e calcolo della pianura con il territorio che rimane a complemento:

$ r.mapcalc “pianura=dem_comune<=120”

Il risultato è il seguente:

i raster "collina" e "pianura" caricati con trasparenza al 50%

i raster “collina” e “pianura” caricati con trasparenza al 50%

Il passaggio succesivo consiste nel trasformare i raster in vettori mediante il modulo “r.to.vect“. Il calcolo della superficie e, di conseguenza, l’incidenza percentuale delle due porizioni di territorio sul totale vengono tralasciati (basta consultare le aree con lo strumento di interrogazione di QGIS o lanciare il modulo “v.report” in GRASS).

scp

Aggiungo qualche promemoria sull’utilizzo di scp (secure copy).

– Eseguire la copia di un file da host locale a host remoto:

$ scp nome_file utente@IP_ADDRESS_HOST_DESTINAZIONE://percorso/alla/dir/di/destinazione/

per copiare una intera directory aggiungere l’opzione “r” prima della sorgente dati, per esempio:

$ scp -r nome_directory utente@IP_ADDRESS_HOST_DESTINAZIONE://percorso/alla/dir/di/destinazione/

– Eseguire la copia di un file da host remoto a host locale:

$ scp utente@IP_ADDRESS_HOST_REMOTO://percorso/alla/dir/di/origine /percorso/alla/dir/di/destinazione/