Расчет плотности застройки
Расчет площади зданий
Для расчета площади зданий воспользуемся калькулятором полей в таблице атрибутов.
Таблица атрибутов может быть открыта из контекстного меню слоя.

Расчет площади мы будем осуществлять в том слое, который вы получили по итогам перепроецирования: слой в системе координат UTM.
В открывшейся таблице атрибутов вы увидите собственную панель инструментов, на которой вам нужен калькулятор полей.

В открывшемся окне калькулятора полей вам нужно создать новое поле с типом данных “десятичное число”, в которое будет записан ваш результат.
Для расчета площади необходима будет одна из функций из группы Геометрия: area().

Само выражение:
area ($geometry)
Что значит аргумент $geometry в скобках?
Это говорит о том, что для расчета будет использована не какая-то конкретная геометрия одного объекта, а все геометрии слоя.
Обратите внимание, что у нас есть две функции для расчета площади:
$area- расчет площади осуществляется в системе координат проекта на эллипсоиде;area()- расчет площади осуществляется в системе координат слоя на плоскости.
Мы используем здесь второй вариант, так как нам необходим расчет именно в системе координат слоя. Для этого мы его и перепроецировали.
В результате вычисления вы получите новое поле, в которое будет записана площадь.

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

Вы можете указать это выражение в свойствах слоя в пункте Формы полей, тогда при создании нового объекта площадь для него будет рассчитаваться автоматически.

Это будет работать для любого вашего вычисляемого поля.
Отрисовка кварталов
Для того, чтобы определить плотность застройки нам необходимо сверить ее с какими-то территориальными единицами. Это могут быть единицы административного деления, земельные участки или кварталы.
Мы с вами воспользуемся кварталами, которые отрисуем самостоятельно.
Подробно о том, как создаются новые слои и отрисовываются объекты есть вот этот раздел.
Создадим новый слой в формате Geopackage с типом геометрии полигон и в той системе координат UTM, которую вы использовали в прошлый раз для перепроецирования вашего слоя со зданиями (скорее всего эта система координат у вас будет отображаться в выпадающем списке недавно использованных систем координат).

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

Вы можете настроить тот стиль кварталов, который вам нравится.
У меня оставлен тот, который был присвоен по умолчанию, потому что здесь стиль роли не играет.
Расчет коэффицента застройки
Что такое коэффициент застройки?
Это отношение площади, занятой зданиями, к общей площади квартала или иной территориальной единицы.
\[ Коэффициент\space застройки = \dfrac{Площадь\space здания}{Площадь \space квартала} \]
Здесь используется площадь здания по наземному контуру, то есть по первому этажу.
Использование пространственного объединения
Наиболее просытм способом расчета здесь будет использование одной из функций Панели инструментов анализа - Объединение атрибутов по расположению (сводка). Эта функция позволяет присваивать одним векторным объектам агрегированное значение атрибута других векторных объектов на основе их расположения относительно друг друга.

Как вы наверняка заметили у нас есть два варианта этой функции: просто Объединение атрибутов по расположению и (сводка).
Первая из них присваивает значение атрибута одних векторных объектов другим на основе их взаимного расположения относительно друг друга. Например, у нас есть слой со зданиями и слой с магазинами, у которых есть атрибут с названием, мы можем с использованием этой функции присвоить зданию название магазина, который в нем расположен.
Сводка позволяет получить не просто значение атрибута, а его статистическую сводку (среднее, медиану, максимальное и минимальное значения и прочее).
В первую очередь необходимо выбрать, какой слой будет использован в качестве исходного, а из какого будут присоединены атрибуты.
В нашем случае мы будем присоединять атрибуты к объектам слоя с кварталами, а в качестве источника присоединяемых атрибутов будем использовать здания.

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

Вам необходимо выбрать поле, в котором была рассчитана площадь вашего здания.

Для возврата обратно в основное окно инструмента нужно нажать на кнопку
.
Если вы не выберете сводку для расчета, то инструмент попытается рассчитать все сводки, которые сможет.
Нам с вами нужна суммарная площадь зданий в каждом квартале.

