Verketten von Labels in QGIS

14

Ich verwende QGIS 1.8 auf einem Windows XP-Computer und versuche, mehrere Felder zu verketten, um die Namen meiner lokalen Straßen in der Attributtabelle zu kennzeichnen. Ich kann jedoch nicht die richtige Syntax finden. Das erste Feld besteht aus der Straße, der zweiten Art der Verbindung, z. B. Allee und der dritten Ausrichtung, z. B. Ost oder West. Können Sie mir sagen, wie man die korrekte Syntax mithilfe des Dialogfelds mit Beschriftungen auf der Grundlage einer Formel schreibt? Anbei ein Screenshot, der die Attributtabelle zeigt.

Bildbeschreibung hier eingeben

Gabriel Giroux
quelle

Antworten:

19

Der Verkettungsoperator ist ||(ungerade, oder?), Daher würden Sie Folgendes verwenden:

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

Durchsetzen Sie sie mit beliebigen Trennzeichen und statischen Zeichenfolgen.

Wie @ NathanW feststellte, schlägt dies fehl, wenn eines der Felder NULL ist. In diesem Fall können Sie jedoch einen Fallback-Wert verwenden:

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

QGIS unterstützt eine Hilfsfunktion coalesceseit Version 2.0. Es ist da, um die Probleme mit NULLs zu vermeiden und das Beispiel würde so aussehen:

 street || ', ' || coalesce(link, '(nodata)') || ', ' || orientation
lynxlynxlynx
quelle
2
Es gibt auch die concatFunktion in den Dev-Versionen. Mit || behandelt nicht NULL, wenn linkNULL ist, hat das gesamte Label concatkein Problem. || wird von Postgres genommen postgresql.org/docs/9.1/static/functions-string.html
Nathan W
Sieht so aus, als würde es case-Anweisungen nicht direkt unterstützen. Ist die einzige Option, ohne SQL direkt zu verwenden, um eine Nicht-NULL-Kopie der Verknüpfungsspalte zu erstellen?
Lynxlynxlynx
Was meinst du damit, unterstützt keine Fallaussagen?
Nathan W
3
Ihnen fehlt ENDE. Die richtige Zeichenfolge istCASE WHEN ("link" IS NULL) THEN '(nodata)' ELSE "link" END
Nathan W
1
ahh coalesceist der, den ich meinte.
Nathan W
2

In QGIS Version 2.0.1 funktionierte der einfache Ausdruck folgendermaßen:

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

gewünschte Ausgabe: field1 (field2)

Pavlarian
quelle