Автоматизация сложных процессов с помощью Processing Modeler (QGIS3)

Как правило рабочий процесс в ГИС состоит из множества шагов, каждый из которых генерирует некий промежуточный результат, используемый в последующих шагах. При этом если ваши начальные данные изменятся, либо вы сами измените значение какого-либо параметра, вам придется вручную проходить весь процесс снова от начала до конца. К счастью QGIS имеет встроенный инструмент для графического построения моделей, который поможет вам составить алгоритм рабочего процесса и запускать его одним нажатием. Помимо этого вы сможете выполнять пакетную обработку большого количества данных вашим алгоритмом.

Обзор задачи

Мы воспользуемся точечным слоем, содержащим места, где зафиксированы случаи морского пиратства, и создадим алгоритм, который будет генерировать карту плотности данных точек на гексагональной сетке.

Также в ходе работы вы получите следующие навыки

  • Использование равновеликой проекции и настройка системы координат проекта.

  • Применение градуированного стиля к полигональному слою.

Исходные данные

На Портале морской безопасности Национального агентства геопространственной разведки опубликованы данные обо всех случаях морского пиратства в формате Anti-shipping Activity Messages. Загрузите базу данных в формате shape.

Natural Earth содержит векторные слои глобального пространственного охвата. Загрузите архив 10m Physical Vectors - Land, содержащий полигоны суши.

Также вы можете напрямую скачать необходимые слои по ссылкам ниже:

ASAM_shp.zip

ne_10m_land.zip

Данные получены с сайтов [NGA_MSI] и [NATURALEARTH]

Порядок действий

  1. В панели Браузер перейдите в директорию, куда были сохранены загруженные файлы. Откройте архив ne_10m_land.zip и выберите слой ne_10m_land.shp. Перетащите слой в окно карты. Далее откройте архив ASAM_shp.zip, выберите слой asam_data_download/ASAM_events.shp и так же перетащите его в окно карты.

../../_images/1106.png
  1. Слой ASAM_events.shp не содержит информацию о проекции, поэтому необходимо выбрать ее в окне Выбор системы координат. В данном слое координаты точек имеют вид Широта/Долгота, таким образом выберите систему координат WGS 84 и нажмите OK.

../../_images/259.png
  1. После загрузки слоя вы можете видеть точки, отражающие места, где имели место случаи пиратства. Начнем построение модели. Выберите пункт меню Анализ данных ‣ Graphical Modeler....

../../_images/337.png
  1. В окне Processing Modeler найдите панель Model Properties. Введите piracy hexbin в поле Имя и projects as the Группа. Нажмите кнопку Save.

../../_images/422.png
  1. Сохраните модель под именем piracy_hexbin.

../../_images/522.png
  1. Теперь мы построим графическую модель нашего алгоритма. Диалог Processing modeler имеет главное окно и панель в левой его части. На левой панели найдите панель Inputs, в которой перечислены разные возможные типы исходных данных. Выберите пункт + Векторный слой и перетащите его в главное окно.

../../_images/622.png
  1. Введите Input Points в поле “Имя параметра” и выберите Точка из списка Тип геометрии. Этот элемент будет представлять точечный слой, хранящий случаи пиратства.

../../_images/721.png
  1. Перетащите в главное окно еще один элемент + Vector Layer. Введите Base Layer в поле Имя параметра и выберите Полигон из списка Тип геометрии. Этот элемент будет представлять слой “natural earth” с контурами материков.

../../_images/821.png
  1. Мы хотим сгенерировать глобальную сетку шестиугольников, при этом размер ячейки сетки не должен быть запрограммирован в самой модели. Вместо этого нам необходимо дать пользователю возможность указывать самостоятельно данный параметр, чтобы он мог экспериментировать с различными размерами ячеек без изменения всей модели. Выберите элемент + Число и перетащите его в главное окно. Введите Grid Size в поле Имя параметра и нажмите OK.

../../_images/921.png
  1. Теперь, когда определены все входные элементы, мы можем добавить к нашей модели пошаговые действия. Все доступные инструменты находятся на панели Algorithms. Первым шагом необходимо перепроецировать базовый слой в систему координат проекта. Воспользуйтесь строкой поиска, найдите инструмент Перепроецировать слой и перетащите его в главное окно.

Примечание

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

../../_images/1021.png
  1. В выпадающем списке Исходный слой окна Перепроецировать слой выберите Base Layer. Отметьте галочкой пункт Использовать систему координат проекта. Нажмите OK.

../../_images/1124.png
  1. Теперь между элементом + Base Layer и инструментом Перепроецировать слой появилась линия связи. Она иллюстрирует поток выполнения нашего алгоритма. Следующим шагом является создание сетки шестиугольников. Найдите инструмент Create grid и перетащите его в главное окно.

../../_images/1221.png
  1. В выпадающем списке Grid type диалогового окна Generate grid выберите пункт Hexagon (polygon). В выпадающем списке Grid extent выберите пункт Extent of 'Перепроецировано' from algorithm 'Перепроецировать слой'. Нажмите на кнопку 123 под ярлыком Horizonal spacing и выберите пункт Model input.

