Bản Đồ Lâm NghiệpGIS · Lâm nghiệp Việt Nam

Lọc lô rừng theo xã, chủ rừng, trạng thái bằng biểu thức SQL

Viết biểu thức chọn lô rừng trong QGIS: AND, OR, IN, LIKE, IS NULL, BETWEEN; lọc lớp bằng Filter và xuất các lô tìm được ra file mới.

Admin 09/11/2026 7 phút đọc
Hộp Select by Expression với biểu thức kết hợp ba điều kiện: xã Sơn Trạch, mã loại đất loại rừng từ 1 đến 59 và diện tích lớn hơn 5 haQGIS

Lớp hiện trạng rừng cấp huyện có vài nghìn lô. Cấp trên hỏi: "Xã Sơn Trạch có bao nhiêu lô rừng tự nhiên trên 5 ha, tổng diện tích bao nhiêu?" — cuộn bảng tìm bằng mắt thì cả buổi không xong. Trong QGIS chỉ cần gõ một dòng điều kiện, máy chọn đúng những lô đó trong một giây. Bài này hướng dẫn viết điều kiện (biểu thức theo kiểu SQL) từ đơn giản đến kết hợp nhiều điều kiện, rồi xuất các lô tìm được ra file riêng.

Đây là bài 2 trong series Thuộc tính, truy vấn và thống kê dữ liệu lâm nghiệp trong QGIS.

Chọn theo biểu thức (Select by Expression)

  1. Mở bảng thuộc tính của lớp (nhấp phải lớp ▸ Open Attribute Table, hoặc F6).
  2. Bấm nút Select features using an expression (biểu tượng chữ ε trên thanh công cụ của bảng), hoặc nhấn Ctrl + F3.
  3. Gõ điều kiện vào khung bên trái, ví dụ "Dtich" > 2000.
  4. Bấm Select Features. Các đối tượng thoả điều kiện được chọn, sáng màu cả trong bảng lẫn trên bản đồ.

Hộp Select by Expression với điều kiện Dtich > 2000; các xã có diện tích trên 2000 ha được chọn và tô xanh trong bảng thuộc tính

Hộp Select by Expression với điều kiện Dtich > 2000; các xã có diện tích trên 2000 ha được chọn và tô xanh trong bảng thuộc tính

Thanh tiêu đề bảng cho biết số đối tượng được chọn (Selected). Muốn biết tổng diện tích các lô đó, dùng Statistics Panel như trong bài Bảng thuộc tính QGIS: mở, lọc, sắp xếp, tùy chỉnh cột.

Ba quy tắc viết điều kiện

Thành phần

Cách viết

Ví dụ

Tên trường

Trong ngoặc kép

"xa", "dtich"

Giá trị chữ

Trong nháy đơn

'Xã Gio An'

Giá trị số

Viết thẳng, không ngoặc

19522, 5

Ví dụ tìm xã Gio An theo mã: "maxa" = 19522. Tìm theo tên: "xa" = 'Xã Gio An'.

Giá trị chữ phải khớp từng ký tự: trong dữ liệu ghi Xã Gio An mà gõ Gio An thì không ra kết quả nào. Để khỏi gõ sai, trong hộp biểu thức mở nhóm Fields and Values, chọn trường, bấm All Unique ở khung bên phải — QGIS liệt kê mọi giá trị đang có, nhấp đúp để chèn vào biểu thức.

Các toán tử hay dùng

OR — thoả một trong các điều kiện. Lấy tất cả lô thuộc hai xã:

"xa" = 'Thị Trấn Cam Lộ' OR "xa" = 'Xã Cam Chính'

Các lô rừng thuộc hai xã sau khi lọc bằng điều kiện OR, hiện trên bản đồ

Các lô rừng thuộc hai xã sau khi lọc bằng điều kiện OR, hiện trên bản đồ

IN — gọn hơn khi có nhiều giá trị. Thay cho một chuỗi OR dài:

"xa" IN ('Xã Cam Chính', 'Xã Cam Hiếu', 'Xã Cam Thành')

NOT IN là ngược lại: lấy mọi lô không thuộc các xã trong danh sách.

AND — thoả đồng thời mọi điều kiện. Rừng gỗ trồng núi đất ở thị trấn Cam Lộ:

"xa" = 'Thị Trấn Cam Lộ' AND "ldlr" = 'Rừng gỗ trồng núi đất'

LIKE — tìm theo một phần giá trị, dấu % thay cho bất kỳ chuỗi ký tự nào. Các lô cập nhật diễn biến trong năm 2021, khi trường ngày lưu dạng chữ:

"datetime" LIKE '2021%'

Dùng ILIKE thay cho LIKE nếu muốn không phân biệt chữ hoa, chữ thường.

IS NULL / IS NOT NULL — tìm ô trống. Các lô chưa có tên chủ rừng:

"churung" IS NULL

BETWEEN — trong một khoảng. "dtich" BETWEEN 1 AND 5 lấy các lô từ 1 đến 5 ha, tính cả hai đầu.

Kết hợp nhiều điều kiện

Bài toán ở đầu bài — lô rừng tự nhiên ở xã Sơn Trạch, diện tích trên 5 ha. Trong bài tập của lớp, nhóm rừng tự nhiên được lấy theo mã loại đất loại rừng (maldlr) từ 1 đến 59:

