วิธีคัดลอกสไตล์สีไปยังคอลัมน์สีในตารางแอตทริบิวต์ของเลเยอร์


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

ยังคงใช้งานได้ใน qgis 3.6 นอกเหนือจาก API เปลี่ยนชื่อ rendererV2 -> renderer
sabas

ไม่ได้ใช้ QGis 3.6 ที่นี่ ฉันเปลี่ยนชื่อ rendererV2 เป็น renderer แล้ว แต่ไม่ทำงาน
Paladini
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.