Технический евангелист
0,0
рейтинг
28 октября 2014 в 10:48

Разработка → Московская область под Пробкоскопом


На основе сервиса Яндекс.Пробки мы нарисовали красивые шевелящиеся картинки на карте Московской области. В нашем Пробкоскопе (tm) можно посмотреть, как выглядит транспортная ситуация за неделю в Московской области в целом и для каждой конкретной точки в квадрате 200 x 200 км вокруг Москвы.



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

А что, если мы хотим найти на карте место, свободное от пробок? Или почти свободное. Или посмотреть, насколько затруднительно добираться туда, где нам предлагают выгодно купить дачу под Москвой. Или выбрать лучший день, когда можно съездить навестить бабушку в деревне Дурниха или тетушку в поселке Чулково-Club. Сейчас по Яндекс.Пробкам путь туда выглядит неплохо, а что бывает в пятницу вечером? В воскресенье?

Для этого нужно посмотреть на карту Подмосковья немного под другим углом. И в этом нам поможет Пробкоскоп.

Мы нанесли на карту цветом удаленность по времени от центра Москвы. С учетом пробок, в разное время суток, в разные дни недели. И вот что у нас получилось:



Чтобы получить исходные данные, мы просто спросили у Яндекса, сколько времени уйдет на дорогу от центра Москвы до каждой точки на карте, и раскрасили каждую точку соответствующим цветом. Конечно же, если бы мы спрашивали у Яндекса 10 тысяч маршрутов (а именно столько точек мы раскрашиваем на карте), нас давно бы забанили. Мы поступили несколько осторожнее: на каждом шоссе, идущем из Москвы, расставили точки через каждые 10 километров. Затем вежливо попросили API Яндекс.Карт построить маршрут на 120 км из центра Москвы через эти точки и тщательно записали, сколько времени займет дорога между этими точками.



Но если бы мы показывали только опорные точки (по одной на каждые 10 км основных шоссе из Москвы), картинка получилась бы крайне скучной. Так что нам все-таки нужно было узнать, сколько времени необходимо, чтобы добраться до каждой из 10 тысяч точек рассматриваемого квадрата.

Берем точки, одну за другой. Для каждой ищем в базе три ближайшие опорные точки (из тех, которые были изначально расставлены через 10 км вдоль каждого шоссе). По графу дорог из OSM считаем расстояние от данной точки до каждой из трех опорных точек. На графе OSM указана максимальная скорость на каждом ребре-дороге. Считаем, что от опорной точки до нужной можно добраться без пробок (смелое, но допустимое упрощение). Из трех вариантов (время по Яндексу до опорной точки + время по OSM от нее до рассматриваемой точки) находим лучший, его и наносим на карту. И так 10 тысяч раз. Теперь, конечно, интересно посмотреть на это в динамике. Ну и гипнотическая картинка «дыхания» подмосковных пробок, получившаяся в результате:



Что мы использовали для построения таких красивых картинок:

  • Всеми любимый API Яндекс.Карт,
  • Замечательную JavaScript-библиотеку для отображения данных и карт — Leaflet,
  • Замечательный сервер для рендеринга карт — Mapnik,
  • В качестве хранилища — PostgreSQL,
  • Бэкэнд — Django,
  • Данные — OSM.


Также мы сделали возможность посмотреть «Пробковый профиль» каждой точки нашего подмосковного квадрата.

Сергиев Посад



Дмитров — авария в понедельник





Волоколамск





Что хотим еще сделать. Картинки, демонстрирующие время на дорогу в центр (сейчас показывается время в пути из центра Москвы).
Нарисовать аналогичные картинки и собрать данные для других городов (если будет интерес пользователей).
Показывать более обширную статистику для точки, а не только за последние несколько недель.

