image

Расскажу вам о проекте “Карта ДТП” – интерактивной карте аварий в России. Карта упрощает анализ ДТП и помогает найти реальные причины происшествий. Как пришла идея, где брали данные и зачем открыли исходный код.

За 2018 год в ДТП на дорогах России погибли 19088 человек



Цифра с каждым годом уменьшается, но все равно остается гораздо большей, чем в развитых странах, где проблеме смертности на дорогах уделяется гораздо больше внимания. Отличным примером является шведская программа по повышению безопасности дорожного движения Vision Zero.

Базовым принципом программы является недопустимость дорожно-транспортных происшествий со смертельным исходом. Данный принцип ещё называют принципом «нулевой терпимости», согласно ему нельзя относиться к смертям на дороге как к неизбежному злу, связанному с автомобилизацией. — wikipedia

В прошлом году фонд “Городские проекты Ильи Варламова и Максима Каца” запустил кампанию “Ноль смертей” в Москве. Идея в том, что погибать в ДТП в принципе никто не должен. А если люди погибают, это вина не жертвы, а в первую очередь проектировщиков, строителей или города. Нужно разбираться в каждой аварии, находить системные причины и постепенно их устранять. Пока городские департаменты этим серьезно не занимаются.

Поэтому летом прошлого года мы с городскими активистами и московскими муниципальными депутатами озадачились созданием инструмента, который бы позволял производить детальный пространственный анализ ДТП: находить опасные перекрестки, изучать локальную статистику по улицам и городам, выявлять основные факторы и причины аварий. На тот момент подобного общедоступного проекта не существовало.

Открытые данные по ДТП


Нам сильно повезло с открытыми данными. На хабре уже писали хорошие посты по работе с ними. Такое внимание вполне оправдано – это одни из самых подробных и интересных данных, которые сейчас раскрывает государство. Координаты, погода, марки и годы выпуска авто, нарушения правил, пол участников и многое другое. И это всё по каждому из более чем 600 тысяч ДТП.

Нас в данном случае волновал сам сервис stat.gibdd.ru. Несмотря на подробные данные под капотом, он отличается тем, что очень неудобен для использования. Он больше походит на сайт для чиновников: сравнение к АППГ (аналогичному периоду прошлого года), детализация лишь до административных единиц, ДТП отображаются списком.

image

Такой интерфейс и функционал совсем не подходит для людей, а создан скорее для отчетов чиновников.

Создание портала


Важную роль в создании технического задания сыграли люди, которые реально сталкиваются с этими проблемами – депутаты, активисты, урбанисты. Именно благодаря им получилось понять, что действительно нужно. Договорились о небольшом стартовом бюджете в 30 тыс. рублей и начали делать.

Работа с данными началась с того, что я написал простой парсер регионов и ДТП с сайта портала ГИБДД. Мы цеплялись к их API, который отдавал данные самому сервису, и выгружали себе. Как я уже писал выше, на хабре есть посты на эту тему, а исходный код нашего парсера можно найти в репозитории.

Главной проблемой был геокодинг, так как у многих ДТП координаты были некорректными. Координаты очень сильно расходились с адресами. Например, в Махачкале 90% ДТП вообще были вне города, а в Барнауле часть ДТП просто съехала в лес.

image

В начале мы использовали Яндекс.Геокодер, но их ограничения и отказ поделиться сервисом даже для некоммерческого проекта привел к тому, что нам пришлось искать другое решение. В итоге мы выставили нашу задачу на хакатон социальных проектов PublicData, где ребята сделали свое кастомное решение, которое не только находит ближайший адрес, но и ближайшую дорогу.

image

Приоритетным координатом ребята взяли адрес, и если геоточка из протокола удалена от него более чем на 300 метров, алгоритм ее учитывать не будет. Алгоритм заключается в том, что мы берём геоточку здания и проецируем ее на дорогу, то же самое производим с геоточкой из протокола. Между двумя получившимися точками проводим отрезок. Серединой этого отрезка будет нужная нам точка.

Далее мы использовали стэк postgresql + django + djangorestframework. Данные были иерархическими, поэтому нам пришлось создавать дополнительные таблицы для тех значений, по которым у нас планировались фильтры.

На фронтэнде мы запланировали интерактивную карту с фильтрами и автоматически рассчитываемой статистикой. Главной задачей было сделать так, чтобы карта не зависала с таким большим количеством объектов (у Москвы это больше 30 тыс). В итоге получилось ReactJS приложение с надстройкой из leaflet. Оно загружает из API сразу все ДТП региона или города, но показывает на карте только те, что попадают в экран. Это сделало стартовую загрузку страницы довольно долгой, но обеспечило быструю фильтрацию и пересчет статистики, и не дает карте тормозить. Кроме того, чуть позже мы добавили тепловой слой, который активируется при определенном масштабе и при слишком большом количестве ДТП. В начале у нас была только карта Мо��квы.

От мобильной версии на первом этапе мы отказались, так как засунуть туда основные функции будет тяжело, да и ключевые пользовательские истории работы с картой предполагают погружение для анализа, а не что-то, что люди будут делать на ходу.

Фильтры мы выбрали по их важности для анализа: типы ДТП, даты, улицы, нарушения ПДД, окружающая инфраструктура.



Карточку ДТП мы тоже заметно упростили и улучшили с помощью цвета, иконок, панорам.

image

Результат


За полгода проект посетило чуть больше 30 тыс.человек, которые просмотрели сайт около 100 тыс.раз. Сейчас карта развивается вместе с активистами в регионах, которые рассказывают о проблемах ДТП на примере карты своего города и области. Они общаются с региональными СМИ и рассказывают о проблеме в своих блогах: Киров на «Карте ДТП». Топ-7 улиц города, на которых произошло больше всего аварий, Владимир на народной карте ДТП, «Необходимо руководствоваться безопасностью людей»: в Нижегородской области создали карту ДТП.

Мы получаем и индивидуальные отзывы по проекту. Например, фонд “Городские проекты” активно пользуется нашим порталом для проведения своих исследований опасных перекрестков. На “Киров Urban Форум” наш проект упоминался, как аргумент для пересмотра градостроит��льной политики. Мы очень рады, что у нас хоть немного получается повлиять на проблему.

Исходный код


Если вы переходили на сайт проекта, то должны были заметить, что у проекта еще много проблем, из которых:

  • не все регионы добавлены
  • нет мобильной версии
  • нельзя поделиться конкретным участком/посчитать статистику на конкретном участке

Чтобы вовлечь в проект больше людей, мы открыли исходный код проекта. Там есть инструкция, как поднять проект у себя, как скачать данные и задачи, решая которые вы можете помочь проекту.

В ближайших планах у нас пофиксить небольшие баги и доработать проект.

На данный момент на карте: Москва, Санкт-Петербург, Казань, Нижний Новгород, Краснодар, Ярославль, Киров, Владимир, Чебоксары и их регионы.

Если проект поможет спасти хотя бы одну жизнь из этих 20 тысяч, то все это было не зря. У вас тоже есть возможности спасти несколько жизней. Мы будем очень рады, если вы:


Спасибо всем, кто участвовал в создании проекта, а особенно: Алексею Радченко, Анастасии Ромашкевич, Антону Черных c13, Александру Поповцеву, Анне Кириченко, Константину Набатчикову, Владиславу Пруд, Максиму Никитюку.