Як скопіювати стиль кольорів у стовпчик кольорів у таблиці атрибутів шару?


15

У мене в QGIS є багатокутний шар, який я застосував до кожного багатокутника випадковий колірний стиль. У розділі Властивості шару -> Стиль я вибрав категоризований стиль, а потім створив випадкову кольорову рампу. Я додав кольоровий стовпчик до таблиці шарів. Чи є спосіб автоматично скопіювати колір, призначений у стилі, у стовпчик кольорів для кожного багатокутника у форму "# ff0000".

Зрештою, я хочу експортувати його як шар GeoJSON та імпортувати його на листівку. Кольоровий стовпчик задасть колір у листівці.

Відповіді:


22

Ви можете використовувати PyQGIS для цього (не впевнений, що це найкраще рішення для цього).

Виберіть (або активуйте) шар у QCIS 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?
Diogo Caribé

Звичайно. Замість того, щоб дзвонити cat.symbol().color().name(), зробіть щось подібне:str(cat.symbol().color().red()) +','+ str(cat.symbol().color().green()) +','+ str(cat.symbol().color().blue())
Germán Carrillo

Все ще діє в qgis 3.6, крім API перейменування rendererV2 -> renderer
sabas

Тут не працювали над QGis 3.6. Я перейменував rendererV2 у рендер, але не працював.
Paladini
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.