Данные & расчеты

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

Для нас принципиально важно, чтобы каждый желающий мог:

— Изучить слой на карте.

— Зайти в раздел "Данные & расчеты", чтобы узнать, на основе каких данных и каким образом мы этот слой генерируем.

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

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

Данные

Географические данные: в основе карты ХоумХаб лежат данные OpenStreetMap — крупнейшего в мире проекта, который создает и открывает для свободного доступа географические данные.

Данные о рельефе: для отображения карты высот используются данные ASTER — международного исследовательского проекта по созданию цифровой модели высот Земли.

Расчеты

Инфраструктура

Слой "шаговая доступность" - это тепловая карта города, по которой можно оценить доступность инфраструктуры в том или ином районе или доме. Красным цветом отмечены зоны с отсутствующей или зачаточной инфраструктурой, а зеленым - с отлично развитой. За основные инфраструктурные объекты мы взяли:

— Супермаркеты

— Аптеки

— Поликлиники

— Школы

— Детские сады

Это - основные категории объектов, по наличию которых можно в целом судить о развитости инфраструктуры.

Расчет слоя "шаговая доступность" состоит из 2х этапов:

1) Оценка доступности инфраструктуры для каждого отдельно взятого дома.

2) Подсчет среднего значения для некоторой площади. Это нужно, чтобы замостить карту цветными шестиугольниками (гексагонами) на средних и обзорных уровнях зума.

Слой инфраструктура на карте Плитка из гексагонов, цвет которых характеризует доступность инфраструктуры. Красный - инфраструктура недостаточно развита; зеленый - большое разнообразие инфраструктурных объектов в шаговой доступности.

На первом этапе мы рассматриваем зону в радиусе 1.5 км вокруг дома и находим в ней все инфраструктурные объекты. От интересующего здания до каждого из объектов прокладываем маршрут при помощи навигационного движка и узнаем ETA (estimated time of arrival) - время в пути, которое потребуется среднестатистическомму пешеходу, чтобы прийти к заданному объекту. При расчете времени учитываются различные нюансы, например светофоры и лестницы в пешеходных переходах.

Отсеиваем все объекты, до которых добираться дольше, чем за 15 минут. Будем честны, вряд ли кого-то заинтересует магазин, до которого 25 минут пешком в одну сторону.

ETA в минутах со шкалы [0, 15] мы отображаем на шкалу [1, 0]. Причем чем быстрее добираться от дома до объекта, тем ближе значение к 1 (а не к 0 как в оригинальной шкале). Так мы выводим значение доступности объекта, если добираться до него от заданного дома. Значение 1 означает, что объект находится очень близко к дому (скорее всего, в самом доме). Значение 0 означает, что до объекта придется идти средним шагом минут 15.

Кроме того, некоторые инфраструктурные объекты важнее, чем другие. Помимо субъективной важности (для кого-то критично наличие школы под окнами, для кого-то - взрослой поликлиники) есть и объективная составляющая. Например, ассортимент в сетевом супермаркете богаче, чем в местной лавке. Соотношение цена-качество тоже более предсказуемое. Поэтому мы выводим значение значимости объекта по шкале [0, 1].

Просуммировав доступность и значимость объекта, домноженные на соответствующие коэффициенты, мы получаем результирующий вес объекта. Для финальной оценки шаговой доступности объектов возле дома их веса суммируются. Так мы получаем общий вес объектов рядом с домом. Его мы домножаем на коэффициент диверсификации. Он равен количеству категорий объектов (школы, аптеки и т.д.) в шаговой доступности от дома, деленному на общее количество рассматриваемых нами категорий. А их всего пять: супермаркеты, аптеки, поликлиники, школы, детские сады. Соответственно если вокруг дома обнаружены только поликлиники и детские сады, коэффициент диверсификации будет равен 2/5. А если вокруг дома присутствуют объекты всех категорий, то коэффициент равен 1.

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

Застройка

Говорить о застройке города можно отталкиваясь от двух параметров:

Процент застройки — процентное соотношение площади зданий к общей площади участка, на котором они стоят.

Процент плотности застройки — процентное соотношение суммарной поэтажной площади зданий на участке к его площади.

