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.

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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.