レイヤーの属性テーブルの色列に色のスタイルをコピーする方法は?


15

QGISには、各ポリゴンにランダムカラースタイルを適用したポリゴンレイヤーがあります。[レイヤプロパティ]-> [スタイル]で、カテゴリ化されたスタイルを選択し、ランダムなカラーランプを生成しました。レイヤーテーブルに色の列を追加しました。スタイルで割り当てられた色を「#ff0000」の形式で各ポリゴンの色列に自動的にコピーする方法はありますか?

最終的には、GeoJSONレイヤーとしてエクスポートし、リーフレットマップにインポートします。色の列は、リーフレットの色を設定します。

回答:


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に対応する可能性はありますか?
ディオゴカリブ

承知しました。代わりに、呼び出し元のcat.symbol().color().name()、このような何かを:str(cat.symbol().color().red()) +','+ str(cat.symbol().color().green()) +','+ str(cat.symbol().color().blue())
ヘルマン・カリージョ

>レンダラ-まだ有効では離れAPIリネームrendererV2から、3.6をQGIS
sabas

ここでQGis 3.6に取り組んでいませんでした。rendererV2の名前をrendererに変更しましたが、機能しませんでした。
パラディーニ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.