Индекс твоего города

от автора

При выборе где снять или купить жилье (когда есть большой выбор в разных районах, кварталах города) мы руководствуемся либо своим представлением о «хорошем районе», либо советом друзей/знакомых. Чтобы выбор основывался чуть больше на конкретных фактах, чем чувствах, родилась идея построить карту с количественными показателями (индексами), которые помогут сформировать решение о покупке/аренде недвижимости. Так же эти показатели можно использовать в качестве помощи при выборе места для открытия, например, точки общественного питания.

Идея

Области с многоэтажной застройкой разбиты на гексагоны на основе Uber H3 Геоиндекса. Плотность застройки рассчитывается на основе площади и этажности зданий в соответствующем гексагоне. Доступность объектов рассчитывается на основе расстояния до центра гексагона. Индекс строится как сравнительная характеристика для города (области карты), а не количество объектов.

Общий индекс рассчитывается как сумма отдельных индексов с весами и последующей нормализацией. Веса можно выбрать от -5 до 5. При указании 0 — индекс не будет использоваться в расчетах. Индексы нормализованы по городу или выбранной области (нормализован только общий индекс, индивидуальные индексы остаются нормализованными по городу). Перед нормализацией выполнятся замена экстремальных значений (max, min) на граничные используя подход IQR для нахождения всплесков индекса.

Расчеты основываются на данных из OpenStreetMap (OSM). Вся информация о застройке, транспорте, школах, барах и прочих взята из тэгов различных объектов OSM. Да, информация не всегда точна и есть задержка в актуальности, но ее можно править самостоятельно (при нахождении неточности) и через месяц (связано с периодичностью выгрузки pbf — ориентировочно 20 числа месяца) она попадет на эту карту и нет необходимости в лицензиях-оплате данных из геоинформационных/градостроительных баз.

На данным момент карта содержит данные для крупных городов Республики Беларусь (просто потому что я оттуда), Москвы и Санкт-Петербурга. Также добавлены города: Новосибирск, Екатеринбург, Казань, Нижний Новгород, Красноярск, Челябинск, Самара, Уфа, Ростов-на-Дону, Краснодар, Омск, Воронеж, Пермь, Волгоград, Саратов, Тюмень.

Реализация

Доступные на данный момент индексы:

  • Плотность застройки — Чем ниже значение индекса тем плотнее застройка с учётом этажности.

  • Доступность детских садов — Чем выше значение индекса тем больше детских садов в радиусе доступности (до 1 км). Чем ближе объект, тем больше его вклад в значение индекса.

  • Доступность школ — Чем выше значение индекса тем больше школ в радиусе доступности (до 1 км). Чем ближе объект, тем больше его вклад в значение индекса.

  • Доступность транспорта — Чем выше значение индекса тем больше маршрутов общественного транспорта в радиусе доступности (до 1 км). Чем ближе остановка, тем больше его вклад в значение индекса.

  • Доступность парковок — Чем выше значение индекса тем больше общественных (без контролируемого доступа) парковок для автотранспорта в радиусе доступности (до 1 км). Чем ближе парковка, тем больше его вклад в значение индекса.

  • Доступность баров-ресторанов — Чем выше значение индекса тем больше кафе,баров,ресторанов и прочих точек питания в радиусе доступности (до 1 км). Чем ближе объект питания, тем больше его вклад в значение индекса.

Описание всех функций можно найти в Описании к сайту.

Карта со всеми элементами управления

Карта со всеми элементами управления

Слой с данными реализован как векторное множество тайлов. Подложка карты это растровые тайлы 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.


ссылка на оригинал статьи https://habr.com/ru/articles/837310/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *