6 Пространственные операции
Для выполнения заданий из раздела “Запросы” загрузите файлы по ссылке 1 или ссылке 2 и создайте новый проект:
- Создайте новую папку проекта под названием “Раздел 6” а так же новый проект в QGIS;
- Загрузите файлы в QGIS;
- Задайте систему координат проекта EPSG:32646;
- Сохраните файл проекта в папку проекта “Раздел 6”.
Панель меню “Вектор” > “Геообработка” содержит основные инстументы для изменения векторных объектов (Рисунок 7.4).
По умолчанию, результатом применения каждого инструмента является временный векторный слой с измененной геометрией. Временные слои помечены иконкой справа от названия (см. Рисунок 6.2).
Если требуется сделать временный слой постоянным, в контекстном меню слоя выберите пункт “Сохранить на диск…” и задайте параметры сохранения, в противном случае, после закрытия проекта данные слоя будут потеряны. При попытке закрытия проекта с несохраненными временными слоями появится соответствующее предупреждение (Рисунок 6.3).
6.1 Изменение системы координат слоя
В некоторых случаях требуется изменить систему координат слоя. Например, для построения буфера (см. Глава 6.2) в метрах (а не градусах) тебуется спроецированная (плоская) система координат. Изменить систему координат векторного слоя возможно при помощи инструмента “Вектор” > “Управление данными” > “Перепроецировать слой…”. В пункте “Исходный слой” задается слой, проекцию которого необходимо изменить. Пункт “Целевая система координат” определяет новую систему координат. По умолчанию инстумент создает временный слой (Рисунок 6.4).
Перепроецируйте слой “rivers” в систему координат “EPSG:32646 - WGS84 / UTM zone 46N”. Переименуйте появившийся временный слой из “Перепроецировано” в “rivers UTM 46N”. Сохраните временный слой в папку проекта.
6.2 Создание буферной зоны
Буферные зоны используются для обозначения области постоянного радиуса вокруг объекта. В лесном хозяйстве буферные зоны чаще всего используются для выделения водоохраннных зон вокруг рек или разрядов такс вывозки древесины (в этом случае буферные зоны выглядят в виде кругов с пунктом реализации древесины в центре).
!!! Рисунки водоохранных зон и таксовых районов добавить!
Инструмент “Вектор” > “Геообработка” > “Буферизация…” (Рисунок 6.5) создает область постоянного радиуса вокруг каждой геометрии слоя: буферную зону или буфер. Единицы измерения радиуса (задается в пункте “Расстояние”) будут зависить от системы координат слоя. В географической системе координат радиус задается в угловой мере (градусах), что не очень удобно. Поэтому для построения буфера в линейной мере (метрах, километрах и т.д.), сначала проводят перепроецирование в “плоскую” (спроецированную) систему координат (это действие было выполнено в предыдущем Задание 6.1), после чего строят буфер заданного радиуса. Чек-бокс “Результат объединения…” определяет будет результат представлен объединенной геометрией или отдельными геометриями для каждого объекта.
Постройте буферы радиусом 100 метров вокруг рек (слой “rivers UTM”). Слою буферных зон задайте название “буфер рек 100 м” и сохраните в папку проекта. Результат выполнения задания изображен на рисунке (Рисунок 6.6).
6.3 Инструменты “Обрезать…” и “Пересечение…”
Часто требуется обрезать один слой по границам другого. Для выполнения такой операции применяется инструмент “Вектор” > “Геообработка” > “Обрезать…”. Алгоритм обрезает “Исходный слой” по границам “Слоя наложения”. В результате будут сохранены только те части исходного слоя, которые пересекаются со слоем наложения (Рисунок 6.7).
Создайте слой частей выделов, которые попадают в стометровые буферные зоны вокруг рек. Для этого, по примеру выше, примените инструмент “Обрезать…” к слоям “videl” и “буфер рек 100 м”. Сохраните временный слой на диск под названием “Части выделов в водоохранной зоне”. Результат выполнения задания приведен на рисунке ниже (Рисунок 6.8).
Похожим на инструмент “Обрезать” функционалом обладает инструмент “Вектор” > “Геообработка” > “Пересечение…”. Однако, если первый инструмент просто обрезает по границе, инструмент “Пересечение” так же копирует атрибуты слоя наложения в слой-результат. Воспользуемся инструментом “Пересечение” что бы определить к водоохранным зонам каких рек принадлежит та или иная часть выдела. На данный момент в проект имеется слой “Буфер рек 100 м” в атрибутах которого присутствует поле “name”, определяющее к какой реке относится тот или иной буфер (это поле было наследовано из слоя rivers) (Рисунок 6.9 (a)). Используем слои “videl” и слой “Буфер рек 100 м” в инструменте “Пересечение” (Рисунок 6.9 (b)). В настройках инструмента возможно задать поля исходного слоя и слоя наложения, которые останутся в результирующем слое (по умолчанию выбраны все поля). В исходном слое выберем поля: “fid”, “kvartal”, “videl”, “zapax_1_ha” (Рисунок 6.9 (c)). В слое наложения выберем поле “name” (Рисунок 6.9 (d)). В результате применения инструмента в панеле слоев появится новый временный слой “Пересечение”. Результат будет идентичен применению инструмента “Обрезать”, за исключением таблицы атрибутов, которая будет содержать выбранные поля одного и другого слоя.
- По примеру выше, примените инструмент “Пересечение” к слоям “videl” и “Буфер рек 100 м”.
- Полученный векторный слой сохраните на диск под названием “Результат пересечения выделов и буферных зон”.
- Задайте стиль слоя так, что бы выделить цветом выделы, принадлежащие буферным зонам разных рек. Результат выполнения задания отображен на рисунках ниже (Рисунок 6.10, Рисунок 6.11).
6.4 Инструмент “Разность…”
Инструмент “Вектор” > “Геообработка” > “Разность…” проводит обратную операцию: из исходного слоя вырезаются части, пересекающиеся со слоем наложения.
Используя инструмент “Разность”, вырежите части выделов, которые попадают в стометровые буферы вокруг рек. Для этого примените инструмент “Разность…” к слоям “videl” и “Буфер рек 100 м”. Сохраните результат в папку проекта. Результат выполнения задания приведен на рисунке (Рисунок 6.12).
Инструмент “Вектор” > “Геообработка” > “Объединение по признаку…” позволяет объединить объекты с одинаковыми атрибутами. Например, он дает возможность создать границы лесных кварталов из слоя выделов. Для этого в качестве “Исходного слоя” выбирают слой выделов, в пункте “Поля классификации” выбирают поле для объединения объектов (“kvartal”) (Рисунок 6.13). В результате применения инструмента, границы выделов с одинаковым номером квартала будут стерты и таким образом образуют квартальную сеть.
По примеру выше, объедините выделы в слое “videl” по полю “kvartal”. В результате должен появиться новый временный слой с границами кварталов (см. Рисунок 6.14). Сохраните слой на диск под названием “kvartal”.
6.5 Подсчет длины, площади и периметра геометрий.
Программа QGIS позволяет совершить автоматический расчет площади, периметра и длины геометрий. При таком расчете важно обратить внимание на единицы измерения величин. Единицы измерения длины (так же как периметра и площади) зависят от настроек проекта. Для их изменения перейдите в пункт меню “Проект” > “Свойства” > во вкладке “Общие” найдите раздел “Измерения”. Пункты “Единицы измерения расстояния” и “Единицы измерения площади” задают соответствующие единицы измерения.
Перейдите в пункт меню “Проект” > “Свойства” > во вкладке слева “Общие” найдите раздел “Измерения” (см. Рисунок 6.15). Пункты “Единицы измерения расстояния” укажите “метры” в пункте “Единицы измерения площади” укажите “гектары”. Примените изменения.
Для подсчета длины геометрий, в таблице атрибутов создают новое поле (тип поля целое или десятичное число) и заполняют его выражением $length которое вычисляет длину для каждой геометрии слоя.
Периметр и площадь геометрий вычисляются аналогично при помощи функций $perimeter и $area соответственно.
В слое “videla” создайте новое поле “perimeter_m” (тип поля десятичное число). Заполните это поле значениями периметра (в метрах) для каждого выдела. Сумма периметров выделов должна составить 335 649,9 м.
Для выполнения предыдущих заданий (Задание 6.8, Задание 6.9) использовались два действия: 1. Создавалось поле с нужным типом данных 2. Созданное поле заполнялось значениями функции ($length, $area и др.) Инструмент “Калькулятор полей” позволяет совместить эти два действия: задаются параметры поля и функция, значениями которой это поле будет заполнено.
!!! Рисунок Калькулятора полей с настройками заполнения поля area_ha
В слое “videla” при помощи калькулятора полей создайте новое поле “area_ha” (тип поля десятичное число) заполненное значением площади (в гектарах) для каждого выдела. Сумма площадей выделов должна составить 1 039,8 га.
6.6 Арифметические операции с атрибутами
После выполнения Задание 6.10 в слое “videla” будут находиться два поля с площадью. Поле “s_ha” это данные площади выдела по таксационным описаниям. Второе поле “area_ha” было создано при выполнении Задание 6.10 и содержит площади геометрий, рассчитанные автоматически. Отличаются ли эти две площади? Для сравнения двух значений создайте новое поле “diff_area” (десятичное) куда будет записана разность значений двух полей (выражение "s_ga" - "area"). По разнице можно оценить насколько значения двух полей различаются.
- В слое “videla” создайте поле “diff_area”. Заполните это поле выражением
"s_ha" - "area"для подсчета различий между площадями. - Создайте карту, где выделы с разностью по абсолютному значению более 0.3 га будут окрашены в красный цвет. Обртите внимание - разность может быть как положительной, так и отрицательной, для получения абсолютного значения используйте функцию
abs(). - Создайте новый макет и сохраните карту как изображение. Результат выполнения задания приведен на рисунке ниже (Рисунок 6.16).
Более корректно использовать относительную разность (в процентах) а не абсолютные значения. Для этого создадим новое поле “diff_area_perc” (тип поля - десятичное) и заполним его выражением abs("area" * 100 / "s_ga" - 100). Функция abs() возвращает абсолютное значение выражения в скобках.
- В слое “videla” создайте новое поле “diff_area_perc”. Заполните это поле относительной разностью полей
abs("area" * 100 / "s_ga" - 100). - Создайте карту, где выделы с разностью более 15 % (поле “diff_area_perc”) будут окрашены в красный цвет.
- Создайте новый макет и сохраните карту как изображение. Результат выполнения задания приведен на рисунке ниже (Рисунок 6.17).
6.7 Ситуационное задание №1
Этой задание является обобщением полученных навыков. Последовательно применяйте изученные в этом разделе инструменты и решите практическую задачу.
Рассчитайте запас насаждений в водоохранных зонах Караульного лесничества. Выполните следующие этапы задания:
- Постройте буферные зоны радиусом 50 метров вокруг рек (см. Задание 6.2).
- Создайте новый слой, содержащий части выделов, попадающих в водоохранные зоны (см. Задание 6.4).
- Рассчитайте площади частей выделов, попадающих в водоохранные зоны. Для этого создайте новое поле “area_buffer_ha”, заполните его площадью частей выделов (в гектарах) (см. Задание 6.10).
- Рассчитайте запас для частей выделов. Для этого создайте новое числовое поле “zapas_buffer”, заполните его произведением новой площади выдела (поле “area_buffer_ha”) и запаса на 1 га (поле “zapas_1ga”) (см. Задание 6.11).
- Сохраните таблицу с запасами в водоохранной зоне как табличный файл Excel (.xlsx). Для этого в контекстном меню слоя выберите пункт “Экспорт” > “Сохранить объекты как…”, после чего укажите необходимый формат и сохраните файл в папку проекта.
- Проведите подсчет суммарного запаса в водоохранных зонах, запас должен быть равен 15 279,11 \(м^3\).
6.8 Ситуационное задание №2
Для расчета стоимости аренды лесных участков для заготовки древесины, используется система таксовых раздядов. Каждый из разрядов покрывает зону определенного радиуса от пункта отгрузки древесины:
- 1 разряд от 0 до 10 км
- 2 разряд от 10,1 до 25 км
- 3 разряд от 25,1 до 40 км
- 4 разряд от 40,1 до 60 км
- 5 разряд от 60,1 до 80 км
- 6 разряд от 80,1 до 100 км
Разряд такс устанавливается для каждого квартала в зависимости от того, в какую зону он попадает, для этого вокруг пункта отгрузки древесины строятся буферные зоны.
Постройте карту разрядов такс для части Караульного лесничества. Пунктом отгрузки будет служить здание речного вокзала в г. Красноярск. Для решения задачи выполните следующие этапы задания:
- Создайте новый векторный точечный слой и отметьте пункт отгрузки (поскольку в последующем вокруг пункта придется строить буферные зоны, выберите для слоя систему координат UTM (см. Задание 4.2)). Поставить пункт отгрузки вам поможет Гугл карта (см. Задание 1.14).
- Постройте буферные зоны разрядов такс вокруг пункта отгрузки (см. Задание 6.2).
- Что бы удалить артефакты на квартальной сети, используйте инструмент “Удалить отверстия” в панеле “Инструменты анализа” (в поле “Удалить отверстия площадью меньше чем” укажите значение 0.01 квадратный градус).
- Оформите карту в виде макета и сохраните в изображение (цвета выберите произвольно).
Результат выполнения задания представлен на рисунке (см. Рисунок 6.18).
6.9 Построение полигона по координатам
В лесном хозяйстве не редко приходится рещать задачу построения полигона по каталогу координат. Решение такой задачи можно разбить на два этапа:
- Импорт каталога координат в QGIS и отображение его в виде точек на карте;
- Преобразование точек в линию а затем в полигон.
Каталог координат представляет из себя таблицу с координатами и порядковыми номерами точек. Так же в таблице должна быть указана система координат. Рассмотрим каталог координат в файле “Координаты.xlsx”, представленный таблицей Excel.
!! Рис - Каталог координат в программе LibreOffice Calc
Файл состоит из заголовка (перва строка) в котором указана система координат и таблицы (каталога координат) с 3 столбцами: n - порядковый номер точки, lat_wgs84 - широта точки, град., lon_wgs84 - долгота точки, град. Так же обратите внимание на то, что в координатах целая часть от дробной отделена запятой (это понадобится при настройке импорта файла). Сохраним таблицу в формат .csv (Comma-Separated Values, значения разделенные запятой), позволяющий хранить табличные данные в текстовом формате. Разделителем полей может служить не только запятая, основное условие - символ-разделитель не должен присутствовать в данных таблицы. В нашем случае использовать запятую не самое лучшее решение т.к. запятая присутствует в данных таблицы в виде десятичного разделителя. Лучшим решением будет использовать в качестве разделителя полей символ табуляции.
Воспользуйтесь табличным редактором и откройте файл “Координаты.xlsx”. Сохраните содержимое таблицы в формат .csv “Координаты.csv”. В качестве разделителя полей используйте символ табуляции.
Теперь пришло время импортировать файл “Координаты.csv” в прорамму QGIS. Перейдите в пункт меню “Слой” > “Добавить слой” > “Добавить слой из текста с разделителями…”. В пункте “Имя файла” выберите файл “Координаты.csv”. Настроим параметры импорта: “Формат файла” > “Другие разделители” > поставьте чек-бокс напротив пункта “Табуляция” (здесь задается разделитель полей, который был выбран при сохранении файла .csv - табуляция). “Параметры записей и полей” > “Игнорировать строки в начале файла” > укажите значение 1 (первая строка содержит название системы координат, поэтому при чтении файла будет пропущена). Так же сообщим программе о том, что наша таблица имеет заголовки в 1 строке (по счету это 2 строка, но в настройке выше первая строка была пропущена): чек-бокс “Загружать имена полей из первой строки”. Вкладка “Формат геометрии” определяет настройки системы координат а так же поля, из которых эти координаты будут извлечены. Выбирается режим “Координаты точки”, “Поле х” > “lon_wgs84” (указывается столбец с долготой точки), “Поле y” > “lat_wgs84” (указывается столбец с широтой точки), “Система координат геометрии” > “EPSG:4326 WGS84”. Убедитесь в том, что в пункте “Примеры данных” таблица выглядит корректно, после чего нажмите “Добавить”, новый точечный векторный слой появится в панеле слоев.
После добавления слоя следует пересохранить его в Shape-file или GeoPackage.
По примеру выше, импортируйте координаты точек (файл .csv). Сохраните импортированный слой точек в файл.
Путь преобразования точек в полигон проходит через промежуточный этап: создание линий. Для этого в панеле “Инструменты анализа” выберите инструмент “Точки в контур”.
“Исходный слой” > точечный слой “Координаты”, поставьте чек-бокс “Создать замкнутые контуры”. Так же при желании можно задать поле, определяющее порядок вершин в линии (поле “Выражение порядка”). По умолчанию порядок будет определяться номером строки в таблице атрибутов. После всех настроек нажмите “Выполнить”, новый линейный слой (“Пути”) появится в панеле слоев.
Осталось линейный слой трансформировать в полигональный. Для этого используют инструмент “Построить полигоны” или “Линии в полигоны”.
!! Рис - Полигон, построенный из линий
По примеру выше, трансформируйте точки в линии а затем в полигон. Сохраните полигон как новый векторный слой.
6.10 Создание каталога координат
В некоторых случаях необходимо решить обратную задачу - получить каталог координат поворотных точек полигонального слоя. При этом получить координаты точек часто необходимо в СК отличной от СК полигонального слоя, или сразу в нескольких СК. Рассмотрим второй случай, когда дан полигон (СК WGS84) и нужно получить координаты его поворотных точек в двух СК: WGS84 и GSK2011.
!!Рис - Пример каталога координат (каждая поворотная точка записана в двух СК)
Для выполнения заданий из подраздела “Создание каталога координат”, загрузите файл полигона в существующий проект QGIS. Файл можно загрузить по ссылке ()
Решение задачи будет состоять из следующих этапов:
- Извлечение вершин из полигона
- Добавление полей (широта, долгота) и расчет координат в СК WGS84
- Перепроецирование слоя в СК GSK2011
- Добавление полей (широта, долгота) и расчет координат в СК GSK2011
- Сохранение координат в таблицу
Инструмент “Извлечь вершины” создает новый точечный слой, содержащий вершины геометрий исходного линейного или полигонального слоя.
Примените инструмент “Извлечь вершины” к полигону.
Системы координат исходного полигонального и созданного точечного слоев совпадают (WGS84). Для записи координат, создадим дополнительные 2 поля в атрибутах слоя (широта - lat, долгота - lon), тип поля - десятичное (real). Заполним каждое из полей функциями round(x($geometry), 6) для долготы и round(y($geometry), 6) для широты. Функции x($geometry), y($geometry) возвращают координату точки по долготе и широте, соответственно. Функция round(value, digit) используется для округления координат до 6 знаков после запятой. Она требует два аргумента: value - число, которое нужно округлить; digit - количество знаков после запятой. Функция round(value, digit) часто используется вместе с такими функциями как $length и $area.
Рассчитайте координаты в таблице атрибутов точечного слоя (СК WGS84).
!! Рис - Результат выполнения задания.
Для того, что бы получить координаты тех же объектов в другой СК, необходимо перепроецировать слой (см. Задание 6.1) и повторить действие выше т.е. создать еще два поля и заполнить их функциями round(x($geometry), 6) и round(y($geometry), 6).
Перепроецируйте слой в СК GSK2011. Создайте два новых поля (lat_gsk2011 и lon_gsk2011) и заполните их координатами (см. Задание 6.19). Сохраните таблицу атрибутов в файл Excel (см. Задание 6.13).
!! Рис - Cохраненная таблица атрибутов.
6.11 Расчет азимутов
Буссольная съемка широко распространена в лесном хозяйстве при отводе лесосек. Она основана на полярной системе координат при которой определяется длина и направление линии (румб или азимут). Знание этих величин для каждой из линий необходимо для вынесения границ участка на местность при помощи буссоли.
Для выполнения заданий из подраздела “Расчет азимутов”, загрузите файл полигона в существующий проект QGIS. Файл можно загрузить по ссылке ()
Решение задачи будет состоять из следующих этапов:
- Конвертирование границы полигона в линию
- Разделение линии на отрезки
- Расчет длины и азимута для каждого отрезка в таблице атрибутов
В качестве исходных данных используется полигон условной лесосеки. Для конвертирования его границы в линию применяется инструмент “Полигоны в линии”. В результате граница полигона будет представлена в виде линии, которую необходимо разбить на отрезки инструментом “Разбить линии на отрезки”. Для каждого из полученных отрезков необходимо добавить 2 поля в которые записать длину и азимут. С расчетом длины при помощи функции $length вы уже сталкивались (см. Задание 6.8). Расчет азимутов линий несколько сложнее и включает в себя несколько функций. Для расчета азимутов линий используется функция azimuth(point_a, point_b), где point_a - начальная точка отрезка; point_b - конечная точка отрезка. Произвести расчет начальной а конечно точек возможно при помощи функций start_point(@geometry) и end_point(@geometry). В результате получаем следующее выражение: azimuth(start_point(@geometry), end_point(@geometry)). Однако полученное выражение будет рассчитывать направление линии в радианах. Для пересчета радиан в градусы поместим выражение в фукцию degrees(). Итоговое выражение будет выгрядеть как: degrees(azimuth(start_point(@geometry), end_point(@geometry))).
По описанию выше рассчитайте длины линий и азимуты для полигона. Сохраните их в таблицу Excel. Результат выполнения задания приведен на рисунке ниже.
!! Рис - Таблица азимутов и длин линий.




















