QGIS โหลดหลายสไตล์ในชั้นเดียวในครั้งเดียว


10

ฉันมีชุดไฟล์สไตล์ qml ที่บันทึกไว้ซึ่งฉันใช้กับเลเยอร์ที่คล้ายกันในหลายโครงการ ตัวอย่างจะเป็นเลเยอร์ shapefile ของ linetype ที่มีสไตล์ต่างกันประมาณโหล ปัจจุบันฉันต้องทำซ้ำขั้นตอนการเพิ่มสไตล์ใหม่และโหลดไฟล์ qml สำหรับแต่ละสไตล์ที่แตกต่างกัน จากนั้นฉันต้องทำอีกสองสามครั้งในโครงการนั้นและทำซ้ำอีกครั้งในโครงการถัดไป

เพียงแค่พยายามดูว่ามีวิธีการโหลดไฟล์หลายสไตล์ในเลเยอร์เดียวกันพร้อมกันหรือไม่ บางอย่างเช่นแทนที่จะเรียกดู qml เดียวฉันสามารถเลือกหลายไฟล์หลายไฟล์ qml และโหลดพร้อมกันได้หรือไม่

ตัวอย่างหลายสไตล์ต่อเลเยอร์


1
คุณหมายถึงอะไรโดยการโหลดหลายสไตล์พร้อมกันในเลเยอร์เดียวกัน สไตล์สุดท้ายที่โหลดจะแทนที่สไตล์ที่โหลดก่อนหน้านี้ทั้งหมดหรือไม่ หรือคุณต้องการโหลดสไตล์มากมายไปยังสำเนาหลายชุดของเลเยอร์เดียวกัน
artwork21

เวิร์กโฟลว์ปัจจุบันของฉันคือการเปิดคุณสมบัติเลเยอร์ ใช้ปุ่มสไตล์ (ด้านล่างซ้าย) เพื่อเพิ่มสไตล์ใหม่กำหนดชื่อแล้วโหลดไฟล์. qml ที่บันทึกไว้จากนั้นทำซ้ำสำหรับสไตล์ (10-20) ที่ใช้เลเยอร์ ขณะนี้ฉันต้องทำทีละตัวสำหรับประมาณ 7-8 เลเยอร์ใน> 25 โครงการ (ข้อมูลซ้ำเลเยอร์และแผนที่ แต่ไฟล์โครงการแยกตามภูมิศาสตร์ตามเขตเทศบาล - แต่ละเขตเทศบาลเป็นลูกค้าแยกต่างหาก)
CEL-ma

มีคำถามที่ชอบที่นี่ที่ต้องการใช้ python แต่ยังไม่มีคำตอบgis.stackexchange.com/questions/294016/…
artwork21

คำตอบ:


3

คุณสามารถโหลดได้หลายสไตล์โดยใช้สคริปต์ pyqgis (คำอธิบายในความคิดเห็น):

import os
from qgis.core import QgsMapLayerStyle
from qgis.utils import iface

# set path to your styles here
qml_path = '/home/user/qml'

layer = iface.activeLayer()
style_manager = layer.styleManager()

# read valid style from layer
style = QgsMapLayerStyle()
style.readFromLayer(layer)

for qml_file in [f for f in os.listdir(qml_path)
                 if os.path.isfile(os.path.join(qml_path, f)) and
                 f.endswith('.qml')]:
    # get style name from file
    style_name = os.path.basename(qml_file).strip('.qml')
    # add style with new name
    style_manager.addStyle(style_name, style)
    # set new style as current
    style_manager.setCurrentStyle(style_name)
    # load qml to current style
    (message, success) = layer.loadNamedStyle(os.path.join(qml_path, qml_file))
    print message
    if not success:  # if style not loaded remove it
        style_manager.removeStyle(style_name)

คุณสามารถเรียกใช้มันได้ในคอนโซล Python ของ QGIS หรือปรับให้เข้ากับสคริปต์การประมวลผล

(ทดสอบกับรุ่น LTR ปัจจุบัน QGIS 2.18)


1
ขอบคุณมาก! ฉันสามารถโหลดหลายสไตล์สำเร็จ - ฉันได้รับข้อความแสดงข้อผิดพลาด "[Errno 9] ตัวอธิบายไฟล์ไม่ดี" ในขณะที่มันกำลังเรียกใช้อัลกอริทึม แต่มันก็ยังทำสำเร็จแล้ว! นี่จะช่วยฉันทำงานเยอะมาก!
CEL-ma

สำหรับคนอื่น ๆ ที่อ่านโพสต์นี้ในอนาคต ข้อความแสดงข้อผิดพลาด "ไฟล์ไม่ดี" ที่กล่าวถึงข้างต้นเกิดจากพา ธ qml ที่มีทั้งเลเยอร์บรรทัดและโหนดเวกเตอร์ เมื่อแยกกันแล้วจะไม่มีข้อผิดพลาดอีก
CEL-ma

ทุกคนสามารถช่วยในการแปลงรหัสนั้นเป็น python 3 เพื่อให้ทำงานใน QGIS 3 ได้หรือไม่
CEL-ma

0

ถ้าฉันเข้าใจคุณอย่างถูกต้องคุณแค่ต้องการใช้รูปแบบเรขาคณิตและไม่จำเป็นต้องใช้กฎหรือนิพจน์กับเลเยอร์อย่างรวดเร็วและง่ายดายในโครงการใด ๆ ที่คุณเปิด?

หากเป็นเช่นนั้นคุณสามารถบันทึกสไตล์ของคุณในไลบรารี่สัญลักษณ์โดยใช้ตัวจัดการสไตล์ได้หรือไม่ เปิดแผงสไตล์เลเยอร์แล้วคลิกปุ่ม "เปิดไลบรารี"


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