Jak połączyć etykiety w QGIS?

14

Używam QGIS 1.8 na komputerze z systemem Windows XP i próbuję połączyć kilka pól, aby oznaczyć nazwy moich lokalnych dróg w tabeli atrybutów, ale nie mogę znaleźć poprawnej składni. Pierwsze pole składa się z om ulicy, drugiego rodzaju łącza, np .: Avenue i trzeciego orientacji, na przykład Wschodu lub Zachodu. Czy możesz mi powiedzieć, jak napisać poprawną składnię za pomocą okna dialogowego etykiet opartych na formule. Załączono zrzut ekranu przedstawiający tabelę atrybutów.

wprowadź opis zdjęcia tutaj

Gabriel Giroux
źródło

Odpowiedzi:

19

Operatorem konkatenacji jest ||(dziwne, co?), Więc użyłbyś czegoś takiego:

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

Przełóż je dowolnymi separatorami i ciągami statycznymi.

Jak zauważył @NathanW, to się nie powiedzie, jeśli jedno z pól ma wartość NULL, ale w takim przypadku możesz użyć wartości zastępczej:

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

QGIS obsługuje funkcję pomocnika coalesceod wersji 2.0. Ma na celu uniknięcie problemów z wartościami NULL, a przykład wyglądałby następująco:

 street || ', ' || coalesce(link, '(nodata)') || ', ' || orientation
lynxlynxlynx
źródło
2
Istnieje również concatfunkcja w wersjach deweloperskich. Korzystanie || nie obsługuje NULL, jeśli linkjest NULL, cała etykieta ma wartość NULL concat, nie ma tego problemu. || pochodzi z Postgres postgresql.org/docs/9.1/static/functions-string.html
Nathan W
Wygląda na to, że nie obsługuje bezpośrednio instrukcji case. Czy jedyną opcją bez bezpośredniego użycia SQL do utworzenia kopii kolumny łącza innej niż NULL?
lynxlynxlynx
Co masz na myśli, że nie obsługuje instrukcji case?
Nathan W
3
Brakuje END. Prawidłowy ciąg toCASE WHEN ("link" IS NULL) THEN '(nodata)' ELSE "link" END
Nathan W
1
ahh coalescejest tym, którego miałem na myśli.
Nathan W
2

W wersji QGIS 2.0.1 proste wyrażenie działało w następujący sposób:

„pole 1” || „(„ || „field2” || ”)”

pożądane wyjście: pole1 (pole2)

Pavlarian
źródło