"xa" = 'Xã Sơn Trạch' AND ("maldlr" > 0 AND "maldlr" < 60) AND "dtich" > 5

Hộp Select by Expression với biểu thức kết hợp ba điều kiện: xã Sơn Trạch, mã loại đất loại rừng từ 1 đến 59 và diện tích lớn hơn 5 ha

Hộp Select by Expression với biểu thức kết hợp ba điều kiện: xã Sơn Trạch, mã loại đất loại rừng từ 1 đến 59 và diện tích lớn hơn 5 ha

Kết quả: 80 lô. Chú ý dấu ngoặc đơn bao quanh nhóm điều kiện mã rừng. Khi trộn AND với OR, luôn dùng ngoặc để chỉ rõ cái nào đi với cái nào: "xa" = 'A' OR "xa" = 'B' AND "dtich" > 5 khác hẳn ("xa" = 'A' OR "xa" = 'B') AND "dtich" > 5.

Lưu ý quan trọng: Khoảng mã trong ví dụ chỉ dùng cho bài tập. Theo bảng mã của Thông tư 33/2018 dùng trong tài liệu tập huấn, rừng tự nhiên gồm các mã từ 1 đến 64. Trước khi lọc dữ liệu của đơn vị mình, mở bảng mã đang áp dụng để lấy đúng khoảng mã.

Thêm, bớt vào lựa chọn đang có

Nút Select Features có mũi tên xổ xuống với ba lựa chọn khác:

  • Add to Current Selection — chọn thêm, giữ các lô đã chọn trước đó.
  • Remove from Current Selection — bỏ bớt các lô thoả điều kiện khỏi lựa chọn.
  • Filter Current Selection — chỉ giữ lại những lô vừa đang chọn vừa thoả điều kiện mới.

Cách này giúp chia một bài toán khó thành nhiều bước dễ kiểm tra.

Lọc lớp (Filter) — khác với chọn

Chọn chỉ tô sáng, các lô khác vẫn còn. Lọc lớp thì ẩn hẳn các lô không thoả điều kiện, như thể lớp chỉ có những lô đó:

  1. Nhấp phải lớp ▸ Filter…
  2. Gõ điều kiện vào khung dưới (cùng cú pháp như trên), bấm Test để xem có bao nhiêu đối tượng thoả, rồi OK.

Lớp đang bị lọc có biểu tượng phễu cạnh tên trong Layers Panel. Muốn bỏ lọc, mở lại Filter…, bấm Clear rồi OK.

Dùng lọc lớp khi muốn in bản đồ riêng một xã từ lớp cả huyện — các xã khác biến mất khỏi bản đồ và chú giải mà không phải cắt dữ liệu.

Xuất các lô tìm được ra file mới

  1. Chọn lô bằng biểu thức như trên.
  2. Nhấp phải lớp ▸ Export ▸ Save Selected Features As…
  3. Chọn định dạng (GeoPackage hoặc ESRI Shapefile), đặt tên file, kiểm tra hệ tọa độ, bấm OK.

Hộp lưu đã tích sẵn Save only selected features — file mới chỉ chứa các lô đang chọn.

Lỗi thường gặp

  • Biểu thức báo lỗi đỏ, nút Select Features mờ: thiếu nháy đơn quanh giá trị chữ, hoặc dùng nháy kép cho giá trị ("xa" = "Xã Gio An" là sai — QGIS hiểu "Xã Gio An" là tên trường).
  • Biểu thức hợp lệ nhưng chọn được 0 lô: giá trị gõ không khớp dữ liệu (thiếu chữ "Xã", thừa dấu cách, sai dấu tiếng Việt). Dùng All Unique để lấy giá trị đúng.
  • So sánh số cho kết quả lạ ("tk" > 600 chọn cả lô tiểu khu 61): trường tiểu khu đang lưu dạng chữ, QGIS so sánh theo thứ tự chữ cái. Dùng to_int("tk") > 600.
  • Quên bỏ lọc lớp: lớp "mất" một nửa số lô. Nhìn biểu tượng phễu trong Layers Panel.

Câu hỏi thường gặp

Biểu thức này có phải SQL thật không? Gần giống phần điều kiện WHERE của SQL, nên người quen MapInfo hay Access viết được ngay. QGIS bổ sung thêm rất nhiều hàm riêng (xử lý chữ, ngày tháng, hình học) trong danh sách bên giữa hộp biểu thức.

Lưu biểu thức để dùng lại được không? Được. Dùng nút lưu ở đầu khung biểu thức để lưu thành biểu thức người dùng; lần sau mở nhóm User expressions là có.

Bài tiếp theo

Bài 3: Cập nhật thuộc tính hàng loạt bằng Field Calculator — chọn được lô rồi thì sửa giá trị cho cả trăm lô trong một lần.

―――

Bài viết biên soạn lại từ tài liệu tập huấn "Ứng dụng QGIS trong quản lý tài nguyên rừng" – Dự án Quản lý rừng bền vững và Bảo tồn đa dạng sinh học (VFBC/USAID), Quảng Trị 2024. Tác giả: Vũ Văn Thái.

Bài liên quan