Сборка OSRM - построение маршрутов

Спасибо, по сохраненкам из JOSM работает отлично.

Обновил архивы до версии develop от 2 июля: https://github.com/DennisOSRM/Project-OSRM/commits/develop

  • возможно, теперь заработает на XP (но если будет ругаться на dll - значит с XP все совсем глухо).

К моему сожалению, похоже, что отредактированные выгрузки из JOSM правильно не обрабатываются - в них отрицательные ID узлов и линий…

Отрицательные iD - пока данные на сервер не зальются, id назначается сервером. Залить, скачать, сохранить.

А где можно увидеть исправления в коде, позволившие такую компиляцию?
И какие версии библиотек использовались?
Просто я сам пытался откомпилить, и даже откомпилилось после плясок с бубном, но не заработало :slight_smile: В итоге было принято политическое решение оставаться на линухе.
Если учесть, что мне нужна собственная версия с модифицированным кодом - буду весьма признателен за необходимые патчи к оригиналу.

Да, секрета никакого. Дела обстоят так:

Собирал Visual Studion 2012, начинал с https://github.com/DennisOSRM/Project-OSRM/wiki/Windows-Compilation , но очень многое там уже устарело, да и код потерял совместимость…

Создал карточку с патчем (v4) и форк репозитория:
https://github.com/DennisOSRM/Project-OSRM/issues/646
https://github.com/alex85k/Project-OSRM
(там же есть совмеcтимые варианты Osmium и Taginfo)

Dennis обещал внедрить, когда доберётся до чьей-нибудь машины c Visual Studio :slight_smile:

Библиотеки:

  • Boost (лучше свежий, инструкции по сборке VS в сети есть)
  • libz, bzip2 и libxml2 (дистрибутивы и инструкции с оф. сайтов, проблем не было)
  • Google Protobuf 2.5 (в комплекте есть проект Visual Studio)
  • stxxl (только c svn!) - есть makefile-ы и проект, в настройках врубаем boost и прописываем BOOST_ROOT
  • osmpbf - либо вручную, либо моим cmake-вариантом (нужно сказать, где лежит protobuf): https://github.com/alex85k/OSM-binary
    (если ругается - закомментировать строчку add_subdirectory(tools) в CMakeLists.txt)
  • lua 5.2 : https://github.com/LuaDist/lua , сборка через cmake
  • luabind : заработало с обновленным сторонним вариантом https://github.com/Oberon00/luabind
    (сборка через cmake, ссылаемся на .lib и include от Lua и прописываем BOOST_ROOT и при необходимости Boost_USE_STATIC_LIBS )
    Скомпилированыые библиотеки складываем в какую-то папку (CMake - запускаем проект INSTALL, предварительно CMAKE INSTALL DIR в cmake-gui).

Сам OSRM с исправленным кодом собирается тоже CMake-ом с ручным указанием всех путей к библиотекам в cmake-gui . Он на них по очереди ругается и мы в ответ прописываем путь к include и lib файлам вручную (стандартных путей для них под Windows не предусмотрено, так что - ко всем 9 библиотекам). При сборке около 500 Warning-ов (в основном stxxl) :slight_smile:

Под Linux-ом или FreeBSD всё намного легче, но luabind и stxxl всё равно иногда приходится собирать руками (если в репозиториях их нет или они ругаются прир компиляции из-за протухания).

А не работает откомпиленный OSRM обычно из-за отсутствия файлика .stxxl с указанием временного файла или папки profile . Ну и раньше 64-бит ID из xml неправильно читало.

Спасибо!
У меня как раз на stxxl падал, где-то в потрохах. Про версию (только c svn!) - это существенно. C файлом “.stxxl” я разобрался достаточно быстро, патч 64-bit ID вы сделали уже давно. Но все равно падало.
luabind тоже много крови попил, этот форк я не находил.

Кстати, быстродействие виндовой версии не сверяли с линуксом на таком же железе?

У меня FreeBSD на виртуалке, но работает примерно с той же скоростью… В Ubuntu перезагрузиться и всё пересобрать пока некогда…
Кстати, для скорости можно ещё поставить luajit (с недавних пор поддерживается) и скомпилировать stxxl с параллельностью (но я уже не стал мучаться). И компилятор Intel, наверное, помог бы (под Linux тоже, кстати, там он даже бесплатный/non-commercial есть)…