../../_images/1320.png
  1. В поле Using model input выберите Grid Size. Повторите действия для настройки Vertical Spacing. Нажмите OK.

../../_images/1420.png
  1. Теперь мы имеем глобальную сетку шестиугольников, покрывающую всю площадь базового слоя включая полигоны материков и места, где нет точек. Далее мы отфильтруем те полигоны сетки, на которых нет точек исходного слоя. Найдите инструмент Извлечь по пространственному отношению и перетащите его в главное окно.

../../_images/1519.png
  1. В выпадающем списке Извлечь объекты в слое выберите пункт 'Сетка' from algorithm 'Create grid', в поле где объект (геометрический оператор) выберите Пересекает и в поле Объекты из слоя для сравнения выберите Input points. Нажмите OK.

../../_images/1617.png
  1. Теперь у нас остались только те полигоны сетки, на которые попадает хотя бы одна точка. Чтобы сосчитать точки, используем инструмент Count points in polygon. Найдите и перетащите его в главное окно.

../../_images/1718.png
  1. В выпадающем списке Полигоны выберите пункт 'Извлечено (по простр. отношению)' from algorithm 'Извлечь по пространственному отношению'. В списке Точки выберите Input Points. В поле Количество введите Aggregated. Нажмите OK.

../../_images/1817.png
  1. Модель готова. Нажмите кнопку Save.

../../_images/1914.png
  1. Вернитесь в основное окно QGIS. Созданная вами модель находится в панели Инструменты анализа в группе Модели ‣ projects ‣ piracy_hexbin. Пришло время запустить и протестировать нашу модель. Поскольку наша цель - сосчитать количество точек входного слоя в каждой ячейке сетки, важно, чтобы сама сетка была сгенерирована в равновеликой проекции. Это гарантирует, что независимо от расположения сетки, площади, покрываемые ячейками, будут равны. Модель не требует явного указания проекции, вместо этого она использует проекцию, выбранную в окне Система координат проекта. Давайте выберем укажем для проекта глобальную равновеликую проекцию. Перейдите в меню Проект ‣ Свойства.

../../_images/2011.png
  1. В диалоговом окне Свойства проекта перейдите на вкладку Система координат. Мы воспользуемся проекцией Мольвейде. В поле Поиск введите Mollweide и выберите World_Mollweide EPSG:54009. Нажмите OK.

../../_images/2116.png
  1. Можно увидеть, как слои перепроецировались на лету в выбранную проекцию. В панели Инструменты анализа перейдите к модели piracy_hexbin и запустите ее двойным щелчком.

../../_images/2214.png
  1. В поле Base Layer выберите ne_10m_land, в поле Input Points выберите ASAM_events. Размер ячейки сетки должен быть указан в единицах выбранной проекции. Единицами проекции Молльвейде являются метры. В поле Grid Size введите 100000 м (100 км). Нажмите Выполнить чтобы запустить выполнение алгоритма. Когда процесс будет завершен, нажмите Закрыть.

../../_images/2312.png
  1. В результате выполнения алгоритма в списке слоев появится новый слой Aggregated. Этот слой, как вы можете заметить, имеет поле NUMPOINTS, содержащее количество точек внутри каждой ячейки сетки. Давайте применим к слою стиль для более наглядного представления информации. Нажмите правой кнопкой мыши на слое Aggregated и выберите Свойства.

../../_images/2410.png
  1. Во вкладке Стиль выберите Градуированный знак, в поле Value выберите NUMPOINTS. Нажмите на поле, отображающее стиль после ярлыка Значок.

../../_images/2510.png
  1. Выберите символ Простая заливка, а в списке Стиль обводки выберите Без обводки. Это сделает грани шестиугольников прозрачными. Нажмите OK.

../../_images/267.png
  1. В выпадающем списке Градиент выберите пункт Viridis. Снова нажмите на стрелку выпадающего списка и выберите Инвертировать градиент.

../../_images/277.png
  1. Градуированный знак делит значения в выбранном поле на классы и присваивает каждому классу свой цвет. В выпадающем списке Мода выберите Natural Breaks (Jenks) и нажмите Классифицировать. Нажмите OK.

Примечание

Подробнее о режимах классификации вы можете прочитать здесь: Основная стилизация векторного слоя.

../../_images/287.png
  1. Вернитесь в основное окно QGIS, отключите слой ASAM_events. Вы увидите прекрасную визуализацию проблемных зон на земном шаре.

../../_images/296.png

Теперь, когда последовательность операций запрограммирована в модели, нетрудно воспроизвести результат. Также модель позволяет экспериментировать без повторения промежуточных шагов вручную. Если ваши входные данные со временем изменятся, например, если через несколько месяцев будет опубликован обновленный список случаев пиратства, вы можете запустить вашу модель с новым набором данных и воссоздать аналогичную карту без необходимости помнить каждый шаг.

If you liked tutorials on this site and do check out spatialthoughts.com for more free resources.
comments powered by Disqus

This work is licensed under a Creative Commons Attribution 4.0 International License