Статьи

Как считать объемы в QGIS

ГИС Туториалы
Время прочтения: 7 минут
Версия QGIS в статье: 3.40
Уровень знаний: для начинающих пользователей QGIS, которые имеют небольшой опыт в использовании программы
Работая с картами, люди нередко забывают, что это модель реального трехмерного мира. И такая модель, даже оставаясь плоской, помогает решать объемные во всех смыслах задачи. В этой статье вы узнаете, как с помощью QGIS считать объемы объектов: например, выемок или насыпей, карьеров или гор.

Зачем нужно считать объемы

С помощью цифровых моделей рельефа можно не только определять высоты отдельных участков и крутизну склонов, но и рассчитывать их объемы. Расчет объемов – нередкая операция, используемая при строительстве. Овраг мешает стройке? Нужно определить, сколько земли привезти, чтобы его засыпать. На стройплощадку привезли горы песка, но никто не знает, хватит ли его для работ? Это тоже ГИС-задача, которую можно решить с помощью QGIS.
Расчет объемов форм рельефа или объектов на земле не ограничивается строительной сферой и может использоваться в разных прикладных задачах других дисциплин. Если перед вами стоит подобная проблема, то эта статья вам поможет.
Если нужно пройти на практике основы ГИС и анализ пространственных данных, приходите на курс повышения квалификации «Введение в QGIS», в котором собраны все основы ГИС с нуля до продвинутого уровня!

Исходные данные

Чтобы посчитать объем объекта на местности, вам нужна цифровая модель рельефа (ЦМР, также Digital Elevation model — DEM). Но без нюансов не обойтись.
Цифровые модели рельефа можно разделить на:
  • цифровая модель поверхности (Digital Surface Model – DSM), когда определены отметки высот не только рельефа, но и объектов на нем;
  • цифровая модель рельефа (Digital Terrain Model – DTM), определены отметки высоты рельефа без учета объектов на его поверхности: без зданий, деревьев, машин.
