Làm thế nào để ghép các nhãn trong QGIS?


14

Tôi đang sử dụng QGIS 1.8 trên máy Windows XP và tôi cố gắng ghép một số trường để gắn nhãn tên đường địa phương của mình trong bảng thuộc tính, nhưng tôi không thể tìm thấy cú pháp chính xác. Trường đầu tiên bao gồm om đường phố, loại liên kết thứ hai, ví dụ: Đại lộ và hướng thứ ba, ví dụ: Đông hoặc Tây. Bạn có thể cho tôi biết cách viết cú pháp đúng bằng hộp thoại nhãn dựa trên công thức. Đính kèm một ảnh chụp màn hình cho thấy bảng thuộc tính.

nhập mô tả hình ảnh ở đây

Câu trả lời:


19

Toán tử ghép là ||(lẻ hả?), Vì vậy bạn sẽ sử dụng cái gì đó như:

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

Giao tiếp chúng với bất kỳ dấu phân cách và chuỗi tĩnh nào bạn muốn.

Như @NathanW đã lưu ý, điều này sẽ thất bại nếu bất kỳ trường nào là NULL, nhưng bạn có thể sử dụng giá trị dự phòng trong trường hợp đó:

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

QGIS hỗ trợ chức năng trợ giúp coalescekể từ phiên bản 2.0. Đó là để tránh các vấn đề của NULL và ví dụ sẽ như sau:

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

2
Ngoài ra còn có concatchức năng trong các phiên bản dev. Sử dụng | | không xử lý NULL, nếu linkNULL thì toàn bộ nhãn là null concatkhông có vấn đề này. | | được lấy từ Postgres postgresql.org/docs/9.1/static/fifts-opes.html
Nathan W

Có vẻ như nó không hỗ trợ báo cáo trường hợp trực tiếp. Là tùy chọn duy nhất mà không sử dụng SQL trực tiếp để tạo bản sao không phải NULL của cột liên kết?
lynxlynxlynx

Ý bạn là gì không hỗ trợ báo cáo trường hợp?
Nathan W

3
Bạn đang thiếu END. Chuỗi đúng làCASE WHEN ("link" IS NULL) THEN '(nodata)' ELSE "link" END
Nathan W

1
ahh coalescelà người tôi muốn nói
Nathan W

2

Trên QGIS veriosn 2.0.1, biểu thức đơn giản hoạt động như thế này:

"trường1" || '(' | | "trường2" || ')'

đầu ra mong muốn: field1 (field2)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.