Bài 5: Tạo kiểu lớp vector

- Quảng cáo -

Chúng ta đã tải các lớp vectơ, xem xét các thuộc tính của chúng và các tính năng được lọc dựa trên các thuộc tính này. Bây giờ đã có thời gian để xem xét cách thay đổi kiểu vectơ lớp vector.

Ví dụ sau đây giả định rằng bạn đã tải một lớp vectơ điểm:

uri ="E:/Geodata/NaturalEarth/vector_v4/natural_earth_vector.gpkg_v4.1.0/packages/natural_earth_vector.gpkg|layername=ne_110m_populated_places_simple"
vlayer =iface.addVectorLayer(uri, "places", "ogr")

Theo mặc định, QGIS hiển thị các điểm dưới dạng các vòng tròn được tô màu ngẫu nhiên. Chúng ta có thể thay đổi hệ thống ký hiệu như sau.

Trước tiên, hãy để làm cho các vòng tròn lớn hơn:

vlayer.renderer().symbol().setSize(6)
vlayer.triggerRepaint()

Nhớ gọi triggerRepaint() để thấy được những thay đổi có hiệu lực.

vlayer.renderer() cho phép chúng ta truy cập vào đối tượng kết xuất lớp vector. Có nhiều loại trình kết xuất khác nhau. Là người dùng QGIS, bạn biết chúng là Single Symbol (QgsSingleSymbolRenderer), Categorized (QgsCategorizedSymbolRenderer), Graduated (QgsGraduatedSymbolRenderer),…

Theo mặc định, các lớp vectơ được chỉ định trình kết xuất biểu tượng. Các trình kết xuất này có một ký hiệu duy nhất mà chúng ta có thể truy cập bằng cách sử dụng hàm Symbol().

Bây giờ chúng ta có quyền truy cập vào biểu tượng, chúng ta có thể thay đổi kích thước của nó bằng hàm setSize(), cung cấp cho nó một giá trị số cho kích thước mong muốn.

Tương tự, chúng ta có thể thay đổi biểu tượng Màu sắc sử dụng setColor():

vlayer.renderer().symbol().setColor(QColor("blue"))
vlayer.triggerRepaint()

Hàm setColor() mong đợi một đối tượng QColor làm tham số của nó. Đây là lý do tại sao chúng tôi tạo một đối tượng QColor mới bằng cách sử dụng QColor(“blue”).

Cuối cùng, hãy thay những vòng tròn bằng những ngôi sao:

vlayer.renderer().symbol().symbolLayer(0).setShape(QgsSimpleMarkerSymbolLayerBase.Star)
vlayer.triggerRepaint()

Lưu ý cách chúng ta không gọi symbol().setShape() mà là symbol().symbolLayer(0).setShape() ! Điều này là do mỗi biểu tượng có thể bao gồm nhiều lớp biểu tượng nhưng theo mặc định, nó chỉ có một. Chúng ta có thể truy cập lớp biểu tượng đầu tiên (và duy nhất) này bằng cách sử dụng SymbolLayer(0). Lớp biểu tượng là nơi thích hợp để thay đổi hình dạng của điểm đánh dấu bằng setShape(). Các hình dạng có sẵn (dựa trên QssSimpleMarkerSymbolLayerBase) bao gồm: Arrow, ArrowHead, ArrowHeadFilled, Circle, Cross, Cross2, CrossFill, DiagonalHalfSquare, Diamond, EquilateralTriangle, HalfSquare, Hexagon, LeftHalfTriangle, Line, Pentagon, QuarterCircle, QuarterSquare, RightHalfTriangle, SemiCircle, Square, Star, ThirdCircle, và Triangle.

Cuối cùng, bạn có thể nhận thấy rằng biểu tượng trong danh sách lớp (ngay bên cạnh tên lớp) chưa được cập nhật. Để khắc phục điều này, chúng ta cần gọi đúng chức năng làm mới:

iface.layerTreeView().refreshLayerSymbology(vlayer.id())

Hàm refreshLayerSymbology() cần biết lớp mã vạch nào nên được làm mới. Đó là lý do tại sao chúng ta cần cung cấp cho nó id của lớp.

Trên đây là những điều cơ bản của kiểu dáng vector sử dụng trình kết xuất biểu tượng duy nhất với một biểu tượng bao gồm một lớp biểu tượng.

Bình luận bằng Facebook Comments

MẠNG XÃ HỘI

1,010ThíchThích
432Đăng kýĐăng Ký

TOOL PXTmap.com

BÀI VIẾT LIÊN QUAN

Bài 14: Viết kịch bản xử lý

Trong các bài trước, chúng tôi đã đề cập đến cách chạy các công cụ Processing cũng như cách xâu chuỗi các...

Bài 13: Tạo các hàm để tải các lớp GeoPackage

Hiện tại chúng ta đã từng sử dụng GeoPackages. Ví dụ: trong Tải một lớp vectơ, chúng tôi đã giới thiệu cách...

Bài 12: Sử dụng biểu thức để tính giá trị

Trong các bài trước đây, chúng tôi đã đề cập đến cách tạo các lớp vectơ, cách thêm các trường vào bảng...

Bài 11: Quản lý các lớp dự án (đổi tên và loại bỏ)

Trong các bài trước, chúng tôi đã đề cập đến việc thêm các lớp từ các tệp cũng như tạo các lớp...

Bài 10: Công cụ chuỗi xử lý (Chaining Processing)

Trong Bài 7: Chạy công cụ xử lý (Processing), chúng ta đã khám phá những điều cơ bản của việc chạy các...