如何将颜色样式复制到图层的属性表中的颜色列?


15

我在QGIS中有一个多边形图层,已为每个多边形应用了随机的颜色样式。在“图层属性->样式”下,我选择了“分类样式”,然后生成了一个随机的颜色渐变。我在图层表中添加了颜色列。有没有一种方法可以自动将样式中分配的颜色以“#ff0000”形式复制到每个多边形的颜色列中。

最终,我想将其导出为GeoJSON图层,并将其导入到传单地图中。颜色列将在传单中设置颜色。

Answers:


22

您可以为此使用PyQGIS(尽管不确定是最好的解决方案)。

选择(或激活)QGIS ToC中的图层,打开QGIS Python控制台,然后复制以下代码片段:

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 )

我假设您存储颜色的字段称为“颜色”。运行它之后,我获得了这一点:

在此处输入图片说明

如果您遇到任何问题,请告诉我。


是否有可能为RGB做到这一点?
迪奥戈CARIBE

当然。而不是调用的cat.symbol().color().name(),做这样的事情:str(cat.symbol().color().red()) +','+ str(cat.symbol().color().green()) +','+ str(cat.symbol().color().blue())
赫尔曼·卡里略

在qgis 3.6中仍然有效,除了API重命名rendererV2-> renderer
sabas

这里没有使用QGis 3.6。我已经将rendererV2重命名为renderer,但是没有用。
Paladini
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.