Come concatenare le etichette in QGIS?


14

Sto usando QGIS 1.8 sulla macchina Windows XP e provo a concatenare diversi campi per etichettare i nomi delle mie strade locali nella tabella degli attributi, ma non riesco a trovare la sintassi corretta. Il primo campo è costituito dalla strada, il secondo tipo di collegamento, ad esempio: Avenue e il terzo orientamento, ad esempio Est o Ovest. Potresti dirmi come scrivere la sintassi corretta usando la finestra di dialogo delle etichette basata su una formula. In allegato uno screenshot che mostra la tabella degli attributi.

inserisci qui la descrizione dell'immagine

Risposte:


19

L'operatore di concatenazione è ||(eh dispari?), Quindi useresti qualcosa del tipo:

street || ', ' || link || ', ' || orientation

Interspandili con eventuali separatori e stringhe statiche che ti piacciono.

Come notato da @NathanW, questo fallirà se uno dei campi è NULL, ma in tal caso è possibile utilizzare un valore di fallback:

street || ', ' || CASE WHEN ("link" IS NULL) THEN '(nodata)' ELSE "link" END || ', ' || orientation

QGIS supporta una funzione di supporto coalescedalla versione 2.0. È lì per evitare i problemi dei NULL e l'esempio sarebbe simile:

 street || ', ' || coalesce(link, '(nodata)') || ', ' || orientation

2
C'è anche la concatfunzione nelle versioni dev. Utilizzando || non gestisce NULL, se linkè NULL l'intera etichetta è nulla concatnon ha questo problema. || è tratto da Postgres postgresql.org/docs/9.1/static/functions-string.html
Nathan W

Sembra che non supporti direttamente le dichiarazioni dei casi. L'unica opzione senza utilizzare SQL direttamente per creare una copia non NULL della colonna del collegamento?
lynxlynxlynx,

Cosa intendi con non supporta le dichiarazioni dei casi?
Nathan W,

3
Manca END. La stringa corretta èCASE WHEN ("link" IS NULL) THEN '(nodata)' ELSE "link" END
Nathan W

1
ahh coalesceè quello che intendevo.
Nathan W,

2

Su QGIS veriosn 2.0.1 l'espressione semplice ha funzionato in questo modo:

"field1" || '(' || "field2" || ')'

output desiderato: field1 (field2)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.