VRN.Age: Карта возраста домов Воронежа
Проект был запущен в январе 2021 года. На создание меня вдохновила онлайн карта с возрастом построек Питера от Никиты Славина. Так как говорят, что Воронеж это маленький Питер, то и у него должна быть своя маленькая карта.
- Сбор данных о годах постройки,
- Сбор картографических данных,
- Соединение первых данных со вторыми и вывод в браузер;
Сбор данных о годах
Это первое и самое важное, что требовалось. От выполнения этого пункта зависела дальнейшая судьба всего проекта. Если бы данных оказалось недостаточно, то и продолжать не стоило бы.
Данные о годах постройки зданий есть в кадастров реестре. Более того, существует публичная кадастровая онлайн карта. Поэтому зная адрес постройки, можно узнать её кадастровые данные, в том числе год постройки и год ввода здания в эксплуатацию.
Все адреса в любых государственных реестрах унифицированы и их можно скачать из базы ФИАС. База организованна неудобно, нет отдельных региональных баз, но хорошо, что эти данные вообще есть в публичном доступе. Архив всех адресов на момент работы над проектом весил ~8гб.
Скачали. Спарсили. Выгрузили в PostgreSQL. Получили ~70к адресов.
Затем на каждый адрес нужно было сделать запрос к кадастровой карте. Этот процесс занял несколько дней. В итоге удалось собрать ~27к годов.
P.S. Потом выяснилось, что в парсере был баг и часть информации не собиралась. Повторив процедуру спустя пол года, получилось добавить в базу еще несколько тысяч годов.
Еще один источник, который использовался при сборе данных это Единый Государственный Реестр Объектов Культурного Наследия.
В дальнейшем некоторые данные были взяты с сайта реформы ЖКХ. Так же пользователи сами присылали информацию о годах построек некоторых домов. Сейчас в базе хранятся даты построек ~35 000 домов.
Сбор картографических данных
Самые полные картографические данные о Воронеже есть только у Яндекса и 2GIS, но получить легальный доступ к ним не реально. Зато есть проект OpenStreeMap (OSM), где силами сообщества создается подробная бесплатная карта всего мира.
В OSM не все здания отрисованы в актуальной форме, у некоторых построек нет адресов, а многих попросту нет на карте. Но этого оказалось достаточно.
Выгрузили данные через Overpass API. Загрузили в PostgreSQL используя osm2pgsql. Этап закончен.
Соединение данных и рендеринг
Данные о годах и картографические данные соединяются через адрес. Большинство адресов из ФИАС совпали с названиями в OSM, некоторые улицы и адреса пришлось корректировать вручную.
Изначально я планировал сгенерировать тайлы для карты и хранить их у себя на сервере. Но после нескольких дней экспериментов с mapnik, который почему-то искривлял карту, я сдался и решил использовать сервис CartoDB, который сильно упростил работу.
На фронтенде данные из CartoDB были подключены к Leaflet. А для обработки запросов на бэкенде я использовал Laravel, но со временем перевел на NestJs.
В итоге проект многим понравился и привлек внимание в Instagram. В первые несколько дней сайт посетили 11 000 человек.
Проект упоминался в СМИ: РИА, Вести, Факто.ру, Горком36.