Bagaimana cara menyalin gaya warna ke kolom warna di tabel atribut layer?

15

Saya memiliki lapisan poligon di QGIS yang telah saya terapkan gaya warna acak untuk setiap poligon. Di bawah Layer Properties -> Style Saya memilih style Categorized dan kemudian menghasilkan ramp warna acak. Saya menambahkan kolom warna ke tabel layer. Apakah ada cara untuk secara otomatis menyalin warna yang ditetapkan dalam gaya ke kolom warna untuk setiap poligon dalam bentuk "# ff0000".

Pada akhirnya, saya ingin mengekspornya sebagai layer GeoJSON dan mengimpornya ke peta selebaran. Kolom warna akan mengatur warna dalam leaflet.

pengguna2956607
sumber

Jawaban:

22

Anda bisa menggunakan PyQGIS untuk itu (meskipun tidak yakin adalah solusi terbaik untuk itu).

Pilih (atau aktifkan) layer di ToC QGIS, buka konsol QGIS Python, dan salin cuplikan kode ini:

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 )

Saya menganggap bidang Anda untuk menyimpan warna disebut 'warna'. Setelah menjalankannya, saya mendapatkan ini:

masukkan deskripsi gambar di sini

Beri tahu saya jika Anda menghadapi masalah.

Germán Carrillo
sumber
Apakah ada kemungkinan untuk melakukannya untuk RGB?
Diogo Caribé
Tentu. Alih-alih menelepon cat.symbol().color().name(), lakukan sesuatu seperti ini:str(cat.symbol().color().red()) +','+ str(cat.symbol().color().green()) +','+ str(cat.symbol().color().blue())
Germán Carrillo
Masih berlaku di qgis 3.6, selain dari API ganti nama rendererV2 -> renderer
sabas
Tidak bekerja di QGis 3.6 di sini. Saya telah mengganti nama rendererV2 menjadi renderer, tetapi tidak berhasil.
Paladini