В разных странах и городах исторически закрепились свои нюансы расчетов. Например, в Нью-Йорке площадь здания отмеряется от внутренних стен, а площадь участка берется строго по его границам. В Лондоне площадь здания меряется от наружных стен, а площадь участка захватывает половины улиц, окружающих участок. Во многих странах принято измерять плотность застройки в расчете на гектар земли (1 га = 10 000 м²), а в наших мегаполисах прижилось измерение в расчете на квартал. Площади кварталов могут отличаться в разы, и это привносит неразбериху.

С точки зрения оценки качества жизни ни один из перечисленных способов расчетов нас не устраивает. Они ориентированы на градостроителей и архитекторов, а не на людей, населяющих дома. Эти способы слишком огрубленные: если участок представляет собой пустырь с супер-плотной застройкой по центру, озвученные методы выведут среднее по больнице, и это, согласитесь, не интересно. Также они не учитывают множества граничных случаев. Допустим, один из участков зажат между несколькими соседними, а другой — стоит у парка. Эти способы не выявят разницу между их плотностью. Хотя понятно, что дом возле парка «застроен» менее плотно, чем дом, зажатый в кольцо соседей.

Мы предлагаем способ расчетов, заточенный не для задач застройщиков, а для адекватного выбора жилья. Он хорош тем, что основывается на вычислении застройки для каждого дома в отдельности. Для этого нужно определить геометрию участка вокруг дома; найти его площадь с учетом некоторых нюансов; найти площади стоящих на участке домов. Поехали!

Будем расчитывать процент плотности застройки и процент застройки вот для этого дома:

Слой рельеф на карте Москва, Ломоносовский проспект, 14.

Геометрию, этажность и другие атрибуты домов мы импортируем из OSM в табличку PostgreSQL, для которой включено расширение PostGIS. В нем есть масса удобных функций для работы с географическими и геометрическими объектами.

Итак, извлекаем геометрию интересующего дома из таблицы. Отступаем от нее 200 м во все стороны. Получившийся многоугольник и есть интересующий нас участок земли. Именно для такой небольшой площади мы будем считать процент плотности застройки и процент застройки.

Слой рельеф на карте Вид сверху. Контуры дома — фиолетовые. Контуры участка, для которого мы будем расчитывать застройку — синие. 17 строений, попавших на участок — оранжевые.

Почему контуры участка на скриншоте получились такой странной формы? Они расчитаны с помощью функции PostGIS ST_Buffer(geometry, radius_of_buffer), формирующей полилинию точек, отстоящих от заданной геометрии на расстояние radius_of_buffer. Параметр radius_of_buffer равен 200 м, а сглаживание углов включено по умолчанию. Для наглядности вот примеры результатов ST_Buffer() на этом и других зданиях, но с radius_of_buffer всего в 10 м:

Слой рельеф на карте Контуры домов — фиолетовые. Контуры участка, полученные с помощью ST_Buffer() — синие.

Сформировав таким образом участок вокруг дома, находим и суммируем площади всех зданий на участке. Если здание попало на участок частично, мы учитываем только площадь пересечения. Таким образом мы получаем общую площадь зданий на участке.

Теперь находим все попадающие на участок водоемы. Вычитаем их площадь пересечения с участком из общей площади участка. Мотивация простая: требуется определить площадь участка вокруг дома, по которой можно спокойно перемещаться. Грубо говоря, у дома на скале, вокруг которого океан, застройка примерно 100%.

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

Для некоторых дорог в OSM указан тег lanes, обозначающий количество полос. Для обозначения значимости дороги используется тег highway. По тому, является ли дорога автомагистралью федерального значения, городской трассой или внутриквартальным проездом, можно предположить ее полосность. Ширину полосы определяет ГОСТ: она зависит от типа трассы и максимально допустимой скорости (OSM-тег maxspeed). Например, для highway=motorway ширина полосы может быть 3.75 м, а для дороги во дворе — 2.75 м.

Слой рельеф на карте Дороги внутри участка отмечены темно-серым, трамвайные пути — светло-серым.

На данном этапе у нас уже посчитана общая площадь участка, которая годится для расчета параметров застройки. Для определения процента застройки берем процентное соотношение площади домов к площади участка. Оно может варьироваться от 0 до 100%. Имея 100-балльную шкалу, подбираем для нее цвета от насыщенно-зеленого для пустынных участков до темно-красного для максимально застроенных.

