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