PostGIS'ten QGIS'e bir grup katman yüklediğimde, ters alfabetik sırayla yükleniyor gibi görünüyorlar.
PostGIS Katmanları Ekle ... katman ekle eylemini kullanırken bu bir hata (ana dalda bile) gibi görünüyor ve QGIS hata izleyicide rapor edilmelidir . Ancak, PostGIS katmanlarını yüklemek için yeni tarayıcıyı kullanırsanız, bunlar tersine çevrilmez. Yeni DB Yöneticisi tabloların birden fazla seçimine izin vermez, bu nedenle sorun yoktur (çoklu seçimin olmaması dışında).
QGIS TOC'u farklı bir sırayla hızlı bir şekilde sıralamanızı sağlayan herhangi bir araç veya eklenti var mı? Örneğin ben bir isteyebilir birkaç seçenek düşünebilirsiniz:
2) Katmanları ada göre sıralayın (alfabetik, ters alfabetik).
Bu şu anda QgsLegend ( QTreeWidget ) temel sınıfının yerel sütunu veya öğe sıralaması kullanılarak yapılabilir . Bu, üst düzey katmanların üstünde veya altında gruplandırılmış grupları değil, TÜM ÖĞELERİ, hem katmanları hem de grupları birlikte sıralar. Ayrıca gruplar içinde sıralanır. Böyle bir sıralama UNDO yoktur.
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)
Uyarı : Ana gösterge katman oluşturma sırasını da kontrol ediyorsa (varsayılan), bu işlem düzgün çalışmalıdır. Katman Sırası dock widget'ı oluşturma sırasını denetlemek için ayrı ayrı kullanılırsa, açıklamadaki sıralama düzeni dikkate alınmaz ve aşağıdaki sıralama işlemi istenmeyen sonuçlara yol açabilir (yukarıdan devam ederek):
lo = mw.findChild(QListWidget, "theMapLayerOrder")
lo.sortItems(Qt.AscendingOrder)
Bu koddan, Katman Sırası listesinin bir QTreeWidget değil, bir QListWidget olduğunu görebilirsiniz; bu, sıralama işleminin hiçbir gruplamayı dikkate almayacağı anlamına gelir. Tüm katmanlar, sanki üst düzeymiş gibi düz bir listede sunulur. Dolayısıyla, yukarıdaki sıralama kodunu QListWidget öğesine uygularsanız, şu anda gruplarda iç içe yerleştirilmiş tüm katmanlar, üst düzey katmanların altında sıralanabilir.
1) Katmanları geometriye göre sıralayın, noktaların üstte olduğu yerde çizgiler, poliler ve rasterler.
3) Önce geometriye, sonra ada göre sıralayın. Bu # 1 ve # 2 nin bir kombinasyonu olacaktır. Nokta katmanları en üste sıralanır (# 1 ile aynıdır), ancak daha sonra nokta katmanları alfabetik olarak sıralanır (nokta-a, nokta-b, nokta-c, vb.).
Şu anda, Python kullanarak, QgsLegend'i işlemek için sınırlı işlevsellik vardır. Orada QgsLegendInterface ama bu mevcut tüm güzellikler yok QgsLegend , QgsLegendLayer , kalıtsal QgsLegendItem veya herhangi diğer sınıfların QgsLegend ile ilişkili.
Her ne kadar temiz bir projeyle başlıyorsanız ve grup kullanmayı düşünmüyorsanız, şu anda aşağıdakiler mümkündür (ilk kod bloğundan devam ederek):
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)
( Başka grup bulunmadığını varsayar. ) Katmanlar eklendikten sonra bu konsoldan (veya ScriptRunner komut dosyasından veya Eklentiden çalıştırılır veya yeni konsola yüklenir). Sıralanabilir adlara sahip gruplar oluşturur, grupları düzeltmek için katmanlar ekler, ardından her şeyi sıralar. Yukarıdaki gibi aynı uyarı geçerlidir.
Zaten yüklü katmanlar ve gruplarla mevcut bir projeye yeni katmanlar eklerken daha sağlam bir çözüm için doğru grup indeksleri için daha fazla kontrol gerekli olacaktır.