Получение списка различных значений из поля шейп-файла с использованием QGIS?

18

У меня есть шейп-файл, функции которого я могу отфильтровать, указав предложение where в диалоге запроса. Fx У меня есть поле с именем 'city_name' и указанием 'city_name = "London"' в предложении where отображается только London. То, что я хотел бы сделать сейчас, - это извлечь все значения из 'city_name' из таблицы атрибутов.

Что-то такое:

select distinct city_name from [attribute table]

В QGIS я обнаружил несколько инструментов, очевидно, связанных с SQL, и я также быстро взглянул на различные плагины. Но мне не удается подключиться к базе данных или имени таблицы ... какая база данных или какая таблица в этом случае?

В конце я хочу экспортировать список результатов и использовать его для дальнейшей обработки.

Я использую QGIS 1.8.

Раффаэль
источник

Ответы:

32

Обновить ответ (версия QGIS> = 2.14)

Начиная с QGIS 2.14 , вы можете использовать операторы запуска SQL на любом загруженном векторном слое, используя виртуальные слои .

  1. Загрузив слой в QGIS, перейдите в Layer> Add Layer> Add / Edit Virtual Layer ;
  2. В диалоговом окне «Создать виртуальный слой» введите оператор SQL в поле «Запрос». Что-то вроде:

    ВЫБЕРИТЕ DISTINCT название города ОТ имени слоя

  3. Для геометрии установите No Geometry

  4. Нажмите Ok, и таблица загрузится в QGIS с желаемыми уникальными значениями.

Примечание: эта таблица будет обновлена, если новые значения будут добавлены в столбец city_name.

Устаревший ответ (версия QGIS <2.14)

У вас есть несколько вариантов сделать то, что вы просите.

  1. Импортируйте свой шейп-файл в базу данных Spatialite или Postgis, и затем вы сможете запросить таблицу, используя полные операторы SQL;
  2. Используйте инструмент «Растворение» («Вектор»> «Инструменты геообработки»> «Растворение»), чтобы растворить ваши шейп-файлы, используя поле «имя-города». Хотя это странный метод, файл dbf результирующего шейп-файла предоставит вам необходимый список;
  3. Взгляните на плагин групповой статистики (1.6) , вы можете использовать «city_name» в качестве поля классификации и нажать «Рассчитать». Он рассчитает некоторые статистические данные о каждом городе, затем вы можете скопировать результат и извлечь список городов.

Я только что заметил, что в Vector> Analysis Tools есть инструмент List уникальных значений , который именно то, что нужно для этой задачи. Так просто ... нет обходных путей и не нужны плагины.

Александр Нето
источник
6

Используйте QGIS DB Manager и получите доступ к своему шейп файлу через «виртуальные слои»

Затем вы можете использовать окно SQL и написать свой запрос:

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

DPSSpatial
источник
1
Теперь это (QGIS 2.14+) правильный ответ.
Александр Нето
0

Попробуйте включить что-то вроде:

where city_name is NOT NULL or not equal to NULL
nigellaw
источник
Попробуйте посмотреть здесь docs.qgis.org/html/en/docs/user_manual/working_with_vector/...
nigellaw
1
это приведет к тому, что QGIS отобразит все объекты с именем города. но я хочу экспортировать значения city_name.
Рафаэль
-1

Используйте построитель запросов в QGIS, перейдите в поле названия города в полях в построителе запросов. Перейти к значениям, добавить все. Удалите все нули.

Создайте сценарий, похожий на city name = "london" и city name = "paris", пока не получите полный список имен и запустите сценарий. Теперь все названия городов выбраны. Вы можете экспортировать выбранный файл формы и импортировать его в базу данных postgresql.

Чтобы использовать бэкэнд postgresql для QGIS, установите в postgresql стек postgresql с геосервером, postgresql и базой данных с поддержкой postgis. Вам нужно будет подключить QGIS к серверу. Поиграйте немного, и вы поймете это.

Льюис
источник