
При выборе где снять или купить жилье (когда есть большой выбор в разных районах, кварталах города) мы руководствуемся либо своим представлением о «хорошем районе», либо советом друзей/знакомых. Чтобы выбор основывался чуть больше на конкретных фактах, чем чувствах, родилась идея построить карту с количественными показателями (индексами), которые помогут сформировать решение о покупке/аренде недвижимости. Так же эти показатели можно использовать в качестве помощи при выборе места для открытия, например, точки общественного питания.
Идея
Области с многоэтажной застройкой разбиты на гексагоны на основе Uber H3 Геоиндекса. Плотность застройки рассчитывается на основе площади и этажности зданий в соответствующем гексагоне. Доступность объектов рассчитывается на основе расстояния до центра гексагона. Индекс строится как сравнительная характеристика для города (области карты), а не количество объектов.
Общий индекс рассчитывается как сумма отдельных индексов с весами и последующей нормализацией. Веса можно выбрать от -5 до 5. При указании 0 - индекс не будет использоваться в расчетах. Индексы нормализованы по городу или выбранной области (нормализован только общий индекс, индивидуальные индексы остаются нормализ��ванными по городу). Перед нормализацией выполнятся замена экстремальных значений (max, min) на граничные используя подход IQR для нахождения всплесков индекса.
Расчеты основываются на данных из OpenStreetMap (OSM). Вся информация о застройке, транспорте, школах, барах и прочих взята из тэгов различных объектов OSM. Да, информация не всегда точна и есть задержка в актуальности, но ее можно править самостоятельно (при нахождении неточности) и через месяц (связано с периодичностью выгрузки pbf - ориентировочно 20 числа месяца) она попадет на эту карту и нет необходимости в лицензиях-оплате данных из геоинформационных/градостроительных баз.
На данным момент карта содержит данные для крупных городов Республики Беларусь (просто потому что я оттуда), Москвы и Санкт-Петербурга. Также добавлены города: Новосибирск, Екатеринбург, Казань, Нижний Новгород, Красноярск, Челябинск, Самара, Уфа, Ростов-на-Дону, Краснодар, Омск, Воронеж, Пермь, Волгоград, Саратов, Тюмень, Вильнюс, Рига, Таллин, Тбилиси, Батуми, Ереван, Баку, Астана, Белград, Варшава, Гданьск, Вроцлав, Краков, Стамбул.
Развития функционала в статье.
Реализация
Доступные на данный момент индексы:
Плотность застройки - Чем ниже значение индекса тем плотнее застройка с учётом этажности.
Доступность детских садов - Чем выше значение индекса тем больше детских садов в радиусе доступности (до 1 км). Чем ближе объект, тем больше его ��клад в значение индекса.
Доступность школ - Чем выше значение индекса тем больше школ в радиусе доступности (до 1 км). Чем ближе объект, тем больше его вклад в значение индекса.
Доступность транспорта - Чем выше значение индекса тем больше маршрутов общественного транспорта в радиусе доступности (до 1 км). Чем ближе остановка, тем больше его вклад в значение индекса.
Доступность парковок - Чем выше значение индекса тем больше общественных (без контролируемого доступа) парковок для автотранспорта в радиусе доступности (до 1 км). Чем ближе парковка, тем больше его вклад в значение индекса.
Доступность баров-ресторанов - Чем выше значение индекса тем больше кафе,баров,ресторанов и прочих точек питания в радиусе доступности (до 1 км). Чем ближе объект питания, тем больше его вклад в значение индекса.
Доступность медицины - Чем выше значение индекса тем больше поликлиник, клиник и больниц в радиусе доступности (до 2 км для клиник и 5 км для больниц). Чем ближе объект и если это больница, то тем больше его вклад в значение индекса.
Доступность спорта - Чем выше значение индекса тем больше спортивных центров и площадок в радиусе доступности (до 1 км). Чем ближе объект, тем больше его вклад в значение индекса.
Доступность парков - Чем выше значение индекса тем больше парков в радиусе доступности (до 2 км). Чем ближе парк и больше его площадь, тем больше его вклад в значение индекса.
Доступность объектов образования - Чем выше значение индекса тем больше университетов и колледжей в радиусе доступности (до 2 км). Чем ближе объект. и больше его площадь, тем больше его вклад в значение индекса.
Описание всех функций можно найти в Описании к сайту.

Слой с данными реализован как векторное множество тайлов. Подложка карты это растровые тайлы OSM. Тайлы строятся на лету на основе данных в базе и переданных параметров (город, область, параметры). Общий индекс не хранится, а рассчитывается в момент обращения за тайлом.
Планы
Если кто-то будет следить за картой, то планируются следующие доработки (скорее всего в таком порядке как и указаны):
Подготовить и открыть исходный код.
Техническая составляющая
Доступ к карте бесплатный для всех (пока будет разумная нагрузка - не миллионы пользователей :)). Никакой монетизации не предвидится поэтому простите, если где-то забыта лицензия или упоминание кого-либо. Ссылку на исходный код пока не даю - там всё не очень красиво (пока делалось чтобы работало).
Источники данных, инструменты и библиотеки:
Данные OSM загружаются с https://download.geofabrik.de/. Подложка карты - тайлы
https://tile.openstreetmap.org/{z}/{x}/{y}.png.Обработка данных, построение индексов и подготовка тайлов PostgreSQL с установленными PostGIS и h3-pg.
Cервер тайлов - Martin.
Карты и элементы управления для нее - MabLibre GL JS.
Сервер HTTP - nginx.
Развернуто пока все на Yandex Cloud.
