Lớp lô rừng số hoá mới chưa có cột tên xã, tiểu khu — nhưng trong dự án đã có sẵn lớp ranh giới xã và lớp tiểu khu. Lớp điểm ô tiêu chuẩn cần biết mỗi ô nằm trong lô nào, trạng thái gì. Không có cột mã chung để nối như với bảng Excel; thứ chung duy nhất là vị trí trên bản đồ. QGIS ghép thuộc tính theo vị trí bằng công cụ Join attributes by location — lô nằm trong xã nào thì nhận tên xã đó.
Đây là bài 5 trong series Thuộc tính, truy vấn và thống kê dữ liệu lâm nghiệp trong QGIS.
Hai kiểu cập nhật từ lớp khác
Tình huống | Cách làm |
Hai lớp có cột mã chung (lớp lô rừng cũ và lớp mới cùng mã lô) | Join theo cột như với bảng Excel: Properties ▸ Joins ▸ +, chọn Join layer là lớp kia — xem bài Join bảng Excel, CSV vào lớp bản đồ |
Hai lớp chỉ chung vị trí (lô rừng và ranh xã) | Join theo vị trí — nội dung bài này |
Tìm công cụ
Mở Processing Toolbox (Ctrl + Alt + T), gõ join vào ô tìm kiếm. Ba công cụ cần dùng nằm trong nhóm Vector general:

Processing Toolbox tìm từ khoá join: nhóm Vector general có Join attributes by location, Join attributes by location (summary) và Join attributes by nearest
- Join attributes by location — lấy thuộc tính của đối tượng nằm cùng chỗ.
- Join attributes by location (summary) — đếm, cộng, lấy trung bình các đối tượng nằm cùng chỗ.
- Join attributes by nearest — lấy thuộc tính của đối tượng gần nhất, kể cả khi không chạm nhau.
Gán tên xã cho từng lô rừng
Nhấp đúp Join attributes by location, điền:
Ô | Chọn | Ý nghĩa |
Join to features in | Lớp lô rừng | Lớp nhận thuộc tính |
Features they (geometric predicate) | intersect | Quan hệ vị trí để coi là "cùng chỗ" |
By comparing to | Lớp ranh xã | Lớp cho thuộc tính |
Fields to add | Tích ten_xa, ma_xa | Để trống là lấy hết các cột |
Join type | Take attributes of the feature with largest overlap only (one-to-one) | Xem giải thích bên dưới |
Discard records which could not be joined | Không tích | Giữ cả lô nằm ngoài mọi xã để kiểm tra |
Joined layer | Đặt tên file kết quả | Để trống thì ra lớp tạm |
Bấm Run. Kết quả là một lớp mới: đủ các lô như cũ, thêm cột tên xã, mã xã ở cuối bảng thuộc tính. Lớp gốc không bị sửa.
Chọn Join type cho đúng
Đây là chỗ hay sai nhất:
- Create separate feature for each matching feature (one-to-many): lô chạm hai xã sẽ bị nhân đôi thành hai dòng. Tổng diện tích sau đó bị cộng thừa.
- Take attributes of the first matching feature only (one-to-one): lô chạm hai xã chỉ nhận xã gặp trước — có thể là xã mà lô chỉ chạm mép.
- Take attributes of the feature with largest overlap only (one-to-one): lô nhận xã mà phần lớn diện tích của nó nằm trong. Đây là lựa chọn hợp lý nhất cho lô rừng và ranh hành chính.
Lưu ý quan trọng: Ranh lô số hoá và ranh xã hiếm khi trùng khít — lô sát ranh xã gần như luôn "chạm" sang xã bên cạnh vài mét. Với dữ liệu vùng–vùng, luôn dùng largest overlap, đừng dùng one-to-many.
Gán thông tin lô cho từng điểm
Lớp điểm ô tiêu chuẩn, điểm cháy, điểm vi phạm cần biết nằm trong lô nào:
- Join to features in: lớp điểm.
- Features they: are within (nằm trong).
- By comparing to: lớp lô rừng, tích các cột tiểu khu, khoảnh, lô, trạng thái.
- Join type: one-to-one, first matching feature (một điểm chỉ nằm trong một lô).
Điểm rơi ra ngoài mọi lô sẽ có các cột mới để trống — thường là điểm đo GPS sai hoặc điểm nằm trên đường, suối.
Đếm, cộng theo vị trí: bản summary
Join attributes by location (summary) dùng khi muốn tổng hợp chứ không chỉ lấy một giá trị. Ví dụ: mỗi lô rừng có bao nhiêu điểm cháy, tổng số cây trong các ô tiêu chuẩn nằm trong lô.
- Join to features in: lớp lô rừng; By comparing to: lớp điểm cháy.
- Fields to summarise: chọn cột cần tính; Summaries to calculate: chọn count (đếm), sum (tổng), mean (trung bình)…
Kết quả có thêm các cột dạng tencot_count, tencot_sum. Chỉ cần đếm số điểm trong vùng thì công cụ Count points in polygon (nhóm Vector analysis) nhanh hơn.
Lấy theo đối tượng gần nhất
Join attributes by nearest cho điểm vi phạm nhận tên con đường gần nhất, hay cho mỗi lô biết trạm bảo vệ rừng gần nhất. Đặt Maximum distance để giới hạn (ví dụ 500 m) — xa hơn thì bỏ qua. Lớp kết quả có thêm cột distance là khoảng cách tới đối tượng gần nhất, theo đơn vị của hệ tọa độ.
Sau khi chạy xong
- Mở bảng thuộc tính lớp kết quả, chọn bằng biểu thức các dòng có cột mới trống — ví dụ "ten_xa" IS NULL — xem vì sao không ghép được.
- Kiểm tra số dòng lớp kết quả bằng số dòng lớp gốc (với kiểu one-to-one). Lệch là có lô bị nhân đôi.
- Lớp tạm thì nhấp phải ▸ Make Permanent… để lưu ra file.
Lỗi thường gặp
- Công cụ báo lỗi hình học không hợp lệ (invalid geometry): một trong hai lớp có lô tự cắt, vẽ lỗi. Chạy Fix geometries cho lớp đó trước rồi join lại.
- Không lô nào nhận được tên xã: hai lớp không chồng lên nhau vì lệch hệ tọa độ. Kiểm tra lại theo bài Vì sao dữ liệu bị lệch trong QGIS?.
- Lớp kết quả nhiều dòng hơn lớp gốc: đang để Join type one-to-many.
- Cột khoảng cách ra số rất nhỏ (0,00x): lớp ở hệ WGS 84, đơn vị là độ chứ không phải mét. Đưa về VN-2000 trước.
Câu hỏi thường gặp
Lô nằm vắt qua hai xã thì làm sao tách diện tích cho từng xã? Join chỉ gán một xã cho cả lô. Muốn cắt lô theo ranh xã để mỗi phần nhận đúng xã của nó, dùng công cụ giao cắt (Intersection) — có trong loạt bài về phân tích không gian.
Khác gì với Select by Location? Select by Location chỉ chọn các đối tượng thoả quan hệ vị trí, không thêm cột nào. Join by location chép thuộc tính sang.
Bài tiếp theo
Bài 6: Truy vấn không gian — tìm lô rừng bị cháy, lô bị đường cao tốc cắt qua.
―――
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.