Попробовать самим можно на созданном нами сайте. Ваши комментарии?
Grigory Petrov @eyeofhell
карма
208,7
рейтинг 0,0
Технический евангелист
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (53)

  • +1
    Еще бы вручную время и день выбирать.
  • +2
    Вот сюда мышкой:
    • 0
      Спасибо
    • +1
      Сервис отличный, спасибо! Но раз возникают такие вопросы — значит UI есть куда улучшать)
      • +2
        Хабр — хорошая лакмусовая бумажка для таких штук. Одна из причин тратить силы и делиться с общественостью наработками :).
  • +2
    в будни ~18:00 загляденье
  • +1
    1) Данные только на дорогу из Москвы?
    2) Что значит «стандартная пробка»? Почему это значение меньше минимального времени пути в Волоколамске?
    3) на скринах по городам очень не хватает расшифровки цветов.
    • 0
      2) «Стандартная» пробка = «Стандартное» время в пути — минимальное время в пути
  • 0
    В качестве инфографики конечно не плохо. Но все цели что Вы описали, можно решить при помощи обычных Яндекс карт, они позволяют смотреть пробки в разные время суток и дни недели.
    • +1
      В том то и дело — они показывают пробки, а мы считаем и показываем, сколько времени ехать до какой-то точки.
      Если на шоссе небольшая, но мертвая пробка — это затруднит путь в целый район за ней, он «потемнеет» на карте.
  • +1
    Сделайте кнопку " Сейчас ", и другие интервалы по времени (10 мин, 1 час назад… )
    • 0
      нельзя — нарушат пункт 2.3.7.5 ПС
  • +2
    Спасибо! У нас теперь есть то, чего мы так долго ждали от Яндекса, но он стеснялся это реализовать. Просто. Потрясающий. Сервис.
  • +1
    Кнопку «Play/Pause» надо сделать «срабатывабельнее», какая-то она странная. Слой с пробками нужно сделать прозрачнее, чтобы было видно надписи и дороги. Стационарные области с недоступными, так понимаю, местами, лучше либо красить в совсем тёмный цвет, либо аппроксимировать по соседям, чтоб кавайнее смотрелось.
  • +9
    Поздравляю, вы нарушили пп. 2.3.1, 2.3.3, 2.3.7.2, 2.3.7.5 Пользовательского соглашения API Яндекс.Карт.

    • +2
      Спасибо, мы старались сделать полезный сервис :). Если не секрет, а 2.3.1 каким образом нарушается? У нас разве код вызова не на сайте ресположен? O_O.
      • +2
        Ну мы на вашем сайте вызова апи не нашли, может невнимательно искали, конечно) Вообще если вы будете показывать это все через Яндекс.API, никаких вопросов по ПС не будет. Тепловые карты там тоже есть github.com/yandex/mapsapi-heatmap
        • +1
          Ну вызов как бы происходит в backend части, к которой снаружи доступа нет :). Мы же не хотим чтобы к вам миллион человек ломилось с одинаковыми запросами, да. Кеширование и все такое. Что вы понимаете под словом «сайт»? Картинка, которую рисует браузер? Построенное браузером в памяти DOM дерево? Скачанный браузером HTML файл? Если есть возможность — уточните, пожалуйста, определение :). А то я запутался :(.
          • +2
            Кароче, фактически если вы берете какие-то данные от яндекса и не показываете на своем сайте карту яндекса, это нарушение. По вот этим юридическим тонкостям я не сильна, если вам правда интересно, могу призвать человека, который умеет это все формально рассказывать.
          • +1
            Тогда ещё п. 2.3.2 нарушен.
            • 0
              т.е., если они выложат исходники серверной части на GitHub, то пункт 2.3.2 нарушен не будет?
              • 0
                Попробуйте прочитать п. 2.3.2, например.
                • 0
                  да, прочитал.
                  мой вопрос укладывается вот в эту формулировку из него:
                  «2.3.2 Сервис может использоваться Пользователем только в рамках сайтов ..., доступных для бесплатного открытого использования неограниченным кругом лиц. Сервис не может использоваться для проектов, требующих оплаты, или иным образом ограничивающих доступ к ним третьих лиц. Необходимость зарегистрироваться не считается ограничением доступа в рамках настоящего пункта.»

                  т.е., я, как Пользователь Сервиса создаю сайт, серверная часть которого дёргает данные через API, а клиентская часть доступна для использования без регистрации неограниченному кругу лиц. Так же, я выкладываю исходники серверной части сайта, которые так же, доступны для использования неограниченному кругу лиц.
                  Что из пункта 2.3.2 я при этом нарушаю?
                  • 0
                    Ничего. п. 2.3.2 ничего про open/closed source не говорит — только о том, что проект, в котором используется АПИ, должен быть открыт и бесплатен для всех. В данном случае есть некоторая непубличная функциональность, в которой используется API, но которая обычным пользователям недоступна.
                    • +2
                      Интересно будет дождаться официальной позиции по этому поводу или уточнения пункта. ИМХО По смыслу пункт 2.3.2 все таки не про техническую реализацию, а про предоставление открытого бесплатного доступа к сервису как к продукту.
  • 0
    Яндекс опять всё испортит, да? А знаете ли вы, что у них вектора есть каждой машины, то есть данных достаточно для гидродинамического моделирования потоков и прогнозирования на ближайшие несколько часов. И можно составлять точный прогноз и расчитывать маршрут исходя из него, а не из текущего состояния пробок. Не хотите сами до ума доводить, дайте хоть хорошим людям это честно сделать! С уважением, бывший (озлобленный) «яндексоид».
    • +3
      Нет конечно :). Я сейчас сползаю к разработчикам, они быстренько заменял подложку с openstreetmaps на яндекс.карты и все будут счастливы. Телепатия показывает, что все эти пункты пользовательского соглашения и общие термины сводятся именно к данной user story :).
  • +2
    Очень странно и непривычно видеть, что синие оттенки обозначают ЛУЧШЕЕ по сравнению с зелеными время. Контринтуитивно.
    • 0
      Классическая температурная карта: белый->синий->зеленый->желтый->красный. Пары зеленый-красный было мало, увы.
      • +2
        В температурной карте синий означает «прохладно», а зеленый — «тепло». Какая ассоциативная связь должна подсказать моему мозгу, что у вас чем холоднее — тем лучше? На температурной карте мозг тянется к теплу, к зеленому. И тут тоже. Но это не самый хороший вариант! Можно было взять спектр между зеленым и красным. От красного я убегаю, к зеленому стремлюсь — это интуитивно. Оттенков можно сделать довольно много. Даже у восьмибитного grayscale 256 вариаций цвета — это довольно много.
        • 0
          Мы все проверили. От зеленого до красного, увы, визуально намного хуже выглядит. Так что у нас компромиссный вариант — от синего до красного с легендой справа.
          • +2
            > От зеленого до красного, увы, визуально намного хуже выглядит.

            Зато понимается с первого взгляда.

            > От зеленого до красного, увы, визуально намного хуже выглядит.

            И с постоянным мотанием головой на эту легенду, когнитивным диссонансом и одергиванием себя. Было бы от зеленого до красного — легенда была бы не нужна. Точнее, опциональна. Можно и тултипом выводить для конкретной точки информацию о времени.

            P.S. Вообще сервис очень классный, у меня уже в закладках. Просто хочется дать конструктивную обратную связь, насколько возможно.
            • 0
              За конструктив спасибо. Мы его только порелизили и, безусловно, стараемся адаптировать интерфейс под большую часть аудитории. Следите за обновлениями :).
              • 0
                Можете сделать, чтобы красная волна откатилась и не возвращалась?
                • +2
                  Можно, но очень дорого :(.
        • +1
          Метафора такова: чем дольше едешь, тем сильнее «нагреваешься».
          • 0
            Мне интуитивно показалась связь с энергией фотона: вылетают с высокой энергией синие фотоны (куда пропали фиолетовые — не ясно, ну да фиг с ними) и со временем энергия спадает до красных.
      • 0
        colorbrewer2.org — лучший сайт для подбора градиентов. Радужный градиент — худшая ошибка дизайнеров инфографики. Статья на этот счёт (с теорией и другими полезными ссылками).
  • +1
    При выборе съемной квартиры пользовался ф-ей прогноза пробок.
    Она так же позволяет посмотреть оценку состояния по дням недели и времени дня.
    А вот, например, оценить сизонные колебания уже нельзя.

    Мне кажется, что величина «удаленность по времени от центра Москвы» не очень наглядна.
    Людей, как правило, интересуют конкретные маршруты.
  • +1
    Напишите справа не Легенда, а, например, время в пути… я пока не клацнул на карте не мог понять, что за легенда (-:
  • +1
    Яндекс… Пробки… Подъезжаешь — зеленое. Въехал — бордовое.
    Они по мне пробки строят? Постоянно врет — собака!!!
    • +1
      Вы не поверите, по вам и строят :)

      image
      • +1
        У Яндекса есть еще статические измерители скорости на многих дорогах Москвы.
        Это я касательно картинки.
        • 0
          Одно другое не отменяет. Официальная информация company.yandex.ru/technologies/yaprobki/
          Если есть претензии к картинке, советую писать куда-то туда.
        • +1
          Вообще-то измерители скорости потока Яндексу не принадлежат, компания только имеет доступ к их данным.
  • +1
    Визуализация интересная. Да только не все работают в центре Пробска (Москвы, то есть). Вот бы сделать подобные карты для каждой из 10000 точек.
  • +1
    Карта боевых действий. Судя по основному направлению удара часов в 7 утра — бьемся с татаро-монгольским игом.

    Цвета выбраны неудачно… 2ч45мин — зеленый цвет? Ну ок…
  • +3
    Похоже, что сервис отображает время и даты согласно часовому поясу компьютера. Почему бы просто не показывать московское время?
  • +2
    Ситуация между М4 и М5 вдоль А107 и А108 демонстрирует неверный подход к извлечению данных. То, что по А107 проходит резкая граница между «зеленой» и «красной» областью, показывает, что до любой точки считается только один маршрут. Конкретно — до населенных пунктов, которые находятся от М4 до Борисово, маршрут считается по М4, а от М5 до Борисово — по М5. То, что М5 в районе Бронниц тормозит, и по ней до какого-нибудь Нестерово будет ехать долго, отражает красная зона вокруг Бронниц. Но вот если до того же Нестерово ехать по М4 и А-107, то несмотря на более длинный маршрут, туда получится доехать быстрее. Визуально правильно посчитанная карта не должна иметь резких переходов цвета, по крайней мере — пересекающих крупные дороги, такие как А-107.
    Абсолютно тот же глюк видим на А-107 между Дмитровским и Ярославским шоссе, на А-108 между М9 и М1.
  • 0
    Привет undev'у, вы крутые :)
  • +1
    Любопытный сервис, в качестве тестового полигона Москва конечно лучший вариант.
    Но с выбором других крупных городов, было бы намного интереснее, например по количеству жителей >300к
  • 0
    Я боюсь представить, что происходит в Ершовском
    • 0
      У них не корректный метод расчета максимального времени и соответственно — стандартной пробки. Учитывать максимальное значение ==1.6645306804280702e+304 ч 8 мин в расчетах и показ на диаграмме — как-то не комильфо. Такие данные должны автоматически отбраковываться…
      Это привело к тому, что сейчас (07.11.2014 09:30 msk) на сайте ни для одной точки расчет производится неверно, поскольку данные за середину дня вторника зашкаливают…

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.