색상 스타일을 레이어 속성 테이블의 색상 열에 복사하는 방법은 무엇입니까?


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를 위해 할 가능성이 있습니까?
— Diogo Caribé

확실한. 전화하는 대신 cat.symbol().color().name()다음과 같이하십시오.str(cat.symbol().color().red()) +','+ str(cat.symbol().color().green()) +','+ str(cat.symbol().color().blue())
— Germán Carrillo

API 이름 바꾸기 rendererV2-> 렌더러를 제외하고 qgis 3.6에서 여전히 유효합니다.
— sabas

QGis 3.6에서 작동하지 않았습니다. rendererV2의 이름을 렌더러로 바꾸었지만 작동하지 않았습니다.
— Paladini
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.