Когда я загружаю несколько слоев в QGIS из PostGIS, они загружаются в обратном алфавитном порядке.
Существуют ли какие-либо инструменты или плагины, позволяющие быстро отсортировать оглавление QGIS в другом порядке? Например, я могу придумать пару вариантов, которые могут понадобиться:
- Сортируйте слои по геометрии, где точки находятся сверху, а затем линии, полисы и растры.
- Сортировать слои по имени (алфавитный, обратный алфавитный).
- Сортировка сначала по геометрии, затем по имени. Это будет комбинация № 1 и № 2. Слои точек сортируются сверху (так же, как # 1), но затем слои точек сортируются по алфавиту (точка-a, точка-b, точка-c и т. Д.).
При загрузке большого количества слоев это поможет быстро создать правильный порядок создания карт.
Ответы:
Похоже, что это ошибка (даже в основной ветке) при использовании действия добавления слоя Add PostGIS Layers ... и должна сообщаться в трекере ошибок QGIS . Однако, если вы используете новый браузер для загрузки слоев PostGIS, они не будут обращены вспять. Новый менеджер БД не допускает множественный выбор таблиц, поэтому проблем нет (кроме отсутствия множественного выбора).
В настоящее время это можно сделать с помощью собственной сортировки столбцов или элементов базового класса QgsLegend ( QTreeWidget ). Это позволит отсортировать ВСЕ элементы, как слои, так и группы, а не группы, сгруппированные выше или ниже уровней верхнего уровня. Он также будет сортировать по группам. НЕТ ОТМЕНЫ сортировки, подобной этой.
Предостережение : если основная легенда также контролирует порядок рендеринга слоя (по умолчанию), это должно работать нормально. Если виджет стыковки Order Layer Order используется отдельно для управления порядком рендеринга, то порядок сортировки в легенде не учитывается, и следующая операция сортировки может привести к нежелательным результатам (продолжение сверху):
Из этого кода вы можете видеть, что лист Layer Order представляет собой QListWidget , а не QTreeWidget, что означает, что сортировка НЕ будет учитывать какие-либо группировки. Все слои представлены в виде плоского списка, как если бы они были на верхнем уровне. Таким образом, любые слои, в настоящее время вложенные в группы, могут сортироваться выше слоев верхнего уровня, если вы примените вышеуказанный код сортировки к QListWidget.
В настоящее время, используя Python, существует ограниченная функциональность для манипулирования QgsLegend. Существует QgsLegendInterface, но он не имеет всех полезностей, присутствующих в QgsLegend , QgsLegendLayer , унаследованном QgsLegendItem или любом другом классе, связанном с QgsLegend.
Хотя, если вы начинаете с чистого проекта и не возражаете против использования групп, в настоящее время возможно следующее (продолжение с начального блока кода):
( Предполагается, что других групп не существует. ) Это будет выполнено из консоли (или сценария ScriptRunner , или плагина, или загружена в новую консоль в master) после добавления слоев. Он создаст группы с сортируемыми именами, добавит слои в правильные группы, а затем отсортирует все. Применяется та же оговорка, что и выше.
Для более надежного решения потребуется больше проверок правильности групповых индексов при добавлении новых слоев в существующий проект с уже загруженными слоями и группами.
источник