QGIS एक ही बार में कई शैलियों को लोड करें


10

मेरे पास qml शैली फ़ाइलों का एक सेट है जिसे मैंने कई परियोजनाओं में समान परतों पर लागू किया है। एक उदाहरण के रूप में एक दर्जन से अधिक विभिन्न शैलियों के साथ एक रेखाचित्र आकार की परत होगी; वर्तमान में मुझे एक नई शैली जोड़ने और विभिन्न शैलियों में से प्रत्येक के लिए qml फ़ाइल लोड करने की प्रक्रिया को दोहराना है। फिर मुझे इसे उस प्रोजेक्ट में कुछ और बार करना होगा और अगले प्रोजेक्ट में फिर से पूरी बात दोहरानी होगी।

बस यह देखने की कोशिश कर रहा है कि क्या एक ही बार में एक ही परत पर कई स्टाइल फ़ाइलों को लोड करने का कोई तरीका है? एक एकल qml के लिए ब्राउज़ करने के बजाय कुछ, मैं कई qml फ़ाइलों का चयन कर सकता हूँ और उन्हें एक ही बार में लोड कर सकता हूँ?

प्रति परत कई शैलियों का उदाहरण


1
एक ही परत पर कई शैलियों को लोड करने से आपका क्या मतलब है? क्या पिछली शैली भरी हुई सभी पिछली भरी हुई शैलियों को ओवरराइड नहीं करेगी? या क्या आप एक ही परत की कई शैलियों को कई शैलियों में लोड करना चाहते हैं?
कलाकृति 21

मेरा वर्तमान वर्कफ़्लो परत गुणों को खोलने के लिए है; नई शैली जोड़ने के लिए शैली बटन (नीचे बाईं ओर) का उपयोग करें, एक नाम असाइन करें, और फिर एक .qml फ़ाइल लोड करें, फिर परत का उपयोग करने वाली कई (10-20) शैलियों के लिए दोहराएं। वर्तमान में, मुझे यह एक-एक-एक करना है, लगभग 7-8 परतों के लिए,> 25 परियोजनाओं में। (दोहरावदार डेटा, लेयर्स और मैप्स, लेकिन प्रोजेक्ट फाइल्स भौगोलिक रूप से नगरपालिकाओं द्वारा अलग-अलग हैं - प्रत्येक नगरपालिका एक अलग क्लाइंट है)
CEL-ma

यहाँ एक ऐसा प्रश्न है जो अजगर का उपयोग करना चाहता है लेकिन अभी तक कोई जवाब नहीं है, gis.stackexchange.com/questions/294016/…
कलाकृति21

जवाबों:


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)

आप इसे क्यूजीआईएस पायथन कंसोल में चला सकते हैं या प्रोसेसिंग स्क्रिप्ट के अनुकूल बना सकते हैं।

(वर्तमान LTR संस्करण QGIS 2.18 पर परीक्षण किया गया)


1
आपका बहुत बहुत धन्यवाद! मैं कई शैलियों को सफलतापूर्वक लोड करने में सक्षम था - मुझे एल्गोरिथ्म चलाने के दौरान एक "[Errno 9] खराब फाइल डिस्क्रिप्टर" त्रुटि संदेश मिला, लेकिन यह अभी भी सफलतापूर्वक पूरा नहीं हुआ! यह मुझे बहुत काम बचाएगा!
CEL-ma

भविष्य में इस पोस्ट को पढ़ने वाले किसी और को; उपर्युक्त "खराब फ़ाइल" त्रुटि संदेश क्यूएमएल पथ दोनों लाइन और नोड वेक्टर परतों के कारण था। एक बार अलग होने के बाद, कोई और त्रुटि नहीं।
CEL-ma

कोई भी उस कोड को अजगर 3 में बदलने में मदद करने में सक्षम है इसलिए यह QGIS 3 में काम करता है?
सीईएल-एमए

0

अगर मैं आपको सही ढंग से अंडरस्टैंडिंग कर रहा हूं, तो आप बस ज्यामिति शैलियों को लागू करने में सक्षम होना चाहते हैं और जरूरी नहीं कि किसी भी प्रोजेक्ट में आपके द्वारा खोले गए जल्दी और आसानी से नियम या भाव हो?

अगर ऐसा है तो आप स्टाइल मैनेजर का उपयोग करके सिंबल लाइब्रेरी में अपनी शैली बचा सकते हैं? लेयर स्टाइल पैनल खोलें और "ओपन लाइब्रेरी" बटन पर क्लिक करें।


क्षमा करें, हां - जिन शैलियों को मैं लोड करना चाहूंगा, वे नियम-आधारित हैं।
CEL-ma
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.