Расскажу вам о проекте “Карта ДТП” – интерактивной карте аварий в России. Карта упрощает анализ ДТП и помогает найти реальные причины происшествий. Как пришла идея, где брали данные и зачем открыли исходный код.
За 2018 год в ДТП на дорогах России погибли 19088 человек
Цифра с каждым годом уменьшается, но все равно остается гораздо большей, чем в развитых странах, где проблеме смертности на дорогах уделяется гораздо больше внимания. Отличным примером является шведская программа по повышению безопасности дорожного движения Vision Zero.
Базовым принципом программы является недопустимость дорожно-транспортных происшествий со смертельным исходом. Данный принцип ещё называют принципом «нулевой терпимости», согласно ему нельзя относиться к смертям на дороге как к неизбежному злу, связанному с автомобилизацией. — wikipedia
В прошлом году фонд “Городские проекты Ильи Варламова и Максима Каца” запустил кампанию “Ноль смертей” в Москве. Идея в том, что погибать в ДТП в принципе никто не должен. А если люди погибают, это вина не жертвы, а в первую очередь проектировщиков, строителей или города. Нужно разбираться в каждой аварии, находить системные причины и постепенно их устранять. Пока городские департаменты этим серьезно не занимаются.
Поэтому летом прошлого года мы с городскими активистами и московскими муниципальными депутатами озадачились созданием инструмента, который бы позволял производить детальный пространственный анализ ДТП: находить опасные перекрестки, изучать локальную статистику по улицам и городам, выявлять основные факторы и причины аварий. На тот момент подобного общедоступного проекта не существовало.
Открытые данные по ДТП
Нам сильно повезло с открытыми данными. На хабре уже писали хорошие посты по работе с ними. Такое внимание вполне оправдано – это одни из самых подробных и интересных данных, которые сейчас раскрывает государство. Координаты, погода, марки и годы выпуска авто, нарушения правил, пол участников и многое другое. И это всё по каждому из более чем 600 тысяч ДТП.
Нас в данном случае волновал сам сервис stat.gibdd.ru. Несмотря на подробные данные под капотом, он отличается тем, что очень неудобен для использования. Он больше походит на сайт для чиновников: сравнение к АППГ (аналогичному периоду прошлого года), детализация лишь до административных единиц, ДТП отображаются списком.
Такой интерфейс и функционал совсем не подходит для людей, а создан скорее для отчетов чиновников.
Создание портала
Важную роль в создании технического задания сыграли люди, которые реально сталкиваются с этими проблемами – депутаты, активисты, урбанисты. Именно благодаря им получилось понять, что действительно нужно. Договорились о небольшом стартовом бюджете в 30 тыс. рублей и начали делать.
Работа с данными началась с того, что я написал простой парсер регионов и ДТП с сайта портала ГИБДД. Мы цеплялись к их API, который отдавал данные самому сервису, и выгружали себе. Как я уже писал выше, на хабре есть посты на эту тему, а исходный код нашего парсера можно найти в репозитории.
Главной проблемой был геокодинг, так как у многих ДТП координаты были некорректными. Координаты очень сильно расходились с адресами. Например, в Махачкале 90% ДТП вообще были вне города, а в Барнауле часть ДТП просто съехала в лес.
В начале мы использовали Яндекс.Геокодер, но их ограничения и отказ поделиться сервисом даже для некоммерческого проекта привел к тому, что нам пришлось искать другое решение. В итоге мы выставили нашу задачу на хакатон социальных проектов PublicData, где ребята сделали свое кастомное решение, которое не только находит ближайший адрес, но и ближайшую дорогу.
Приоритетным координатом ребята взяли адрес, и если геоточка из протокола удалена от него более чем на 300 метров, алгоритм ее учитывать не будет. Алгоритм заключается в том, что мы берём геоточку здания и проецируем ее на дорогу, то же самое производим с геоточкой из протокола. Между двумя получившимися точками проводим отрезок. Серединой этого отрезка будет нужная нам точка.
Далее мы использовали стэк postgresql + django + djangorestframework. Данные были иерархическими, поэтому нам пришлось создавать дополнительные таблицы для тех значений, по которым у нас планировались фильтры.
На фронтэнде мы запланировали интерактивную карту с фильтрами и автоматически рассчитываемой статистикой. Главной задачей было сделать так, чтобы карта не зависала с таким большим количеством объектов (у Москвы это больше 30 тыс). В итоге получилось ReactJS приложение с надстройкой из leaflet. Оно загружает из API сразу все ДТП региона или города, но показывает на карте только те, что попадают в экран. Это сделало стартовую загрузку страницы довольно долгой, но обеспечило быструю фильтрацию и пересчет статистики, и не дает карте тормозить. Кроме того, чуть позже мы добавили тепловой слой, который активируется при определенном масштабе и при слишком большом количестве ДТП. В начале у нас была только карта Москвы.
От мобильной версии на первом этапе мы отказались, так как засунуть туда основные функции будет тяжело, да и ключевые пользовательские истории работы с картой предполагают погружение для анализа, а не что-то, что люди будут делать на ходу.
Фильтры мы выбрали по их важности для анализа: типы ДТП, даты, улицы, нарушения ПДД, окружающая инфраструктура.
Карточку ДТП мы тоже заметно упростили и улучшили с помощью цвета, иконок, панорам.
Результат
За полгода проект посетило чуть больше 30 тыс.человек, которые просмотрели сайт около 100 тыс.раз. Сейчас карта развивается вместе с активистами в регионах, которые рассказывают о проблемах ДТП на примере карты своего города и области. Они общаются с региональными СМИ и рассказывают о проблеме в своих блогах: Киров на «Карте ДТП». Топ-7 улиц города, на которых произошло больше всего аварий, Владимир на народной карте ДТП, «Необходимо руководствоваться безопасностью людей»: в Нижегородской области создали карту ДТП.
Мы получаем и индивидуальные отзывы по проекту. Например, фонд “Городские проекты” активно пользуется нашим порталом для проведения своих исследований опасных перекрестков. На “Киров Urban Форум” наш проект упоминался, как аргумент для пересмотра градостроительной политики. Мы очень рады, что у нас хоть немного получается повлиять на проблему.
Исходный код
Если вы переходили на сайт проекта, то должны были заметить, что у проекта еще много проблем, из которых:
- не все регионы добавлены
- нет мобильной версии
- нельзя поделиться конкретным участком/посчитать статистику на конкретном участке
Чтобы вовлечь в проект больше людей, мы открыли исходный код проекта. Там есть инструкция, как поднять проект у себя, как скачать данные и задачи, решая которые вы можете помочь проекту.
В ближайших планах у нас пофиксить небольшие баги и доработать проект.
На данный момент на карте: Москва, Санкт-Петербург, Казань, Нижний Новгород, Краснодар, Ярославль, Киров, Владимир, Чебоксары и их регионы.
Если проект поможет спасти хотя бы одну жизнь из этих 20 тысяч, то все это было не зря. У вас тоже есть возможности спасти несколько жизней. Мы будем очень рады, если вы:
- поучаствуете с нами в разработке проекта
- предложите свои идеи по развитию и присоединитесь к нашему сообществу в Telegram
Спасибо всем, кто участвовал в создании проекта, а особенно: Алексею Радченко, Анастасии Ромашкевич, Антону Черных, Александру Поповцеву, Анне Кириченко, Константину Набатчикову, Владиславу Пруд, Максиму Никитюку.
Автор: Сергей Устинов