Практика 5. Продвинутая работа с конструктором моделей
В практиках 2 и 3 расчёт индекса, векторизация и отбор нужных объектов выполнялись вручную: калькулятор растров → изолинии → выборка объектов, шаг за шагом, каждый раз заново. Если ту же последовательность нужно повторить для другого снимка, другой даты или другой территории — придётся кликать всё то же самое ещё раз. Конструктор моделей QGIS решает эту задачу: он собирает несколько алгоритмов в один инструмент, который запускается одной кнопкой и всегда выполняет шаги в одинаковом порядке.
От ручных шагов к конструктору моделей
Конструктор моделей открывается через Анализ → Конструктор модели (или Ctrl+Alt+G).

Модель строится из входных данных (растровые и векторные слои, числа, системы координат — они добавляются один раз и потом доступны всем узлам модели) и узлов-алгоритмов, каждый из которых берёт данные либо из входов, либо из выхода предыдущего узла. Такая модель, в отличие от разовой последовательности кликов, сохраняется как файл и может быть запущена повторно на других данных или передана другому человеку.
Собираем модель: от индекса до линии берега
Соберём модель из трёх узлов, повторяющую то, что в Практике 3 делалось вручную, — только теперь одним запуском.
Вход: два растровых слоя — NIR и GREEN.
Узел 1. Калькулятор растров. Считает индекс по формуле (GREEN − NIR) / (GREEN + NIR):

О названии индекса
В исходных материалах практики результирующий слой назван «MNDWI», но формула использует каналы GREEN и NIR — это в точности индекс NDWI (Практика 3), а не формально иной индекс MNDWI (Modified NDWI), который строится по GREEN и SWIR. Здесь и далее слой называется NDWI, чтобы не путать эти два индекса.
Узел 2. Создать изолинии. Берёт выход калькулятора растров и строит контуры с шагом 0,2:

Узел 3. Извлечь по выражению. Берёт выход алгоритма «Создать изолинии» и разделяет контуры на две группы по условию — длиннее и короче 200 000 (в единицах системы координат слоя):
- Выражение — условие отбора:
$length > 200000 - Извлечено (по выражению) — имя слоя для контуров, прошедших условие: это и есть искомая береговая линия
- Неподходящие объекты — необязательное имя слоя для отброшенных коротких контуров (шум); можно оставить пустым
Рис. П5.4 — диалог алгоритма «Извлечь по выражению» с выделенными ключевыми полями
Целиком цепочка выглядит так:
(GREEN − NIR) / (GREEN + NIR)
шаг 0,2
$length > 200000
Рис. П5.5 — цепочка узлов конструктора моделей — от исходных каналов до отфильтрованной береговой линии
Типичная ошибка
Если промежуточному результату узла не задать имя в поле «Результат расчёта» / «Изолинии» и т.п., конструктор моделей не сохранит его как отдельный слой — тогда следующий узел не сможет взять его на входе через выпадающий список «взять с выхода алгоритма». Имя обязательно только у тех результатов, которые нужно передать дальше по цепочке или получить на выходе модели.
Результат запуска модели на снимках Азовского моря — векторная линия берега без ручного вмешательства:

Зачем нужен порог по длине контура
В Практике 3 после векторизации оставалось предупреждение: автоматическая векторизация создаёт контуры не только по береговой линии, но и вокруг внутренних водоёмов, островков и шумовых пятен — их приходилось убирать вручную. Узел «Извлечь по выражению» с условием $length > N делает то же самое автоматически: настоящая береговая линия обычно намного длиннее любого шумового артефакта, поэтому порог по длине отделяет одно от другого без ручной чистки.
Ниже — интерактивная модель этого шага на синтетическом (не измеренном) поле: длинная береговая линия и несколько коротких шумовых контуров. Подвиньте порог и посмотрите, какие контуры выражение $length > N сохраняет, а какие отбрасывает.
Лаборатория порога по длине контура
Слева — синтетическое поле после классификации. Справа — контуры, которые выдал бы алгоритм «Создать изолинии», раскрашенные по результату фильтра «Извлечь по выражению».
Типичная ошибка
Число в условии $length > N осмысленно только в единицах системы координат слоя. Для проекции в метрах (например, UTM) 200 000 — это 200 км, разумный порог для береговой линии протяжённого участка побережья. Если слой в географической системе координат (градусы), то же число 200 000 отфильтрует вообще все контуры — перед подбором порога стоит проверить единицы измерения системы координат слоя.
Мини-практикум: угадать выражение по результату
Задание 1. Ниже — результат классификации слоя MNDWI (см. пояснение выше про название индекса) по некоторому порогу. Какое выражение калькулятора растров дало этот результат?

IF("MNDWI@1" > 0.2, 1, 0) — граница проведена по значению индекса 0,2, что соответствует типичному порогу для уверенной классификации воды по NDWI-подобным индексам.Задание 2. Ниже — исходный канал Green и результат некоторого выражения над ним.


"Band_3_-_Green@1" < 5000 (или эквивалентно IF("Band_3_-_Green@1" >= 5000, 0, 1)) — облака дают завышенные значения яркости в канале Green, поэтому условие «меньше порога» превращает их в 0 (чёрный), а остальную территорию — в 1 (жёлтый).Домашнее задание
Соберите собственную модель из тех же трёх узлов (калькулятор растров → создать изолинии → извлечь по выражению) для снимка другой территории или другой даты. Подберите порог длины контура $length > N самостоятельно и обоснуйте выбор: почему именно это число, а не в 10 раз меньше или больше, — с учётом единиц измерения системы координат вашего слоя.