Человейник, тебе меня не сломить! Анализ жилья в мегаполисе
Что противопоставить диктату неконтроллируемой застройки? Нужен открытый и удобный инструмент для анализа качества городской среды, отдельно взятых районов и домов. Под прицелом — не только плотность застройки, но и экология, уровень шума, доступность инфраструктуры и другие факторы, формирующие качество жизни в мегаполисе.
Человейники Гонконга. Интересно, можно ли будет сделать такую фотку в Москве лет через 30?
О проекте
ХоумХаб — это молодой проект, развивающийся на энтузиазме и неравнодушии к будущему наших городов. Мегаполисы России повторяют путь агломераций Китая, сросшихся в один большой человейник с убитой экологией. Однако китайское правительство спохватилось, признало проблему и пытается выровнять ситуацию. В то время как Москва с маниакальным упорством обрастает микрорайонами со сверх-плотной застройкой сомнительного качества и отстутствием намеков на озеленение:
Типичный человейник заглядывает в окна кирпичного дома. Автор фотографии — Михаил Мельников.
Ультимативное лоббирование интересов застройщиков приводит к необычному эффекту. С одной стороны, качество жилья и состояние городской среды беспощадно проседают. С другой стороны это мало кого заботит вплоть до роковой ошибки с покупкой жилья, исправлять которую слишком дорого и не для всех осуществимо. Определенно, коррумпированность градостроительной политики — не самая горячая тема для обсуждения.
Цель проекта ХоумХаб - визуализация качества городской среды, подкрепленная объективными цифрами и понятными расчетами. Нам уже есть, что показать: на карте представлены данные по плотности застройки и экологической ситуации, аналогов которым в открытом доступе найти не удалось.
Мы в самом начале пути, наши модели не лишены упрощений и возможных ошибок, а многие фичи только предстоит реализовать. Пока мы охватили только Москву и ближайшую область. Зато работая с единственным городом, мы получаем кратчайший цикл пересборки карты, а на ранних этапах жизни проекта быстрая проверка гипотез нужна как воздух. Так выглядит карта ХоумХаба сейчас:
Переключая различные слои, можно отслеживать на них интересующие параметры районов, микрорайонов и домов: процент плотности застройки и процент застройки, качество воздуха и месторасположение источников загрязнения.
Из чего складывается качество жизни в мегаполисе
Насколько мегаполис комфортен для жизни и безопасен для здоровья, зависит от набора факторов городской среды. К большинству из этих факторов мы только примериваемся. Среди них:
- Уровень шума.
- Социальная инфраструктура.
- Транспортная инфраструктура.
Зато у нас уже готов расклад по двум ключевым факторам:
- Экология. Качество воздуха — на наш взгляд важнейший аспект экологии, влияющий на жизнь в городе. Поэтому в разделе «Экология» сейчас представлены два слоя: качество воздуха и источники загрязнения, среди которых ТЭЦ, заводы и водоочистные сооружения.
- Застройка. В этом разделе доступны два взаимодополняющих слоя: процент плотности застройки и процент застройки.
Так как пост посвящен человейникам, мы сфокусируем рассказ именно на застройке: чем чревата высокая плотность застройки, как мы ее измеряем и зачем нам вместо общепринятых своя модель для расчетов.
Плотность застройки
Плотность застройки характеризует интенсивность использования территории. Слишком плотная застройка таит ряд опасностей:
Огромная нагрузка на социальную и транспортную инфраструктуру. Несоразмерная концентрация жителей на клочке земли приводит к хайлоаду для близлежащих магазинов, парковок и дорог. А это очереди к лифтам, очереди за продуктами и пробки при подъезде к дому.
Хватит ли пропускной способности этой дороги, когда достроятся все 45 корпусов? Кстати, как на единственной полосе разъезжаться?
Нехватка солнечного света. Существует специальный ГОСТ о продолжительности инсоляции (естественного освещения) жилых помещений. Застройка «окна-в-окна» его игнорирует чуть более чем полностью:
Солнечные лучи попадают в этот двор и окна максимум на 40 минут в день. Фотография взята из прекрасного поста про питерский колодец-могильник.
Разрушение природной экосистемы. Сравните просторные зеленые дворы между кирпичными домами советской постройки и заставленные машинами бетонные каньоны новостроек. Березы или яблоневый садик под окнами? Забудьте.
Риски при возникновении ЧП. В случае пожара построенные впритык здания не дают проехать спасательной технике, а высокая этажность блокирует работу пожарных команд. Вишенка на многоэтажном торте: многие человейники в силу своей дешевизны попросту не оборудованы средствами пожаротушения.
Огромная плотность населения — безупречные условия для распространения пандемии. COVID-19 непрозрачно намекнул, что ряды высоченных человейников с одним супермаркетом на весь микрорайон — так себе идея.
А почему почти все человейники так пестро разукрашены? Вырвиглазные прямоугольники и полосы на стенах, корпуса контрастных цветов. Нет, не «эстетики» ради. Дело в том, что яркие вставки ломают визуальную целостность человейника. Как камуфляж. Грядки монолитных гигантских коробок давят на психику и угнетают гораздо мощнее, если они однотонные. Представьте, какое впечатление производили бы эти кварталы, будь они одноцветными:
Коробки в боевой раскраске. Обе фотографии взяты из блога фотографа, столкнувшегося с человейниками.
Некачественные человейники сегодня — это гетто и трущебы завтра. Те, кто может себе позволить вырваться из набитых под завязку многоэтажек — переезжают. Остаются асоциальные и наименее обеспеченные слои общества. Обстановка криминализируется, становится еще более отталкивающей для тех, кто имеет возможность выбора. Круг замыкается.
Справедливости ради стоит упомянуть и недостаток слишком разреженной застройки: подскакивают расходы на поддержание транспортной инфраструктуры и инженерных коммуникаций. Но как вы догадываетесь, Нерезиновой это не грозит.
Расчет плотности застройки
Плотность застройки города принято оценивать по двум параметрам:
Процент застройки — процентное соотношение площади зданий к общей площади участка, на котором они стоят.
Процент плотности застройки — процентное соотношение суммарной поэтажной площади зданий на участке к его площади.
В разных странах и городах исторически закрепились свои нюансы расчетов. Например, в Нью-Йорке площадь здания отмеряется от внутренних стен, а площадь участка берется строго по его границам. В Лондоне площадь здания меряется от наружных стен, а площадь участка захватывает половины улиц, окружающих участок. Во многих странах принято измерять плотность застройки в расчете на гектар земли (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 зума (ниже которого отдельные дома уже не видны) процент застройки обобщается для административных районов, и они подсвечиваются соответствующим цветом. Если продолжать отдалять карту, процент застройки обобщается для городских округов.
Результат нас разочаровал: даже внутри небольшого района, захватывающего несколько улиц, возможны сильные флуктуации застройки. Не спасут ни медиана, ни среднее взвешенное: любое усреднение по районам обречено на сглаживание. Пресловутый Москва-Сити окружен жилыми домами со скромным процентом плотности застройки, и обобщенный процент для Пресненского района не выявит в этом районе абсолютно никакой аномалии.
Поэтому мы реализовали более наглядный способ генерализации:
1) Замостить карту гексагонами с длиной ребра 100 метров для 12 уровня зума, 200 м — для 11 зума и так далее вплоть до 6 зума. Для этого была использована функция PostGIS ST_HexagonGrid (hex_edge_len, bounds).
2) Найти дома, попадающие внутрь гексагона. Рассчитать среднее взвешенное процента застройки и процента плотности застройки по полученным значениям.
3) Залить гексагоны соответствующими цветами. В результате генерализация будет выглядеть примерно так:
Гексагональная генерализация процента застройки: средние уровни зума, на которых виден центр города.
Резюмируем: фактор «застройка» для оценки качества городской среды лучше всего анализировать в разрезе двух параметров: процента плотности застройки и процента застройки. Именно их комбинация позволит увидеть картину целиком.
Обратная сторона ХоумХаба
Настало время поговорить про технологии, которые стоят за нашей картой.
Наши источники данных
Наш основной источник данных — это разумеется OSM. Не было бы OSM — не было бы и нашего проекта, а это еще раз подтвержает незаменимость опенсорса.
При подготовке слоев с застройкой мы столкнулись с проблемой: многие рорайоны Москвы появились недавно, оторваны от основной транспортной сети, и добираются туда в основном только местные жители. Как правило, по единственной замершей в вечной пробке дороге. Следовательно, такие места замаплены в OSM из рук вон плохо или вовсе отсутствуют на карте. Мы стараемся это исправить, но наши усилия — капля в море всех человейников.
Для карты рельефа мы используем DEM (digital elevation model) SRTM v3. Это данные, полученные радарной топографической съемкой материковых и островных территорий с 54° южной широты по 60° северной широты.
SRTM считается одним из самых качественных открытых датасетов, и его точности (1 измерние высоты примерно на 50 метров поверхности) должно хватить для адекватного использования в моделях экологии и распространения шума.
Пайплайн генерации тайлов
Наша цепочка python-скриптов для скачивания данных, импорта в PostgreSQL, подсчета данных для слоев и нарезки их на тайлы разбита на несколько docker-образов и запускается через docker-compose. Весь процесс выглядит так:
Подготовка растровых тайлов с рельефом местности. Датасет SRTM состоит из набора растровых тайлов 1° x 1°, которые мы пропускаем через последовательность GDAL-утилит для генерации прозрачных тайлов с хилшейдингом, тайлов с цветовым рельефом и совмещения этих двух наборов в комбинированные тайлы рельефа местности.
Подготовка векторных тайлов с данными из OSM, слоями застройки и экологии. С ресурса Geofabrik скачивается фрагмент OSM, а конкретно — Центральный федеральный округ России. Из него с помощью osmium-extract извлекается окружность, включающая Москву и некоторую часть МО.
Для заливки данных в PostgreSQL запускается импортер Imposm3. Он хорош тем, что позволяет удобно сконфигурировать параметры генерализации для лесов, озер, дорог и произвольных объектов.
Далее в PostgreSQL создаются дополнительные столбцы, таблицы, и стартует скрипт подготовки данных для слоев с экологией и застройкой. Он-то и реализует логику расчета процента плотности застройки, процента застройки, качества воздуха и заполнения таблицы с источниками загрязнения.
Финальный аккорд — запуск генерации векторных тайлов. Для этого используется самописный скрипт с конфигом, конкретизирующим, какие зумы и с какими данными генерировать. В PostGIS есть все необходимые для этого функции, такие как ST_MakeEnvelope (), ST_Intersects (), ST_AsMVT (), ST_AsMvtGeom ().
Вот карта и готова. Для отрисовки в браузере используется опенсорсная библиотека Mapbox GL JS. Стиль карты был запилен по-простому, безо всяких WYSIWYG-примочек, в виде гигантского json в формате Mapbox.
О планах и о команде
Работа над проектом ХоумХаб началась пол года назад. Из моих туманных набросков и острого желания делать карту Irkest сформировал нынешнюю концепцию проекта. Также он накладывает вето на малейшую попытку прикрутить что-то красивое, но дурацкое.
Архитектор проекта, фулстек-разработчик, девопсер, дизайнер, веб-мастер и копирайтер-на-пол-ставки — это все я. В душе я бэкендер, поэтому вместо мобильной версии сайта на js у меня получилась консольная тулза на C++. Пришлось переделывать. Вышел микросервис. Разработка забуксовала. К счастью, в проект ворвался Rostixman: он за одно воскресенье запилил вменяемую мобильную версию и пофиксил косяки интерфейса, за что ему отдельное спасибо.
ХоумХаб развивается, задач становится все больше и они все заковыристее. Поэтому наша команда упоротых исследователей мегаполиса ищет новых разработчиков, особенно фронтендеров! Будем рады разработчикам, которым близка идея проекта и которые готовы посвящать ему свое время.
Мы планируем добавить на карту новые важные факторы, влияющие на качество городской среды:
Уровень шума. По нашим наблюдениям это самый недооцененный параметр, выстреливающий в ногу при выборе жилья! У нас накопилось полно историй людей, не сталкивавшихся с проблемой шума ранее и поэтому не задумывавшихся о ней при покупке недвижимости. Они тратили свои средства на квартиру, в которой впоследствии не могли по-человечески спать и отдыхать. Мы готовимся построить модель распространения акустических волн с учетом разнообразных источников, препятствий и свойств местности.
Социальная инфраструктура: наличие в пешей доступности магазинов, школ, аптек и всякой всячины вплоть до бассейнов. К сожалению, для многих новых районов даже наличие поликлиники — недоступная роскошь.
Транспортная инфраструктура. Боль многих городов-сателлитов — в вечной пробке на единственной дороге между сателлитом и мегаполисом. А у многих микрорайонов проблемы с доступностью на общественном транспорте. Поэтому мы планируем сделать два слоя: для автомобилистов и для приверженцев общественного транспорта.
После того как большинство факторов качества городской среды будет реализовано, мы предоставим удобный интерфейс для выбора интересующих факторов и опциональной установки их важности. Можно будет подбирать подходящие под конкретные требования микрорайоны и дома. Кому-то очень важна экология, а транспортная доступность второстепенна. Кто-то в первую очередь обращает внимание на уровень социальной инфраструктуры и плотность застойки. В общем, можно будет находить жилье на любой вкус.
Кроме того, мы собираемся охватить как можно больше городов, в идеале — всю Россию. Было бы интересно посравнивать наши мегаполисы с Гонконгом, Нью-Йорком и прочими знаменитыми рассадниками человейников. А исторический центр сравить например с центром Праги или Рима.
А что за карта без гео-поиска? Мы сделаем и его. Но конечно же приоритет №1 — улучшать, валидировать и снова улучшать наши модели.
Заключение
ХоумХаб — это карта со слоями, которые помогают находить ответы на наболевшие вопросы. Какая плотность застройки в новом микрорайоне? Обнаружены ли в нем зачатки инфраструктуры и можно ли из него выбраться своим ходом? Сколько заводов и промзон в Капотне? Стоит ли ценителю тишины покупать квартиру с окнами на Ленинградское шоссе? Как долго идти от ЖК «Грин Парк» до ближайшего парка?
А на какие вопросы ищете ответа вы? Делитесь мнением, реквестуйте фичи. Критикуйте, это же Хабр в конце концов! А мы в предстоящих релизах будем приоткрывать новые грани жизни в мегаполисе.
Под занавес: это не Гонконг, это Марфино. А вы бы хотели, чтобы наши мегаполисы превратились в сплошной человейник?