Gdy ładuję wiązkę warstw do QGIS z PostGIS, wydaje się, że ładują się one w odwrotnej kolejności alfabetycznej.
Czy są jakieś narzędzia lub wtyczki, które pozwalają szybko posortować QGIS TOC w innej kolejności? Na przykład mogę wymyślić kilka opcji, które mogą być potrzebne:
- Sortuj warstwy według geometrii, gdzie punkty znajdują się na górze, a następnie linie, polisy i rastry.
- Sortuj warstwy według nazwy (alfabetycznie, odwrotnie alfabetycznie).
- Sortuj najpierw według geometrii, a następnie według nazwy. Byłaby to kombinacja # 1 i # 2. Warstwy punktów są sortowane do góry (tak samo jak nr 1), ale następnie warstwy punktów są sortowane alfabetycznie (punkt-a, punkt-b, punkt-c itp.).
Podczas ładowania dużej liczby warstw pomogłoby to w szybkim opracowaniu właściwej kolejności tworzenia map.
Odpowiedzi:
Wydaje się to być błędem (nawet w gałęzi master) podczas korzystania z akcji dodawania warstwy Dodaj warstwy PostGIS ... i powinno być zgłaszane w narzędziu do śledzenia błędów QGIS . Jeśli jednak użyjesz nowej przeglądarki do załadowania warstw PostGIS, nie zostaną one odwrócone. Nowy DB Manager nie pozwala na wielokrotny wybór tabel, więc nie ma problemu (oprócz braku wielokrotnego wyboru).
Można to obecnie zrobić za pomocą natywnego sortowania kolumn lub elementów w klasie bazowej QgsLegend ( QTreeWidget ). Spowoduje to sortowanie WSZYSTKICH ELEMENTÓW, zarówno warstw, jak i grup, a nie grup zgrupowanych powyżej lub poniżej warstw najwyższego poziomu. Będzie również sortować w grupach. Nie ma takiego cofnięcia sortowania.
Uwaga : jeśli główna legenda kontroluje także kolejność renderowania warstw (domyślnie), powinno to działać OK. Jeśli widżet dokowania Kolejność warstw jest używany osobno do sterowania kolejnością renderowania, kolejność sortowania w legendzie nie jest honorowana, a następująca operacja sortowania może prowadzić do niepożądanych wyników (kontynuacja od góry):
Z tego kodu widać, że lista Kolejność warstw jest QListWidget , a nie QTreeWidget, co oznacza, że sortowanie NIE będzie uwzględniać żadnych grup. Wszystkie warstwy są przedstawione na płaskiej liście, tak jakby wszystkie były na najwyższym poziomie. Tak więc wszystkie warstwy obecnie zagnieżdżone w grupach mogą sortować powyżej warstw najwyższego poziomu, jeśli zastosujesz powyższy kod sortujący do QListWidget.
Obecnie, używając Pythona, funkcjonalność QgsLegend jest ograniczona. Istnieje interfejs QgsLegendInterface, ale nie zawiera on wszystkich dodatków, które są obecne w QgsLegend , QgsLegendLayer , odziedziczonej QgsLegendItem lub innej klasie powiązanej z QgsLegend.
Chociaż jeśli zaczynasz od czystego projektu i nie masz nic przeciwko używaniu grup, obecnie możliwe są następujące czynności (kontynuacja od początkowego bloku kodu):
( Zakłada się, że nie istnieją inne grupy ) . Zostanie on uruchomiony z konsoli (lub skryptu ScriptRunner lub wtyczki lub załadowany do nowej konsoli w trybie głównym) po dodaniu warstw. Stworzy grupy z nazwami do sortowania, doda warstwy do poprawnych grup, a następnie posortuje całość. Obowiązuje to samo zastrzeżenie, jak powyżej.
Potrzebne byłyby więcej sprawdzeń poprawności wskaźników grup, aby uzyskać bardziej niezawodne rozwiązanie podczas dodawania nowych warstw do istniejącego projektu z już załadowanymi warstwami i grupami.
źródło