Разница между DSM и DTM (Источник изображения – https://www.cdema.org/virtuallibrary/index.php/charim-hbook/data-management-book/3-base-data-collection/3-2-digital-elevation-models)
Чем меньше размер пикселя у модели (то есть чем выше разрешение), тем точнее расчет. У глобальных моделей рельефа, то есть доступных на всю или почти всю территорию нашей планеты, можно рассчитывать на размер пикселя примерно 30 на 30 м. Для некоторых регионов в открытом доступе можно найти ЦМР с разрешением до 1 м. Аэрофотосъемка или LiDAR могут давать данные с еще более высоким пространственным разрешением.

Подготовительные работы

Итак, у вас есть цифровая модель рельефа (в моем случае это SRTM) и место для расчета объема – в моем случае это Сибайский карьер в Башкортостане. Иногда требуется засыпать карьеры, но на всякий случай оговорюсь, что Сибайский карьер я взял для примера, и я не знаю ничего о планах по его использованию.
В качестве примера я буду рассчитывать объем карьера, то есть какой объем чего-либо туда может поместиться. Для начала нужно убедиться, чтобы цифровая модель рельефа была в системе координат, использующей метры в качестве основных единиц. Это можно посмотреть в свойствах слоя, в разделе «Информация». Если ваша ЦМР не в такой системе координат, то пересохраните слой в подходящую.
Карьер и изолинии рельефа. С помощью настроек «Стиля слоя» в QGIS можно отображать растровую модель рельефа в виде изолиний
Далее, чтобы рассчитать объем объекта, нам нужно две вещи: контур объекта и базовая отметка (высота, до которой нам нужно заполнить наш карьер).
Для рисования контура карьера просто создаем векторный полигональный слой и обводим наш объект. Очень важно, чтобы система координат слоя и система координат ЦМР были одинаковыми.
С базовой отметкой все гораздо интереснее. Вы можете просто покликать на пиксели ЦМР вокруг вашего карьера с помощью инструмента «Определить объекты» (Ctrl + Shift + I) и выбрать то, что вам больше нравится, а можете использовать статистику.

Статистическое определение базовой отметки

Территория вокруг карьера редко бывает идеально ровной поверхностью, и отметки высот могут варьироваться. Поэтому одним из вариантов базовой отметки может быть то значение, которое либо чаще всего встречается вокруг объекта, либо является средним. Найти это значение можно через зональную статистику.
Для того чтобы статистически определить базовую отметку, мы определим, какая средняя высота поверхности вокруг нашего объекта в определенном радиусе.
Сначала строим буфер от территории нашего карьера. Я взял радиус 30 м, чтобы в выборку попало хотя бы по паре пикселей с каждой стороны от карьера.
Для построения буфера необходимо выбрать на панели инструментов вкладку «Вектор», затем «Геообработка», «Буферизация».
В результате работы функции получается полигон, который больше карьера на 30 м с каждой стороны.
Если вычислять статистику по нему, то в выборку попадут и глубины карьера. Поэтому надо сделать условный бублик: из буферизированного полигона вычесть полигон карьера. Это можно сделать с помощью функции «Разность» («Вектор», «Геообработка», «Разность»)
При работе функции важно не перепутать и правильно выбрать слои
Получаем бублик для расчета статистики
Теперь определяем величину базовой отметки как медианное значение пикселей, которые попадают в бублик. Если у вас в правой части окна есть меню «Инструменты анализа», то ищем в нем функцию «Зональная статистика». Если у вас такого меню справа нет, то на самой верхней панели ищите «Анализ», «Панель инструментов», после чего у вас должны появиться «Инструменты анализа» в правой части экрана.
Внимательно выбирайте нужные слои: слой бублика в качестве исходного и цифровую модель рельефа в качестве растра. В статистике для расчета необходимо выбрать «Медиана». По умолчанию она может не посчитаться, а это значение самое важное
В результате получится векторный слой бублика с рассчитанной статистикой. Значение в графе «_median» и есть наша будущая базовая отметка. Запишите ее значение, чтобы не потерять
Важно! Метод определения базовой отметки не является универсальным и в некоторых случаях может не подходить.

Определяем объем

Когда у вас есть цифровая модель рельефа, полигон объекта и значение базовой отметки, то это значит, что есть все данные для расчета объема.
Растровый слой представляет собой совокупность множества прямоугольников (часто квадратов) – пикселей со значением высоты в метрах. Объем параллелепипеда определяется как площадь фигуры, умноженная на высоту. Следовательно, если умножить площадь пикселя на его глубину, то получится объем, который необходим, чтобы заполнить место в данном пикселе. Если же мы посчитать объемы всех пикселей, которые попадают в границы карьера и просуммируем их, то получится объем карьера.
Первым действием определяем глубину карьера в каждом отдельном пикселе. Для этого нужен «Калькулятор растров» («Растр», «Калькулятор растров…»).
Глубина каждого пикселя определяется по формуле «значение базовой отметки минус значения пикселя». Формула выглядит примерно как на скрине.
Важно! Данная формула работает для карьеров, то есть для определения объема выемки. Если вы хотите посчитать объем горы или другого объекта, который выше базовой отметки, тогда формула будет иметь вид: «значение пикселя минус значение базовой отметки».
Если получили такую страшную картинку, то не пугайтесь, при работе калькулятора растров получаются артефакты на его краях, связанные чаще всего с перепроецированием растра
Настройте в свойствах слоя в графе «Стиль» минимальное значение чуть повыше и увидите, что карьер превратился в «гору»
Теперь для расчета объема посчитаем высоту всех пикселей, то есть сумму всех глубин, если говорить про карьер. Для этого используем опять функцию «Зональная статистика», только вместо медианы потребуется посчитать сумму.
Внимательно выставляем нужные слои для получения корректного результата
Теперь у вас есть глубина всех пикселей карьера, и осталось умножить ее на площадь пикселя
Чтобы узнать площадь пикселя, откройте свойства исходного слоя цифровой модели рельефа, и в пункте «Размер пикселя» будут указаны его длина и ширина.
Теперь настало время определить объем. Для этого заходим в слой, в котором посчитана сумма глубин, открываем калькулятор полей и перемножаем длину пикселя, ширину пикселя и сумму глубин всех пикселей карьера.
Ваша формула в калькуляторе полей будет примерно как на скрине
Вы можете точно скопировать значения пикселей, либо округлить, как я. Для удобства копирования можете создать новое поле. Главное – выбрать правильный тип поля, для корректного отображения.
Объем карьера теперь представлен в колонке «volume» и рассчитан в кубических метрах

Как можно улучшить расчет

Если вам часто приходится считать объемы, то вы можете сделать геомодель, чтобы автоматизировать задачу. Геомодели позволяют собрать несколько операций в единый алгоритм обработки. Вместо ручного повторения действия вводите сразу все нужные параметры и запускаете процесс. Если освоите Python, то можете даже написать свой скрипт, который будет работать и считать еще быстрее, и с точки зрения интерфейса может оказаться удобнее лично для вас.
Если вы используете большие данные, для оптимизации расчетов можете обрезать растр по маске (по границам объекта, для которого считается объем). После этого количество пикселей, для которых будет происходить расчет, уменьшится.
Больше практических кейсов в QGIS – на курсе повышения квалификации «QGIS для практиков: проекты и анализ данных»!

Связанные статьи