Làm việc với dữ liệu thuộc tính của file vector: nhập dữ liệu, tính toán trường dữ liệu, liên kết bảng dữ liệu ngoài (Joining External Tables)
Lý thuyết
Đọc tài liệu: Tim Sutton et al. 2009, A Gentle Introduction to GIS, Chapter 4. Vector Attribute Data: https://docs.qgis.org/3.40/en/docs/gentle_gis_introduction/vector_attribute_data.html
Tạo các trường thuộc tính và nhập dữ liệu
Bài trước đã trình bày cách nhập dữ liệu thuộc tính khi số hóa các đối tượng. Bài này sẽ giới thiệu những cách nhập và tạo dữ liệu thuộc tính cho những lớp đã có sẵn.
Nhập dữ liệu thuộc tính thủ công
- Ở bài trước, bạn đã tạo một số lớp và đã nhập một số trường thuộc tính khi số hóa xong mỗi đối tượng. Ví dụ lớp Main_roads:

Bảng thuộc tính của lớp Main_roads, bao gồm trường id và trường Type đã tạo từ bài trước
Nhiệm vụ của phần này là tạo một trường dữ liệu mới tên là Code ở lớp Main_Roads, sau đó nhập dữ liệu thuộc tính thủ công.
Thực hiện như sau:
- Bật Toogle Editing lớp Main_Roads.
- Ấn nút New Field để bắt đầu tạo một trường dữ liệu mới.

Thực hiện tạo một trường dữ liệu mới - Ô cửa sổ Add field xuất hiện để tiếp tục xác lập các tham số:
- Name: tên trường
- Type: kiểu dữ liệu. Tùy ý nghĩa thuộc tính mà xác lập kiểu dữ liệu là số nguyên (vd; dân số), số thập phân (vd: diện tích đất), kiểu kí tự (vd: tên địa danh), hay kiểu ngày (ngày sinh).
- Length: độ dài của dữ liệu.

Xác lập tham số khi tạo trường dữ liệu 
Kết quả khi tạo trường Code
- Sau đó, nhập Code cho các đối tượng ở bảng thuộc tính bằng cách đánh vào các ô tương ứng. Ví dụ: L7, L8, …, L11
- Để lưu quá trình chỉnh sửa ấn Save edits ở bảng thuộc tính. Hoặc có thể ấn Save layer edits ở Toolbar cũng được.

Kết quả sau khi nhập Code
Có thể hiện Code dưới dạng label ở Map Canvas. Nên format cho label kiểu Halo, nghĩa là có buffer xung quanh chữ.
Nhập dữ liệu thuộc tính dựa vào công cụ tính toán Field calculator
Phần mềm QGIS hoặc các phần GIS khác đều tích hợp chức năng tính toán các tham số hình học cho đối tượng như diện tích, chu vi, độ dài …
Đây là một chức năng hữu ích và được sử dụng phổ biến của các phần mềm GIS.
Phần này sẽ giới thiệu cách tính diện tích của các đối tượng lớp Lake một cách tự động, và đưa các kết quả tính toán về một trường dữ liệu.
Các bước thực hiện:
- Mở bảng thuộc tính lớp Lake
- Ấn Open Field Calculator

Open Field Calculator - Xác lập các tham số:
- Tick vào Create a new field. Trong trường hợp bạn đã tạo trường sẵn từ trước, thì chọn Update existing field (bên phải).
- Đặt tên trường là Area
- Kiểu dữ liệu là số thập phân - decimal number
- length: lấy bao nhiêu số và precision: bao nhiêu số sau dấu phẩy. Đề giá trị mặc định là 10, và 3 tương ứng.
- Chọn hàm area ở mục Geometry, hoặc có thể đánh trực tiếp $area
- Nếu không có lỗi, mục preview phía dưới sẽ hiện một kết quả mẫu.