Что значит параметр Отбросить записи, которые не могут быть объединены? Если вы поставите напротив него галочку, то при объединении объектов у вас в итоговый слой не попадат кварталы, в которых нет ни одного здания, то есть те объекты исходного слоя, для которых не нашлось соответствия в слое присоединяемом.
Обратите внимание, что вам снова предалагают сохранить результат в качестве временного слоя. Вы можете выбрать опцию сохранить в файл.
Перед тем, как выполнять эту операцию, не забудьте сохранить изменения в вашем слое с кварталами, так как, если вы этого не сделаете, у вас будет пустой атрибут fid, что приведет к ошибке в расчетах.
Скорее всего при выполнении расчетов вы увидите предупреждение о том, что у вашего слоя нет пространственного индекса и это может привести к более медленным расчетам.
Это влияет только на скорость выполнения операции.
В итоге вы получите новый слой, который выглядит как ваш исходный слой с кварталами, но в атрибутивной таблице которого содержится поле с суммарной площадью зданий внутри квартала.

Далее вы можете воспользоваться калькулятором полей для того, чтобы рассчитать коэффициент застройки квартала.

"площадь_sum" / area( $geometry) * 100
Использование функций агрегирования
Тот же самый расчет можно осуществить сразу в таблице атрибутов ваших кварталов в два или даже один шаг.
Для этого воспользуемся функцией агрегирования aggregate, которая возвращает агрегированное значение с использованием объектов другого слоя.
Эта функция является очень гибкой и фактически заменяет оба упомянутых выше инструмента Объединение атрибутов по расположению и Объединение атрибутов по расположению (сводка).

aggregate('apartments_UTM_bc6f07c9_7eab_4ca8_87d2_c2e029436076',
aggregate:='sum',expression:="площадь",
filter:=contains(geometry(@parent),@geometry))
Рассмотрим функцию подробнее.
Первым аргументом функции указывается название слоя, который будет использоваться для агрегирования (присоединяемый слой). Проще всего выбрать нужный вам слой двойным кликом в группе Слои карты (аналогично тому, как вы выбираете название поля для расчетов в калькуляторе полей).
Далее идет указание того, какой тип агрегирования должен быть использован. У нас с вами - это sum, то есть сумма.
Следующий аргумент - expression, который указывает, какое поле необходимо агрегировать. Здесь вам нужно будет прописать название поля самостоятельно.
Обратите внимание, что в этой функции название поля указывается в двойных кавычках, а название слоя для агрегирования - в одинарных.
Последний используемый нами аргумент функции -filter предназначен для фильтрации объектов, то есть здесь он будет указывать на пространственные отношения между нашим исходным слоем и присоединяемым. geometry(@parent) в данном случае указывает на геометрию нашего исходного слоя, а @geometry - на геометрию присоединяемого слоя.
Не забудьте в функции заменить название слоя на ваше (первый аргумент в скобках) и название поля на то, которое у вас (в двойных кавычках после аргумента expression.
Возможно для выполнения расчета придется немного подождать, потому что использование агрегирования здесь довольно трудоемко.
В результате вы получите новый атрибут со значением суммарной площади зданий в нем.

Далее аналогично предыдущему разделу вы можете рассчитать коэффициент застройки с использованием калькулятора полей.
Для проверки можете сравнить между собой два результата.

На самом деле здесь вы могли бы выполнить все в один этап, просто подставив в калькулятор полей вместо поля с суммарным значением площади зданий выражение агрегирования.
Попробуйте самостоятельно по аналогии рассчитать коэффициент плотности застройки:
\[ Коэффициент\space плотности\space застройки = \dfrac{Общая\space площадь\space здания}{Площадь \space квартала} \]
Самостоятельно рассчитайте количество зданий в каждом квартале и среднюю этажность.
Сноски
Типы пространственных отношений https://fishy-bottle-aa2.notion.site/1bcf188baff3804c9c26f59995850700↩︎






