जब मैं PostGIS से QGIS में परतों का एक गुच्छा लोड करता हूं, तो वे उल्टे वर्णमाला क्रम में लोड होते प्रतीत होते हैं।
यह लेयर एक्शन का उपयोग करते समय एक बग (मास्टर शाखा में भी) प्रतीत होता है Add PostGIS परतें ... और QGIS बग ट्रैकर पर रिपोर्ट की जानी चाहिए । हालाँकि, यदि आप PostGIS परतों को लोड करने के लिए नए ब्राउज़र का उपयोग करते हैं , तो वे उलट नहीं होंगे। नया DB प्रबंधक तालिकाओं के एकाधिक चयन की अनुमति नहीं देता है, इसलिए वहाँ कोई समस्या नहीं है (एकाधिक चयन की कमी के अलावा)।
क्या कोई उपकरण या प्लगइन्स है जो आपको एक अलग क्रम में QGIS TOC को जल्दी से सॉर्ट करने की अनुमति देता है? उदाहरण के लिए मैं उन विकल्पों में से एक के बारे में सोच सकता हूं जिन्हें कोई भी चाहता है:
2) नाम से क्रमबद्ध परतें (वर्णमाला, रिवर्स वर्णमाला)।
यह वर्तमान में देशी स्तंभ या आइटम QgsLegend (के आधार वर्ग की छंटाई का उपयोग करके किया जा सकता है QTreeWidget )। यह सभी ITEMS, दोनों परतों और समूहों को एक साथ क्रमबद्ध करेगा, न कि ऊपर-स्तर की परतों के ऊपर या नीचे वाले समूहों को। यह समूहों के भीतर भी छाँटेगा। इस तरह की छंटनी का कोई UNDO नहीं है।
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from qgis.utils import iface
mw = iface.mainWindow()
lgd = mw.findChild(QTreeWidget, "theMapLegend") # get ref to object by type/objectName
lgd.sortItems(0, Qt.AscendingOrder) # sort first column (Qt.DescendingOrder to reverse)
कैविएट : यदि मुख्य कथा भी लेयर रेंडर ऑर्डर (डिफ़ॉल्ट) को नियंत्रित करती है, तो यह ठीक काम करना चाहिए। यदि लेयर ऑर्डर डॉक विजेट को रेंडर ऑर्डर को नियंत्रित करने के लिए अलग से उपयोग किया जाता है, तो किंवदंती में सॉर्ट ऑर्डर को सम्मानित नहीं किया जाता है और निम्न प्रकार के ऑपरेशन से अवांछित परिणाम हो सकते हैं (ऊपर से जारी):
lo = mw.findChild(QListWidget, "theMapLayerOrder")
lo.sortItems(Qt.AscendingOrder)
इस कोड से आप देख सकते हैं कि लेयर ऑर्डर लिस्टिंग एक QListWidget है , न कि एक क्यूट्रीविडगेट , जिसका अर्थ है कि छांटना किसी भी समूह को ध्यान में नहीं रखेगा। सभी परतों को एक फ्लैट सूची में प्रस्तुत किया जाता है, जैसे कि वे सभी शीर्ष-स्तर थे। इसलिए, समूहों में वर्तमान में घिरी हुई कोई भी परतें शीर्ष-स्तरीय परतों के नीचे सॉर्ट हो सकती हैं, यदि आप उपरोक्त सॉर्टिंग कोड को QListWidget पर लागू करते हैं।
1) ज्यामिति द्वारा परतों को क्रमबद्ध करें, जहाँ बिंदु शीर्ष पर हैं, फिर रेखाएँ, ध्रुव, और रेखापुंज।
3) पहले ज्यामिति द्वारा क्रमबद्ध करें, फिर नाम से। यह # 1 & # 2 का संयोजन होगा। अंक परतों को शीर्ष (# 1 के समान) के अनुसार क्रमबद्ध किया जाता है, लेकिन फिर अंक परतों को वर्णानुक्रम (बिंदु-ए, बिंदु-बी, बिंदु-सी, आदि) के आधार पर क्रमबद्ध किया जाता है।
वर्तमान में, पायथन का उपयोग करते हुए, QgsLegend में हेरफेर करने के लिए सीमित कार्यक्षमता है। वहाँ QgsLegendInterface है, लेकिन इसमें QgsLegend , QgsLegendLayer , विरासत में मिली QgsLegendItem , या QgsLegend के साथ अन्य वर्गों में से कोई भी मौजूद नहीं है।
हालाँकि, यदि आप एक स्वच्छ परियोजना के साथ शुरू कर रहे हैं, और समूहों का उपयोग करने में कोई आपत्ति नहीं है, तो वर्तमान में निम्नलिखित संभव है (प्रारंभिक कोड ब्लॉक से जारी):
li = iface.legendInterface()
li.addGroup('A_Points')
li.addGroup('B_Lines')
li.addGroup('C_Polygons')
li.addGroup('D_Rasters')
for l in li.layers():
if l.type() == QgsMapLayer.VectorLayer:
if l.geometryType() == QGis.Point:
li.moveLayer(l, 0)
elif l.geometryType() == QGis.Line:
li.moveLayer(l, 1)
elif l.geometryType() == QGis.Polygon:
li.moveLayer(l, 2)
elif l.type() == QgsMapLayer.RasterLayer:
li.moveLayer(l, 3)
lgd.sortItems(0, Qt.AscendingOrder)
( मान लिया गया है कि कोई अन्य समूह मौजूद नहीं है। ) यह लेयर्स जुड़ने के बाद कंसोल (या ScriptRunner स्क्रिप्ट, या प्लगइन, या मास्टर में नए कंसोल में लोड ) से चलाया जाएगा । यह सॉर्ट करने योग्य नामों के साथ समूह बनाएगा, परतों को सही समूहों में जोड़ेगा, फिर पूरी चीज़ को सॉर्ट करेगा। समान चेतावनी लागू होती है, ऊपर के रूप में।
पहले से भरी हुई परतों और समूहों के साथ एक मौजूदा परियोजना में नई परतें जोड़ते समय सही समूह सूचकांकों के लिए अधिक जांचों को अधिक मजबूत समाधान की आवश्यकता होगी।