Jak skopiować styl kolorów do kolumny kolorów w tabeli atrybutów warstwy?

15

Mam warstwę wielokąta w QGIS, którą zastosowałem losowy styl koloru do każdego wielokąta. W obszarze Właściwości warstwy -> Styl wybrałem Styl skategoryzowany, a następnie wygenerowałem losową rampę kolorów. Dodałem kolumnę kolorów do tabeli warstw. Czy istnieje sposób automatycznego kopiowania koloru przypisanego w stylu do kolumny kolorów dla każdego wielokąta w postaci „# ff0000”.

Ostatecznie chcę wyeksportować go jako warstwę GeoJSON i zaimportować do mapy ulotki. Kolumna kolorów ustawi kolor w ulotce.

użytkownik2956607
źródło

Odpowiedzi:

22

Możesz do tego użyć PyQGIS (choć nie jestem pewien, czy jest to najlepsze rozwiązanie).

Wybierz (lub aktywuj) warstwę w QGIS ToC, otwórz konsolę QGIS Python i skopiuj ten fragment kodu:

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 )

Zakładam, że twoje pole do przechowywania kolorów nazywa się „kolor”. Po uruchomieniu uzyskałem:

wprowadź opis zdjęcia tutaj

Daj mi znać, jeśli napotkasz jakiś problem.

Germán Carrillo
źródło
Czy można to zrobić dla RGB?
Diogo Caribé,
Pewnie. Zamiast dzwonić cat.symbol().color().name(), zrób coś takiego:str(cat.symbol().color().red()) +','+ str(cat.symbol().color().green()) +','+ str(cat.symbol().color().blue())
Germán Carrillo,
Nadal obowiązuje w qgis 3.6, oprócz zmiany nazwy API rendererV2 -> renderer
sabas
Nie działało tutaj na QGis 3.6. Zmieniłem nazwę rendererV2 na renderer, ale nie działałem.
Paladini