Версия QGIS в статье: 3.40 Уровень знаний: для начинающих пользователей QGIS, которые имеют небольшой опыт в использовании программы
Работая с картами, люди нередко забывают, что это модель реального трехмерного мира. И такая модель, даже оставаясь плоской, помогает решать объемные во всех смыслах задачи. В этой статье вы узнаете, как с помощью QGIS считать объемы объектов: например, выемок или насыпей, карьеров или гор.
Зачем нужно считать объемы
С помощью цифровых моделей рельефа можно не только определять высоты отдельных участков и крутизну склонов, но и рассчитывать их объемы. Расчет объемов – нередкая операция, используемая при строительстве. Овраг мешает стройке? Нужно определить, сколько земли привезти, чтобы его засыпать. На стройплощадку привезли горы песка, но никто не знает, хватит ли его для работ? Это тоже ГИС-задача, которую можно решить с помощью QGIS.
Расчет объемов форм рельефа или объектов на земле не ограничивается строительной сферой и может использоваться в разных прикладных задачах других дисциплин. Если перед вами стоит подобная проблема, то эта статья вам поможет.
Если нужно пройти на практике основы ГИС и анализ пространственных данных, приходите на курс повышения квалификации «Введение в QGIS», в котором собраны все основы ГИС с нуля до продвинутого уровня!
Исходные данные
Чтобы посчитать объем объекта на местности, вам нужна цифровая модель рельефа (ЦМР, также Digital Elevation model — DEM). Но без нюансов не обойтись.
Цифровые модели рельефа можно разделить на:
цифровая модель поверхности (Digital Surface Model – DSM), когда определены отметки высот не только рельефа, но и объектов на нем;
цифровая модель рельефа (Digital Terrain Model – DTM), определены отметки высоты рельефа без учета объектов на его поверхности: без зданий, деревьев, машин.
Чем меньше размер пикселя у модели (то есть чем выше разрешение), тем точнее расчет. У глобальных моделей рельефа, то есть доступных на всю или почти всю территорию нашей планеты, можно рассчитывать на размер пикселя примерно 30 на 30 м. Для некоторых регионов в открытом доступе можно найти ЦМР с разрешением до 1 м. Аэрофотосъемка или LiDAR могут давать данные с еще более высоким пространственным разрешением.
Подготовительные работы
Итак, у вас есть цифровая модель рельефа (в моем случае это SRTM) и место для расчета объема – в моем случае это Сибайский карьер в Башкортостане. Иногда требуется засыпать карьеры, но на всякий случай оговорюсь, что Сибайский карьер я взял для примера, и я не знаю ничего о планах по его использованию.
В качестве примера я буду рассчитывать объем карьера, то есть какой объем чего-либо туда может поместиться. Для начала нужно убедиться, чтобы цифровая модель рельефа была в системе координат, использующей метры в качестве основных единиц. Это можно посмотреть в свойствах слоя, в разделе «Информация». Если ваша ЦМР не в такой системе координат, то пересохраните слой в подходящую.
Далее, чтобы рассчитать объем объекта, нам нужно две вещи: контур объекта и базовая отметка (высота, до которой нам нужно заполнить наш карьер).
Для рисования контура карьера просто создаем векторный полигональный слой и обводим наш объект. Очень важно, чтобы система координат слоя и система координат ЦМР были одинаковыми.
С базовой отметкой все гораздо интереснее. Вы можете просто покликать на пиксели ЦМР вокруг вашего карьера с помощью инструмента «Определить объекты» (Ctrl + Shift + I) и выбрать то, что вам больше нравится, а можете использовать статистику.
Статистическое определение базовой отметки
Территория вокруг карьера редко бывает идеально ровной поверхностью, и отметки высот могут варьироваться. Поэтому одним из вариантов базовой отметки может быть то значение, которое либо чаще всего встречается вокруг объекта, либо является средним. Найти это значение можно через зональную статистику.
Для того чтобы статистически определить базовую отметку, мы определим, какая средняя высота поверхности вокруг нашего объекта в определенном радиусе.
Сначала строим буфер от территории нашего карьера. Я взял радиус 30 м, чтобы в выборку попало хотя бы по паре пикселей с каждой стороны от карьера.
Для построения буфера необходимо выбрать на панели инструментов вкладку «Вектор», затем «Геообработка», «Буферизация».
В результате работы функции получается полигон, который больше карьера на 30 м с каждой стороны.
Если вычислять статистику по нему, то в выборку попадут и глубины карьера. Поэтому надо сделать условный бублик: из буферизированного полигона вычесть полигон карьера. Это можно сделать с помощью функции «Разность» («Вектор», «Геообработка», «Разность»)
Теперь определяем величину базовой отметки как медианное значение пикселей, которые попадают в бублик. Если у вас в правой части окна есть меню «Инструменты анализа», то ищем в нем функцию «Зональная статистика». Если у вас такого меню справа нет, то на самой верхней панели ищите «Анализ», «Панель инструментов», после чего у вас должны появиться «Инструменты анализа» в правой части экрана.
Важно! Метод определения базовой отметки не является универсальным и в некоторых случаях может не подходить.
Определяем объем
Когда у вас есть цифровая модель рельефа, полигон объекта и значение базовой отметки, то это значит, что есть все данные для расчета объема.
Растровый слой представляет собой совокупность множества прямоугольников (часто квадратов) – пикселей со значением высоты в метрах. Объем параллелепипеда определяется как площадь фигуры, умноженная на высоту. Следовательно, если умножить площадь пикселя на его глубину, то получится объем, который необходим, чтобы заполнить место в данном пикселе. Если же мы посчитать объемы всех пикселей, которые попадают в границы карьера и просуммируем их, то получится объем карьера.
Первым действием определяем глубину карьера в каждом отдельном пикселе. Для этого нужен «Калькулятор растров» («Растр», «Калькулятор растров…»).
Важно! Данная формула работает для карьеров, то есть для определения объема выемки. Если вы хотите посчитать объем горы или другого объекта, который выше базовой отметки, тогда формула будет иметь вид: «значение пикселя минус значение базовой отметки».
Теперь для расчета объема посчитаем высоту всех пикселей, то есть сумму всех глубин, если говорить про карьер. Для этого используем опять функцию «Зональная статистика», только вместо медианы потребуется посчитать сумму.
Чтобы узнать площадь пикселя, откройте свойства исходного слоя цифровой модели рельефа, и в пункте «Размер пикселя» будут указаны его длина и ширина.
Теперь настало время определить объем. Для этого заходим в слой, в котором посчитана сумма глубин, открываем калькулятор полей и перемножаем длину пикселя, ширину пикселя и сумму глубин всех пикселей карьера.
Вы можете точно скопировать значения пикселей, либо округлить, как я. Для удобства копирования можете создать новое поле. Главное – выбрать правильный тип поля, для корректного отображения.
Как можно улучшить расчет
Если вам часто приходится считать объемы, то вы можете сделать геомодель, чтобы автоматизировать задачу. Геомодели позволяют собрать несколько операций в единый алгоритм обработки. Вместо ручного повторения действия вводите сразу все нужные параметры и запускаете процесс. Если освоите Python, то можете даже написать свой скрипт, который будет работать и считать еще быстрее, и с точки зрения интерфейса может оказаться удобнее лично для вас.
Если вы используете большие данные, для оптимизации расчетов можете обрезать растр по маске (по границам объекта, для которого считается объем). После этого количество пикселей, для которых будет происходить расчет, уменьшится.