Статьи

Визуализация и обработка информации о трафике с помощью GraphHopper в режиме реального времени для Кельна (Германия, Кельн)

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

ghmaps-с-трафика

В этом немецком городе есть прекрасное сообщество открытых данных и портал открытых данных. Там я нашел данные о трафике, и было отмечено, что обновление выполняется каждые 5-10 минут, поэтому у нас есть приблизительная информация о трафике в реальном времени. Для других открытых данных или других городов загляните в codefor.de

Исходный репозиторий для необходимых изменений также находится на Github . Самое важное изменение заключалось в том, чтобы визуализировать информацию о трафике непосредственно в браузере, это очень помогает при отладке, но у вас еще много возможностей для ее улучшения. Использование leaflet.canvas немного сложнее, так как нам нужно разделить информацию о трафике на структуру тайлов. Вместо этого я использую решение большого холста от CartoDB, делающее все действительно простым. Смотрите здесь вопрос о d3js .

Для расширения старого примера необходимы еще три простых шага:

  • Периодически получать данные
  • Разбор и интерпретация данных правильно
  • Блокировка при записи данных и блокировка при маршрутизации

Извлечение данных и их анализ — простая процедура, выполняемая в DataUpdater.fetch. Также легко окружить метод подачи данных блокировкой записи:

public void feed(RoadData data) {
  writeLock.lock();
  try {
    lockedFeed(data);
  } finally {
    writeLock.unlock();
  }
}

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

GraphHopper tmp = new GraphHopper() {
  @Override public GHResponse route(GHRequest request) {
    lock.readLock().lock();
    try {
      return super.route(request);
    } finally {
      lock.readLock().unlock();
    }
  }
}.forServer().init(args);

Теперь нам просто нужно получить дорожную сеть для этой области и запустить сервер:

  1. wget http://download.geofabrik.de/europe/germany/nordrhein-westfalen/koeln-regbez-latest.osm.pbf
  2. ./td.sh datasource = koeln-regbez-latest.osm.pbf
  3. Посетите http: // localhost: 8989, чтобы попробовать маршрутизацию и увидеть информацию о трафике.

И вы будете регулярно видеть обновления скорости, на которую должна влиять маршрутизация, по крайней мере, продолжительность маршрута:

Speed change at 50.94432295851602, 7.057916495227443. Old: 30.0, new:5.0
Speed change at 50.944496505815735, 7.057842025768907. Old: 60.0, new:45.0
Speed change at 50.94422920435813, 6.982818132995898. Old: 65.0, new:45.0
Speed change at 50.96702284992454, 7.03188984955171. Old: 45.0, new:20.0
Speed change at 50.90650702086146, 7.0605028341376235. Old: 70.0, new:45.0
Updated 86 street elements. Errors:0

Чтобы начать с нуля, вы можете удалить папку кеша графа и использовать старые значения скорости. Тем не менее, это только грубый прототип. Например:

  • Соответствие карты еще не интегрировано
  • Откат к старым значениям -> либо хранить в RoadData, либо в отдельном экземпляре GH
  • Пользовательский интерфейс: артефакт при масштабировании. Никакая конкретная информация не отображается при наведении мыши
  • Используйте два направления для скорости, если нет улицы с односторонним движением
  • Конечно, лучше всего попробовать систему в ранние немецкие времена и надеяться, что там будет много событий пробок;)

Это только один город, но мы собираем больше здесь! Теперь получайте удовольствие от тестирования и настройки системы!

Опубликовано Timetabling первоначально на karussell.wordpress.com