Автоматизация сложных процессов с помощью Processing Modeler (QGIS3)¶
Как правило рабочий процесс в ГИС состоит из множества шагов, каждый из которых генерирует некий промежуточный результат, используемый в последующих шагах. При этом если ваши начальные данные изменятся, либо вы сами измените значение какого-либо параметра, вам придется вручную проходить весь процесс снова от начала до конца. К счастью QGIS имеет встроенный инструмент для графического построения моделей, который поможет вам составить алгоритм рабочего процесса и запускать его одним нажатием. Помимо этого вы сможете выполнять пакетную обработку большого количества данных вашим алгоритмом.
Обзор задачи¶
Мы воспользуемся точечным слоем, содержащим места, где зафиксированы случаи морского пиратства, и создадим алгоритм, который будет генерировать карту плотности данных точек на гексагональной сетке.
Также в ходе работы вы получите следующие навыки¶
Использование равновеликой проекции и настройка системы координат проекта.
Применение градуированного стиля к полигональному слою.
Исходные данные¶
На Портале морской безопасности Национального агентства геопространственной разведки опубликованы данные обо всех случаях морского пиратства в формате Anti-shipping Activity Messages. Загрузите базу данных в формате shape.
Natural Earth содержит векторные слои глобального пространственного охвата. Загрузите архив 10m Physical Vectors - Land, содержащий полигоны суши.
Также вы можете напрямую скачать необходимые слои по ссылкам ниже:
Данные получены с сайтов [NGA_MSI] и [NATURALEARTH]
Порядок действий¶
В панели Браузер перейдите в директорию, куда были сохранены загруженные файлы. Откройте архив
ne_10m_land.zip
и выберите слойne_10m_land.shp
. Перетащите слой в окно карты. Далее откройте архивASAM_shp.zip
, выберите слойasam_data_download/ASAM_events.shp
и так же перетащите его в окно карты.
Слой
ASAM_events.shp
не содержит информацию о проекции, поэтому необходимо выбрать ее в окне Выбор системы координат. В данном слое координаты точек имеют вид Широта/Долгота, таким образом выберите систему координатWGS 84
и нажмите OK.
После загрузки слоя вы можете видеть точки, отражающие места, где имели место случаи пиратства. Начнем построение модели. Выберите пункт меню
.
В окне Processing Modeler найдите панель Model Properties. Введите
piracy hexbin
в поле Имя иprojects
as the Группа. Нажмите кнопку Save.
Сохраните модель под именем
piracy_hexbin
.
Теперь мы построим графическую модель нашего алгоритма. Диалог Processing modeler имеет главное окно и панель в левой его части. На левой панели найдите панель Inputs, в которой перечислены разные возможные типы исходных данных. Выберите пункт + Векторный слой и перетащите его в главное окно.
Введите
Input Points
в поле «Имя параметра» и выберитеТочка
из списка Тип геометрии. Этот элемент будет представлять точечный слой, хранящий случаи пиратства.
Перетащите в главное окно еще один элемент + Vector Layer. Введите
Base Layer
в поле Имя параметра и выберитеПолигон
из списка Тип геометрии. Этот элемент будет представлять слой «natural earth» с контурами материков.
Мы хотим сгенерировать глобальную сетку шестиугольников, при этом размер ячейки сетки не должен быть запрограммирован в самой модели. Вместо этого нам необходимо дать пользователю возможность указывать самостоятельно данный параметр, чтобы он мог экспериментировать с различными размерами ячеек без изменения всей модели. Выберите элемент + Число и перетащите его в главное окно. Введите
Grid Size
в поле Имя параметра и нажмите OK.
Теперь, когда определены все входные элементы, мы можем добавить к нашей модели пошаговые действия. Все доступные инструменты находятся на панели Algorithms. Первым шагом необходимо перепроецировать базовый слой в систему координат проекта. Воспользуйтесь строкой поиска, найдите инструмент
Перепроецировать слой
и перетащите его в главное окно.
Примечание
Необходимость этого шага объясняется тем, что алгоритм генерации сетки требует указания координат границ сетки в системе координат проекта.
В выпадающем списке Исходный слой окна Перепроецировать слой выберите
Base Layer
. Отметьте галочкой пункт Использовать систему координат проекта. Нажмите OK.
Теперь между элементом + Base Layer и инструментом Перепроецировать слой появилась линия связи. Она иллюстрирует поток выполнения нашего алгоритма. Следующим шагом является создание сетки шестиугольников. Найдите инструмент
Create grid
и перетащите его в главное окно.
В выпадающем списке Grid type диалогового окна Generate grid выберите пункт
Hexagon (polygon)
. В выпадающем списке Grid extent выберите пунктExtent of 'Перепроецировано' from algorithm 'Перепроецировать слой'
. Нажмите на кнопку 123 под ярлыком Horizonal spacing и выберите пункт Model input.
В поле Using model input выберите
Grid Size
. Повторите действия для настройки Vertical Spacing. Нажмите OK.
Теперь мы имеем глобальную сетку шестиугольников, покрывающую всю площадь базового слоя включая полигоны материков и места, где нет точек. Далее мы отфильтруем те полигоны сетки, на которых нет точек исходного слоя. Найдите инструмент
Извлечь по пространственному отношению
и перетащите его в главное окно.
В выпадающем списке Извлечь объекты в слое выберите пункт
'Сетка' from algorithm 'Create grid'
, в поле где объект (геометрический оператор) выберитеПересекает
и в поле Объекты из слоя для сравнения выберитеInput points
. Нажмите OK.
Теперь у нас остались только те полигоны сетки, на которые попадает хотя бы одна точка. Чтобы сосчитать точки, используем инструмент
Count points in polygon
. Найдите и перетащите его в главное окно.
В выпадающем списке Полигоны выберите пункт
'Извлечено (по простр. отношению)' from algorithm 'Извлечь по пространственному отношению'
. В списке Точки выберитеInput Points
. В поле Количество введитеAggregated
. Нажмите OK.
Модель готова. Нажмите кнопку Save.
Вернитесь в основное окно QGIS. Созданная вами модель находится в панели Инструменты анализа в группе . Пришло время запустить и протестировать нашу модель. Поскольку наша цель - сосчитать количество точек входного слоя в каждой ячейке сетки, важно, чтобы сама сетка была сгенерирована в равновеликой проекции. Это гарантирует, что независимо от расположения сетки, площади, покрываемые ячейками, будут равны. Модель не требует явного указания проекции, вместо этого она использует проекцию, выбранную в окне Система координат проекта. Давайте выберем укажем для проекта глобальную равновеликую проекцию. Перейдите в меню .
В диалоговом окне Свойства проекта перейдите на вкладку Система координат. Мы воспользуемся проекцией Мольвейде. В поле Поиск введите
Mollweide
и выберитеWorld_Mollweide EPSG:54009
. Нажмите OK.
Можно увидеть, как слои перепроецировались на лету в выбранную проекцию. В панели Инструменты анализа перейдите к модели
piracy_hexbin
и запустите ее двойным щелчком.
В поле Base Layer выберите
ne_10m_land
, в поле Input Points выберитеASAM_events
. Размер ячейки сетки должен быть указан в единицах выбранной проекции. Единицами проекции Молльвейде являются метры. В поле Grid Size введите100000
м (100 км). Нажмите Выполнить чтобы запустить выполнение алгоритма. Когда процесс будет завершен, нажмите Закрыть.
В результате выполнения алгоритма в списке слоев появится новый слой
Aggregated
. Этот слой, как вы можете заметить, имеет поле NUMPOINTS, содержащее количество точек внутри каждой ячейки сетки. Давайте применим к слою стиль для более наглядного представления информации. Нажмите правой кнопкой мыши на слоеAggregated
и выберите Свойства.
Во вкладке Стиль выберите
Градуированный знак
, в поле Value выберитеNUMPOINTS
. Нажмите на поле, отображающее стиль после ярлыка Значок.
Выберите символ Простая заливка, а в списке Стиль обводки выберите Без обводки. Это сделает грани шестиугольников прозрачными. Нажмите OK.
В выпадающем списке Градиент выберите пункт
Viridis
. Снова нажмите на стрелку выпадающего списка и выберите Инвертировать градиент.
Градуированный знак делит значения в выбранном поле на классы и присваивает каждому классу свой цвет. В выпадающем списке Мода выберите
Natural Breaks (Jenks)
и нажмите Классифицировать. Нажмите OK.
Примечание
Подробнее о режимах классификации вы можете прочитать здесь: Основная стилизация векторного слоя.
Вернитесь в основное окно QGIS, отключите слой
ASAM_events
. Вы увидите прекрасную визуализацию проблемных зон на земном шаре.
Теперь, когда последовательность операций запрограммирована в модели, нетрудно воспроизвести результат. Также модель позволяет экспериментировать без повторения промежуточных шагов вручную. Если ваши входные данные со временем изменятся, например, если через несколько месяцев будет опубликован обновленный список случаев пиратства, вы можете запустить вашу модель с новым набором данных и воссоздать аналогичную карту без необходимости помнить каждый шаг.
If you want to report any issues with this tutorial, please comment below. (requires GitHub account)