Процент застройки дома — 17%:

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

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

Процент плотности застройки дома — 136%:

Слой рельеф на карте В OSM указано, что у интересующего дома 10 этажей. Со всех сторон он окружен другими зданиями и дорогами, поэтому в отличие от соседнего дома возле сквера он подсвечен более светлым оттенком зеленого на слое «процент плотности застройки».

Процент плотности застройки на практике варьируется от нуля до тысяч процентов (и лишь физики ведают, до какого предела в теории). Здания с небольшим значением процента плотности отображаются на карте зеленым. Дома, для которых в OSM не отмечена этажность, отображаются фиолетовым. Но какое значение принять за максимальное для соотнесения ему темно-красного? Роль референса для «дна» досталась, кто бы сомневался, деловому району Москва-Сити с процентом плотности застройки, перевалившим за тысячу.

Слой рельеф на карте Приз в номинации «Максимальный процент плотности застройки в Москве» заслуженно получает Москва-Сити. Но почивать на лаврах — не в правилах этого делового района: он активно пополняется новыми высотками.

С рекордсменом по проценту плотности застройки все понятно. А где самый высокий процент застройки? Конечно же, в центре города. Во многих дворах внутри Садового кольца он достигает 85%. Но для исторического центра это нормально: многие европейские города могут похвастать 95% застройки.

Слой рельеф на карте Приз в номинации «Максимальный процент застройки в Москве» вручается дворам возле Тверской улицы.

А вот как выглядит на карте уплотнительная застройка дворов возле метро Домодедовская:

Слой рельеф на карте Слева блочки с адекватной плотностью застройки, справа — новый ЖК «бизнес-класса», застроенный окна-в-окна. Ибо сказано: за слово «бизнес» в названии и входную группу с искуственным мрамором не стыдно доплатить по тарифу x2.

Процент застройки и процент плотности застройки отображаются для каждого дома в отдельности начиная с 13 уровня зума. На мелких масштабах уже требуется генерализация: обобщение значения таким образом, чтобы его было удобно анализировать для больших площадей на обзорных зумах.

Первая попытка генерализации провалилась. План был таков: при отдалении от 13 зума (ниже которого отдельные дома уже не видны) процент застройки обобщается для административных районов, и они подсвечиваются соответствующим цветом. Если продолжать отдалять карту, процент застройки обобщается для городских округов.

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

Поэтому мы реализовали более наглядный способ генерализации:

Замостить карту гексагонами с длиной ребра 100 метров для 12 уровня зума, 200 м — для 11 зума и так далее вплоть до 6 зума. Для этого была использована функция PostGIS ST_HexagonGrid(hex_edge_len, bounds). Найти дома, попадающие внутрь гексагона. Рассчитать среднее взвешенное процента застройки и процента плотности застройки по полученным значениям. Залить гексагоны соответствующими цветами. В результате генерализация будет выглядеть примерно так:

Слой рельеф на карте Гексагональная генерализация процента застройки: средние уровни зума, на которых виден центр города.

Резюмируем: фактор «застройка» для оценки качества городской среды лучше всего анализировать в разрезе двух параметров: процента плотности застройки и процента застройки. Именно их комбинация позволит увидеть картину целиком.

Экология

Этот раздел пока находится в процессе подготовки.

Рельеф

На слое "Карта высот" мы визуализируем рельеф местности, который генерируем из цифровой модели рельефа ASTER. Датасет ASTER состоит из набора растровых тайлов 1° x 1° с точностью 1 измерение высоты на 30 метров земной поверхности.

Слой рельеф на карте Комбинирование светотеневой отмывки и цветовой карты рельефа местности.

Подготовка растровых тайлов с рельефом местности заключается в комбинировании светотеневой отмывки (hillshade) и цветовой карты рельефа. Исходные тайлы ASTER мы пропускаем через последовательность GDAL-утилит для генерации прозрачных тайлов со светотеневой отмывкой, тайлов с цветовым рельефом и совмещения этих двух наборов в комбинированные тайлы рельефа местности.