Renk stilini, katmanın öznitelik tablosundaki bir renk sütununa nasıl kopyalayabilirim?


15

Her çokgene rastgele renk stili uyguladığım QGIS'de çokgen katmanım var. Katman Özellikleri -> Stil altında, Kategorize bir stil seçtim ve sonra rastgele bir renk rampası oluşturdum. Katman tablosuna bir renk sütunu ekledim. Tarzda atanan rengi otomatik olarak "# ff0000" biçimindeki her çokgenin renk sütununa kopyalamanın bir yolu var mı?

Sonuçta, bunu bir GeoJSON katmanı olarak dışa aktarmak ve bir broşür haritasına aktarmak istiyorum. Renk sütunu broşürdeki rengi ayarlayacaktır.

Yanıtlar:


22

Bunun için PyQGIS kullanabilirsiniz (bunun için en iyi çözüm olduğundan emin değilsiniz).

QGIS ToC'de katmanı seçin (veya etkinleştirin), QGIS Python konsolunu açın ve bu kod snippet'ini kopyalayın:

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 )

Sanırım renkleri depolamak için alanınıza 'renk' denir. Çalıştırdıktan sonra bunu elde ettim:

resim açıklamasını buraya girin

Herhangi bir sorunla karşılaşırsan haberim olsun.


RGB için bunu yapmak mümkün mü?
Diogo Caribé

Elbette. Aramak yerine, şöyle bir cat.symbol().color().name()şey yapın:str(cat.symbol().color().red()) +','+ str(cat.symbol().color().green()) +','+ str(cat.symbol().color().blue())
Germán Carrillo

Hala qgis 3.6'da, API yeniden adlandır rendererV2 -> renderer
sabas

Burada QGis 3.6 üzerinde çalışmadı. RendererV2'yi oluşturucu olarak yeniden adlandırdım, ancak çalışmadı.
Paladini
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.