Сортування за кількома полями одночасно у QGIS?


17

Чи можливо сортувати кілька полів одночасно в QGIS?

Наприклад, я б хотів сортувати таблицю за назвою штату, а потім у межах кожного штату, сортувати за іменем округу.

Це буде те саме, що опція розширеного сортування, доступна в ArcMap.

Відповіді:


4

Насправді дуже простий трюк. Припустимо, ви хочете спершу сортувати за полем "А", а потім за полем "В" в межах "А". Першим клацанням лівою кнопкою миші на заголовок поля "В" (клацніть один раз для зростання сортування, другий раз для спадання) в таблиці атрибутів. Потім клацніть лівою кнопкою миші на заголовку поля "А" (один раз для ASC, другий раз для DESC). Ця остання дія буде сортувати поле "А", зберігаючи сортування поля "В" в межах однакових значень "А". Спробував його з 3-х полів, і він також працює (тоді набридло). Я використовую QGIS 3.6.3-Noosa.


Відмінно! Я також перевірив його з 3-х полів (штату, округу, міста), і він спрацював ідеально - висхідним чи низхідним. 3.8.3.
Стю Сміт

8

Ви можете використовувати плагін сортування та числа . Це дозволяє сортувати таблицю атрибутів до трьох полів, потім створює додаткове поле, яке містить порядок відсортованих функцій.

Відмова: Я є автором плагіна.


сподіваємось, це спрацює. Я встановив його на мій набір даних з 150 кб, і він триває через 10 хвилин. Це жорсткі коди сортування в новому стовпці, щоб потім ви могли сортувати за цим - чи існує спосіб, який працює як у excel або ArcMap, що не додає стовпець? дивіться desktop.arcgis.com/en/arcmap/10.3/manage-data/tables/…
GeorgeC

1
Я також сподіваюся, що це спрацює, я ніколи не тестував його на таких великих наборах даних. Я не думаю, що можна просто змінити порядок відображення, як, наприклад, в ArcMap; QGIS API не забезпечує жодного методу для цього. Тому я вирішив додати поле нумерації як вирішення.
ArMoraer

Це все ще йде -ArcMap зробив це приблизно в 30-х роках. Що ж, добре. Дякую за рішення - Я буду тримати це відкритим протягом 24 годин, щоб побачити, чи є у когось інші пропозиції.
Джордж

Добре, дякую за відгуки. Плагін покладається безпосередньо на sort()функцію Python , мені цікаво, чому це так повільно. Я спробую знайти якийсь трюк, щоб прискорити процес у майбутній версії.
ArMoraer

Хороший інструмент ... врятував мені багато роботи ... дуже вдячний
K_Man

7

Якщо все добре, щоб зберегти результат назавжди, ви можете сортувати файл форми за допомогою GDAL

ogr2ogr -f "ESRI Shapefile" -dialect sqlite -sql "SELECT *
FROM my_shapefile ORDER BY attr_1, attr_2, attr_3" sorted.shp my_shapefile.shp

Знадобилося менше ніж 3 хвилини, щоб мати форму форми, що містить мільйон багатокутників.


1
дякую, але я вважаю за краще не робити нічого постійного, оскільки це генеруватиме безліч наборів даних, а також я сподівався на шлях із самого QGIS.
GeorgeC

2
Тоді я б, мабуть, перетворив файл форми в Spatialite. За допомогою диспетчера DB ви зможете збирати та запускати SQL запити. Ви також можете зберегти часто використовувані запити для майбутніх потреб.
користувач30184

5

Тепер плагін DB Manager в QGIS має вузол "Віртуальний рівень", який дозволяє записувати команди SQL проти форм-файлів, завантажених у ваш проект QGIS.

Отже, тепер, коли ви маєте цю здатність, логіка SQL для сортування за кількома полями знаходиться в операторі ORDER BY, використовуючи asc (зростаючий), desc (спадаючий), і ви можете об'єднати їх для сортування за кількома стовпцями:

введіть тут опис зображення

Додатковим бонусом є те, що ви дізнаєтесь більше SQL, тож, коли ви захворієте на форм-файли та більшість з PostGIS, стрибок не буде таким великим !!!


