Sau đợt rà soát, 120 lô ở xã A đổi chủ rừng; cả lớp hiện trạng cần thêm cột "nguồn gốc rừng" suy ra từ mã loại đất loại rừng; cột diện tích phải tính lại sau khi sửa ranh. Sửa tay từng ô thì vừa lâu vừa sót. QGIS có hai công cụ sửa cả trăm, cả nghìn lô trong một lần: thanh cập nhật nhanh và Field Calculator (máy tính trường). Bài này hướng dẫn cả hai, kèm bộ biểu thức hay dùng nhất trong lâm nghiệp.
Đây là bài 3 trong series Thuộc tính, truy vấn và thống kê dữ liệu lâm nghiệp trong QGIS.
Cách 1: thanh cập nhật nhanh
Dùng khi cần gán cùng một giá trị cho nhiều lô.
- Mở bảng thuộc tính, bật bút chì chỉnh sửa.
- Chọn các lô cần sửa — bằng chuột hoặc bằng biểu thức như bài Lọc lô rừng theo xã, chủ rừng, trạng thái bằng biểu thức SQL.
- Trên thanh nằm ngay dưới thanh công cụ của bảng: ô bên trái chọn trường cần sửa, ô bên phải gõ giá trị mới.
- Bấm Update Selected để chỉ sửa các lô đang chọn, hoặc Update All để sửa toàn bộ lớp.

Thanh cập nhật nhanh trên bảng thuộc tính: 1 chọn trường fid, 2 gõ giá trị 2000, 3 nút Update All, 4 nút Update Selected; 6 xã đang được chọn
Ô giá trị nhận cả biểu thức, không chỉ số cố định — bấm nút ε bên cạnh để mở hộp biểu thức.
Lưu ý quan trọng: Update All không hỏi lại. Bấm nhầm là cả lớp bị ghi đè. Nếu lỡ tay, nhấn Ctrl + Z ngay khi chưa lưu; đã lưu rồi thì không hoàn tác được — luôn sao lưu file trước khi cập nhật hàng loạt.
Cách 2: Field Calculator
Dùng khi giá trị khác nhau theo từng lô — tính diện tích, ghép chuỗi, phân loại theo điều kiện.
- Mở bảng thuộc tính, bấm nút Open Field Calculator (biểu tượng bàn tính), hoặc nhấn Ctrl + I.
- Chọn một trong hai:
- Create a new field — tạo cột mới: đặt tên (Output field name), kiểu (Output field type), độ dài.
- Update existing field — ghi đè vào cột đã có, chọn cột trong danh sách.
- Gõ biểu thức vào khung Expression. Dòng Preview bên dưới hiện ngay kết quả cho đối tượng đầu tiên — nhìn đó để kiểm tra trước khi chạy.
- Bấm OK, rồi lưu lớp.

Field Calculator tạo trường mới: 1 tích Create a new field, 2 tên trường phanloai, 3 kiểu Text, 4 độ dài 50, 5 và 6 tìm hàm CASE, 7 gõ biểu thức CASE, 8 bấm OK
Nếu đang có lô được chọn, ô Only update N selected features ở đầu hộp sẽ sáng: tích vào thì chỉ tính cho các lô đang chọn.
Đặt tên trường mới ngắn, không dấu, không cách (phanloai, dt_ha) — Shapefile chỉ nhận tên trường tối đa 10 ký tự.
Bộ biểu thức hay dùng
Việc cần làm | Biểu thức | Ghi chú |
Diện tích (ha) | round($area / 10000, 2) | $area ra m², chia 10.000 thành ha, làm tròn 2 số lẻ |
Chiều dài (m) | $length | Chia 1000 để ra km |
Chu vi | perimeter($geometry) | |
Tọa độ điểm | $x và $y | Cho lớp điểm |
Tọa độ tâm lô | X(pole_of_inaccessibility($geometry, 1)) | Tương tự với Y(…); tâm luôn nằm trong lô |
Đánh số thứ tự | @row_number | Không dùng $id vì có thể ra số âm |
Tuổi rừng trồng | year(now()) - "namtrong" | Trường năm trồng kiểu số |
Thay chữ | replace("churung", 'UBND xa', 'UBND xã') | Sửa lỗi chính tả hàng loạt |
Ghép chuỗi | "tk" || '-' || "khoanh" || '-' || "lo" | Tạo mã lô duy nhất |
Lưu ý quan trọng: $area, $length chỉ ra số đúng khi lớp ở hệ tọa độ đơn vị mét như VN-2000. Lớp ở WGS 84 sẽ cho số rất nhỏ, vô nghĩa — xem bài Gán CRS và Reproject.
Tâm lô dùng pole_of_inaccessibility thay vì centroid vì với lô cong queo, hình chữ U, tâm hình học có thể rơi ra ngoài lô.
Phân loại theo điều kiện: CASE WHEN
Lớp hiện trạng có mã loại đất loại rừng (maldlr) nhưng chưa có cột nguồn gốc. Theo bảng mã của Thông tư 33/2018 dùng trong tài liệu tập huấn: mã 1–64 là rừng tự nhiên, 65–86 là rừng trồng, 87–92 là đất trống, 93–98 là đất khác. Thay vì lọc và cập nhật bốn lần, viết một biểu thức:
CASE
WHEN "maldlr" BETWEEN 1 AND 64 THEN 'Rừng tự nhiên'
WHEN "maldlr" BETWEEN 65 AND 86 THEN 'Rừng trồng'
WHEN "maldlr" BETWEEN 87 AND 92 THEN 'Đất trống'
WHEN "maldlr" BETWEEN 93 AND 98 THEN 'Đất khác'
ELSE 'Không rõ'
END
QGIS xét lần lượt từ trên xuống, gặp điều kiện đúng đầu tiên thì dừng. Nhánh ELSE bắt mọi lô không rơi vào nhánh nào — lô mang giá trị "Không rõ" chính là lô có mã lạ cần kiểm tra lại.

