Автоматизация заполнения атрибутов по растру: 800+ полигонов, 5 минут, 1 выражение
Обучение

Автоматизация заполнения атрибутов по растру: 800+ полигонов, 5 минут, 1 выражение

Меня зовут Валерия, и я ГИС-специалист. Эта статья – мой личный опыт решения конкретной задачи. Возможно, кому-то из коллег он будет полезен.

Однажды, работая в QGIS над проектом, я столкнулась с распространенной задачей: нужно было заполнить атрибуты для 859 полигонов лесной квартальной сети. Времени хватало, но вносить все вручную, честно говоря, не хотелось. И риск ошибки при ручном вводе достаточно велик. В основе у меня был геопривязанный растр – отсканированная карта лесов с классами пожарной опасности, разбитая по той же квартальной сети, что и в векторном слое. Пять классов, каждый обозначен своим цветом. Тогда я подошла к вопросу с позиции автоматизации.

Каждый класс уникален

У каждого цвета на растре есть свое числовое значение. И если сопоставить эти значения с классами опасности, можно заполнить полигоны в автоматическом режиме. Так на ум пришел инструмент, часто используемый среди ГИС-специалистов и картографов – зональная статистика (Анализ → Панель инструментов → Анализ растров → Зональная статистика). Этот инструмент рассчитывает статистику растра внутри каждого полигона.

Почему я рекомендую выбрать статистику «большинство»

Я использовала метод «большинство» (majority). Он определяет, какое значение пикселей встречается в пределах полигона чаще всего. Это важно, так как внутрь полигона могут попасть «лишние» пиксели:

  • обводка,
  • фон,
  • смешанные цвета на границах объектов (особенно если качество исходного растра низкое).

Метод «большинство» отсеивает этот шум и дает практически чистые данные о цвете класса в каждом полигоне. Канал растра можно выбрать любой. Я оставила красный, так как он стоит по умолчанию для трехканальных растров:

Что получилось после вычисления зональной статистики

В выходном шейп-файле зональной статистики появилось поле «_majority». В нем находятся значения преобладающего цвета (по красному каналу) для каждого полигона. В моем случае соответствие получилось таким:

Значение (_majority)ЦветКласс пожарной опасности
254Красный1-й класс
249Оранжевый2-й класс
255Желтый3-й класс
168Зеленый4-й класс
128Голубой5-й класс

Обязательная проверка

Перед тем, как идти дальше, я советую проверить атрибутивную таблицу. Возможно, какой-то полигон накладывается на другие условные обозначения. В редких случаях это может повлиять на статистику. Для таких объектов лучше поправить значения вручную. Это займет минуту, но спасет от ошибок.

Финальный шаг: выражение CASE WHEN

Осталось создать новое поле и присвоить каждому полигону соответствующий класс. Для этого я использовала простое выражение:

CASE
WHEN "_majority" = 254 THEN 1
WHEN "_majority" = 249 THEN 2
WHEN "_majority" = 255 THEN 3
WHEN "_majority" = 168 THEN 4
WHEN "_majority" = 128 THEN 5
END

Пример в калькуляторе полей

Вместо нескольких часов рутинной работы - 5 минут. И риск ошибки минимален. Надеюсь, эта небольшая фишка сэкономит читателю столько же времени, сколько сэкономила мне.

Автор статьи: Габова Валерия gabova98@yandex.ru