Lua там только в экстракте участвует, для роутинга не нужен, как я понимаю.
stxxl с параллельностью большого прироста не даст - алгоритмы линейные.
А вот скорость работы с диском может от оси зависеть очень сильно.
Насчет интела не уверен - вроде в каких-то тестах vc2012 его даже делал.

На виртуалке у меня был ubuntu server, вживую - ubuntu 13.04. Живой линух виртуалку раза в 1.5 превосходит. При этом на машине 8 гиг, виртуалке давал 6.

Откомпилил, однако… Надо было сначала проверить.
Не работает роутинг под виндой. Вот этот “маршрут” и под линуксом, и на основном сервере показывается совершенно нормально.

http://map.project-osrm.org/?hl=ru&loc=54.742910,83.153710&loc=54.746880,83.147780

Под виндой же - что попало. Причем если брать данные, сконверченные на линухе - все равно что попало, т.е. ошибка именно в роутинге. И на моем бинарнике, и на вашем.

А если в дебагере гнать, то и ошибки сыпятся где-то в потрохах не то буста, не то stxxl.
Если интересно - вот на этих данных проверял: http://be.gis-lab.info/data/osm_dump/dump/latest/RU-NVS.osm.pbf

Да, печально. Проверил - всё так и есть (уезжает разворачиваться куда попало). C debug-ом там вообще тяжело, библиотеки же отладочные надо (+рабочая папка меняется)…

Иногда неправильно строит даже на крохотном кусочке карты без единого тега oneway, access и без ограничений на поворот. 64-битных ID тоже нет (максимальный - 1859717407): https://dl.dropboxusercontent.com/u/63393258/test2.osm.pbf

Можно для гарантии проверить osrm-routed под Linux, собранный из Windows-совместимых исходников… (проверяю на BSD)
(Может, патч кривоват? Вряд ли, конечно. Скорее всего, какое-нибудь преобразование типов по-другому сработало…)

Мне кажется, либо преобразование типов, либо среди библиотек что-то совсем win32 затесалось.
Под линухом код проверю.

ЗЫ: Можно продолжить по скайпу. Мой nredko

Можно, только у меня микрофона и камеры нет )
Мой код, оказывается, не был в репозитории, теперь вот:
https://github.com/alex85k/Project-OSRM/tree/develop-win

Если кто-то из заинтересованных спецов С++ может найти ошибку или несовместимость c VisualStudio в коде OSRM, приводящую к странным маршрутам - добро пожаловать!
https://github.com/DennisOSRM/Project-OSRM/issues/671
Из-за этого глюка OSRM под Windows неюзабелен… (мне казалось, что в ранней сборке ошибок не было, но это, наверное, не так). У автора нет доступа к VisualStudio (палёным в их краях не пользуются), так что вся надежда на вас )

Express же, нет?

Хмм, наверное - да, спасибо ) Даже консольный Windows 7 SDK может прокатить…
P.S. Уже кормлю его Boost-ом…

Пересобрал ещё раз с помощью Windows 7 SDK из консоли (вот мои батники: https://dl.dropboxusercontent.com/u/63393258/Build_OSRM.zip ) .
extract и prepare стали иногда вылетать, но баг в routed, кажется, куда-то испарился ))
Сборная сборка (2 старых exe +1 новый) на дропбоксе (32 бит не обновлял).
Автору OSRM доложил, он собирается всё проверить и починить.

Да, баг пропал. Оказалось,

abs((long long) id1 -id2 )

был неудачным решением с беззнаковыми длинными числами (long long добавил я из-за ошибки компилятора VS2012)…
Старый бесплатный компилятор из Windows 7 SDK этого не переварил и заставил исправить.

Итог - сборка работает (снова VS2012), Dennis перепроверяет для включения патчей в основную ветку.
P.S. 32бит тоже пересобрал. Желающие могут пособирать и сами - вот скрипты (нужен только ms-компилятор, git, svn, cmake и собранный boost)

Денис тоже хорош… Вот нафига было менять ApproximateDistanceByEuclid на ApproximateEuclideanDistance? Это что, принципиально???
Да и выносить часть функционала из routed.cpp в OSRM.cpp, а после этого делать все остальные бинарники зависимыми от этого OSRM.cpp… Теперь если хочешь перекомпилять routed, потому что присобачил свой плагин - будь любезен перекомпилять и все остальное…