Bảng thuộc tính sau khi chạy Field Calculator: cột phanloai mới được điền giá trị Rừng tự nhiên hoặc Đất khác cho từng lô
Ví dụ khác: đổi mã ba loại rừng (MALR3) thành tên đầy đủ. Mã đang lưu dạng chữ nên giá trị nằm trong nháy đơn:
CASE
WHEN "MALR3" = '1' THEN 'Rừng phòng hộ'
WHEN "MALR3" = '2' THEN 'Rừng đặc dụng'
WHEN "MALR3" = '3' THEN 'Rừng sản xuất'
ELSE 'Ngoài 3 loại rừng'
END

Field Calculator tạo trường ten3lr bằng biểu thức CASE theo MALR3; khung Values bên phải bấm All Unique liệt kê các giá trị đang có: NULL, 1, 2, 3
Mẹo: chọn trường trong danh sách giữa hộp, bấm All Unique để xem trường đó đang có những giá trị nào — biết trước có NULL hay mã lạ để thêm nhánh xử lý.
Hai nhánh: hàm if
Khi chỉ có hai khả năng, if gọn hơn CASE:
if("dtich" >= 0.3, 'Đủ diện tích lô', 'Lô nhỏ, cần gộp')
Cú pháp: if(điều kiện, giá trị khi đúng, giá trị khi sai).
Trường ảo: tự tính lại khi dữ liệu đổi
Tích Create virtual field khi tạo trường mới: trường không lưu vào file mà được tính lại mỗi lần hiển thị. Hợp với cột diện tích dùng để xem trong dự án — sửa ranh là số đổi theo. Nhược điểm: trường ảo chỉ tồn tại trong dự án .qgz, xuất file sang máy khác sẽ không có. Cần giao nộp dữ liệu thì dùng trường thật.
Lỗi thường gặp
- Hộp Field Calculator báo "Expression is invalid": thiếu nháy, thiếu ngoặc, hoặc gõ sai tên trường. Nhấp đúp tên trường trong danh sách để chèn cho chắc.
- Kết quả chỉ ra NULL: trường nguồn có ô trống; mọi phép tính với NULL đều ra NULL. Dùng coalesce("truong", 0) để thay ô trống bằng 0.
- Số thập phân bị cắt mất: tạo trường kiểu số nguyên (Integer) cho diện tích. Tạo lại với kiểu Decimal number (real).
- Chữ tiếng Việt bị cụt: độ dài trường quá ngắn so với nội dung. Đặt Output field length đủ lớn (50–100).
Câu hỏi thường gặp
Muốn diện tích tự cập nhật mỗi khi vẽ lô mới? Đặt giá trị mặc định cho trường diện tích trong form nhập — xem bài Thiết kế form nhập nhanh thuộc tính trong QGIS.
Field Calculator có thay được lệnh Update của MapInfo không? Có, và mạnh hơn: tương đương Table ▸ Update Column, cộng thêm hàng trăm hàm xử lý chữ, ngày tháng, hình học.
Bài tiếp theo
Bài 4: Join bảng Excel, CSV vào lớp bản đồ để cập nhật dữ liệu — khi số liệu mới nằm trong file Excel của đơn vị.
―――
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.






