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