Дякую - це чудове рішення, однак для цього випадку використання я також не хочу змінювати формат даних ні на що інше.
GeorgeC

2
Ви можете працювати з .SHP для цього рішення - це не змінює формат даних. Спробуйте ...
DPSSpatial

1
@GeorgeC ти це випробував?
DPSSpace 23

5

Тепер це можна зробити без будь-яких плагінів або роботи з базою даних, принаймні для версії 3.2+. Щоб сортувати за кількома стовпцями:

  1. Клацніть правою кнопкою миші на заголовку стовпця таблиці атрибутів та виберіть "Сортувати ..."
  2. Додайте функцію concat()разом із полями, за якими потрібно сортувати, у відповідному порядку (напр.concat("column1", "column2") ). Під кодом повинен бути показаний попередній попередній перегляд.
  3. Установіть або зніміть прапорець "Сортувати за зростанням" внизу, щоб налаштувати впорядкування сортування стовпців.
  4. Клацніть OK і підтвердіть сортування.

Ця функціональність була додана через випуск № 1137 та висвітлена в останній (розробці) версії керівництва користувача .


1
Успішно протестовано з QGIS 3.6.
Містер Че

Я з'єднав рядок і ціле число, яке не має фіксованої довжини, тому я використав обхід, щоб нуль заповнити ціле число до рядка з фіксованою довжиною:concat("col1", right( ('000' || tostring( "col2" )), 4))
NettaB

2

Що ж, це 2018 рік, тому я не можу повірити, що на це ще не відповіли.

  1. Відкрийте подання таблиці атрибутів і клацніть правою кнопкою миші на будь-якому стовпці, а потім виберіть Сортувати ...

  2. Діалогове вікно Налаштування порядку сортування таблиці атрибутів зараз відкрито і з редактором повних виразів

  3. Використовуйте функцію COALESCE з потрібними стовпцями, наприклад, це буде сортувати таблицю за 3 стовпцями (спочатку за ідентифікатором, а потім за VERSION, а потім fid)

coalesce("ID","VERSION","fid" )

введіть тут опис зображення

Натиснувши кнопку ОК, ви сортуєте таблицю


На жаль, coalesce не працював для мене. У тесті, використовуючи таблицю атрибутів shapefile з двома цілими стовпцями (обидва містять суміш чисел і порожніх значень): 1) за допомогою кнопки Сортувати за зростанням, результат сортував перший правильний стовпець правильний (низхідний), але другий стовпець був неправильно відсортований за зростанням для кожного значення в першому стовпці. 2) за допомогою кнопки Сортувати за зростанням, результат був випадковим результатом, який не мав сенсу.
Стю Сміт

1
Ви можете об'єднати поля за допомогою "||" оператор, coalesce поверне перше значення NULL, яке недійсне для сортування. Напевно, вам слід скористатись деяким форматуванням, щоб мати 1 до 11.
Золтан,

1

Ви не можете (принаймні, не зараз). Вибачте!

Дивіться документацію QGIS і прокрутіть вниз до останнього рядка.

Неприємною проблемою було б втягнути DBF Shapefile в Excel. Сортуйте його там і збережіть результат. Крім того, імпортуйте ваш Shapefile у PostGIS або SpatialLite, де ви маєте більшу функцію сортування. В основному вам доведеться обійти QGIS для розширеного сортування.


2
+1 за правильну зауваження, що наразі це не можливо, але -1 за те, що пропонується возитися з DBF в Excel
underdark

Я сказала, що це "неприємно" :)
MappaGnosis

Ви згадуєте PostGIS та SpatiaLite: чи могли б ви показати приклад того, як робити те, про що вимагає ОП в рамках QGIS, також використовуючи плагін db?
стеко

0

Як запропонував @Sylvester Sneekly, якщо ваші дані завантажуються в такі RDBMS, як PosGIS або SpatialLite, ви можете розглянути можливість створення перегляду бази даних у RDBMS, яка призначає табличні дані, а потім завантажте зібраний вид у QGIS як шар.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.