Xác lập tham số Field Calculator 
Kết quả tính toán diện tích hồ Bảo Linh
Hãy check CRS của lớp Lake và trả lời câu hỏi đơn vị của giá trị diện tích QGIS tính ra là gì? m2, hay km2 …?
Đơn vị của diện tích lớp Lake vừa tính?
Là m2
Vậy muốn chuyển đổi đơn vị này sang ha và km2 thì phải làm thế nào? Biết rẳng 1 ha = 10,000 m2
, 1 km2 = 1,000,000 m2
. Suy nghĩ và thực hiện, yêu cầu kết quả là tạo ra 2 trường Area_ha, Area_km2 với giá trị được tính toán tự động.
Liên kết bảng dữ liệu bên ngoài (Joining External Tables)
- Trong QGIS, Joining External Tables (kết nối bảng dữ liệu bên ngoài) là tính năng cho phép bạn liên kết (join) dữ liệu từ một bảng thuộc tính của một lớp (vector layer) với một bảng thuộc tính bên ngoài (có thể là file .csv, Excel, bảng từ database, v.v.) dựa trên một trường có chung giá trị (gọi là key field/common field, ví dụ mã vùng, tên đối tượng, ID). Các giá trị của trường chung phải hoàn toàn giống nhau.
- Sau khi join, các cột từ bảng ngoài sẽ xuất hiện trong bảng thuộc tính của layer chính, và có thể được sử dụng để hiển thị, phân loại, tạo nhãn, hoặc phân tích.
- Đây là một công cụ cực kỳ hữu ích để mở rộng hoặc bổ sung thông tin cho dữ liệu không gian mà không cần chỉnh sửa trực tiếp lớp gốc.
Lấy dữ liệu để thực hành
Thực hành module Part 4.
Download dữ liệu Dataset Part 4 ở đây.
Dữ liệu bao gồm lớp:
- File csv thông tin dân số năm 2015 của 63 tỉnh thành trước sát nhập: 2015 provincial population.csv
- File csv thông tin về diện tích rừng trồng và rừng tự nhiên của 2 năm 2005 và 2016: Vietnam_Provinces_Forested_Area(Ha).csv
Thực hành liên kết bảng dữ liệu bên ngoài
Nhiệm vụ trong phần này là kết nối dữ liệu dân số cấp tỉnh ở file csv 2015 provincial population.csv với bảng thuộc tính của lớp Vietnam_provinces, thể hiện ranh giới hành chính cấp tỉnh.
Add file Vietnam_provinces đã download từ bài thực hành phần 1: Download dữ liệu Dataset Part 1 ở đây
Có thể kiểm tra nhanh số lượng đối tượng của lớp bằng công cụ Show feature count. Thực hiện: chọn lớp Vietnam_provinces ở Layers Panel > chuột phải và chọn Show feature count > tổng số đối tượng sẽ hiện ở bên phải tên lớp, ở Layers Panel.

Show feature count Add file “2015 provincial population.csv” vào Layers Panel bằng công cụ Delimited Text ở Data Source Manager. Cần tick vào lựa chọn No geometry, vì file này không có các trường tọa độ. Kiểm tra lại kiểu dữ liệu của các trường xem đã chính xác chưa.

Add file dữ liệu csv bằng công cụ Delimited Text
Do đó, phải thêm file csv bằng công cụ Delimited text.
- Xác định trường chung: mở bảng thuộc tính của “2015 provincial population.csv” và bảng thuộc tính của Vietnam_Provinces. So sánh, đối chiếu 2 bảng này và trả lời câu hỏi:
Trường nào là trường chung của 2 bảng 2015 provincial population.csv và Vietnam_Provinces?
Trường Province ở file csv và trường VARNAME_1 của Vietnam_Provinces hoàn toàn giống nhau, đó chính là trường chung.
- Dựa trên trường chung để kết nối 2 bảng thuộc tính. Cách thực hiện:
- Chuột phải vào lớp Vietnam_Provinces > Properties > Joins. Sau đó ấn nút dấu +

Chuẩn bị kết nối bảng csv và bảng dữ liệu Vietnam_Provinces - Thiết lập các tham số ở cửa sổ Add Vector Join:
- Join layer là bảng csv cần thêm vào
- Join field là trường chung ở csv
- Target field là trường chung ở lớp vector đang chọn.

Thiết lập các tham số ở cửa sổ Add Vector Join
- Ấn OK.
- Chuột phải vào lớp Vietnam_Provinces > Properties > Joins. Sau đó ấn nút dấu +
- Kết quả: bảng thuộc tính của Vietnam_Provinces hiện giờ đã xuất hiện thêm 5 cột dữ liệu dân số kết nối từ file csv.

Kết quả khi join external table - Có một số hàng không thể kết nối dữ liệu và hiển thị giá trị NULL. Nguyên nhân: do tên tỉnh ở trường chung không giống nhau hoàn toàn nên không thể kết nối dữ liệu.
- Cuối cùng, dữ liệu kết nối bảng bên ngoài chỉ là kết nối tạm thời, không phải cố định. kết nối này sẽ mất khi remove lớp Vietnam_Provinces.
- Để kết nối này chuyển thành cố định, cần lưu file này sang một file mới: chuột phải vào lớp Vietnam_Provinces, Export > Save Feature As, điền tên và lưu.

Lưu file Vietnam_Provinces đang có kết nối sang một file khác
Homework
Phần nhập dữ liệu thủ công và tính toán Field Calculator
- Số hóa lại thật chính xác Hồ Bảo Linh và tính diện tích hồ. Sau đó so sánh với số liệu công bố ở Wikipedia
- Tính diện tích tự động cho lớp Islands, đơn vị yêu cầu: tính theo đơn vị m2
- Tính chu vi của các đảo, kết quả được tạo và lưu ở trường “Perimeter”.
- Hiện label các đảo bằng số liệu chu vi vừa tính. Yêu cầu kết qủa như hình dưới:

Yêu cầu kết quả của phần nhập liệu và tính toán field calculator
Phần nhập kết nối với bảng bên ngoài:
6. Sửa lại các giá trị ở trường chung ở file Vietnam_Provinces để hoàn toàn khớp với giá trị ở csv. Sau đó join lại bảng xem đã khắc phục được vấn đề chưa.
7. Khi không còn hàng nào có giá trị NULL ở các cột dân số, hãy lưu lớp và đặt tên là Vietnam_provinces_2015population để chuyển kết nối bảng dữ liệu thành cố định.