Làm cách nào để sao chép kiểu màu vào cột màu trong bảng thuộc tính của lớp?


15

Tôi có một lớp đa giác trong QGIS mà tôi đã áp dụng một kiểu màu ngẫu nhiên cho mỗi đa giác. Trong Thuộc tính lớp -> Kiểu tôi đã chọn kiểu Phân loại và sau đó tạo một đoạn màu ngẫu nhiên. Tôi đã thêm một cột màu vào bảng lớp. Có cách nào để tự động sao chép màu được gán theo kiểu vào cột màu cho mỗi đa giác ở dạng "# ff0000".

Cuối cùng, tôi muốn xuất nó dưới dạng lớp GeoJSON và nhập nó vào bản đồ tờ rơi. Cột màu sẽ đặt màu trong tờ rơi.

Câu trả lời:


22

Bạn có thể sử dụng PyQGIS cho điều đó (mặc dù không chắc chắn là giải pháp tốt nhất cho nó).

Chọn (hoặc kích hoạt) lớp trong QGIS ToC, mở bảng điều khiển Python của QGIS và sao chép đoạn mã này:

prefix = "'"
layer = iface.activeLayer()
attr = layer.rendererV2().classAttribute()
attrColor = 'color' # Name of the field to store colors
fieldIndex = layer.dataProvider().fieldNameIndex(attrColor)
attrFeatMap = {}

for cat in layer.rendererV2().categories(): 
  expr = "\""+attr+"\"="+prefix+unicode(cat.value())+prefix
  for f in layer.getFeatures(QgsFeatureRequest(QgsExpression(expr))):
    attrMap = { fieldIndex : cat.symbol().color().name()}
    attrFeatMap[ f.id() ] = attrMap

layer.dataProvider().changeAttributeValues( attrFeatMap )

Tôi giả sử lĩnh vực của bạn để lưu trữ màu sắc được gọi là "màu". Sau khi chạy nó, tôi đã có được điều này:

nhập mô tả hình ảnh ở đây

Hãy cho tôi biết nếu bạn phải đối mặt với bất kỳ vấn đề.


Có possibilite để làm điều đó cho RGB?
Diogo Caribé

Chắc chắn rồi. Thay vì gọi cat.symbol().color().name(), hãy làm một cái gì đó như thế này:str(cat.symbol().color().red()) +','+ str(cat.symbol().color().green()) +','+ str(cat.symbol().color().blue())
Germán Carrillo

Vẫn hợp lệ trong qgis 3.6, ngoài API đổi tên trình kết
xuấtV2

Không làm việc trên QGis 3.6 ở đây. Tôi đã đổi tên rendererV2 thành renderer, nhưng không hoạt động.
Paladini
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.