Розвертаємо сервіс побудови маршрутів OSRM

    Зовсім недавно, в одному з проектів, нам було поставлено завдання — навчитися будувати маршрути на карті для велосипедних прогулянок.
Насамперед, ми почали дивитися маршрути Google і Яндекс. І на жаль, довелося від них відмовитися, тому що перший дозволяли показувати їх тільки на рідних картах, другий, не знали що є велосипеди і навіть пішоходи.
Трохи вивчивши предметну область, ми знайшли нарешті що шукали: Open Source Routing Machine . Проект, з відкритим вихідним кодом, який дозволяє розгорнути у себе на сервері, свій власний сервіс побудови маршрутів.
 
Розібравшись, як його налаштовувати і запускати, ми вирішили поділитися цим і переказати своїми словами процес установки, і то з чим довелося зіткнутися в процесі.
 
У wiki проекту, досить докладно описаний процес установки. Установка описана для різних ОС (Debian, CentOS, Mac OS X та ін), написані проблеми при розгортанні на EC2 Micro, а для «особливо просунутих» є рецепт для Chef.
Нам пощастило, що в якості ОС на сервері у нас стояла Debian Wheezy (64). Тому що при читанні документації, з'ясовується що на інших системах доводитися робити різні додаткові кроки. Наприклад, на Debian Squeeze, знадобилося оновити boost до версії 1.44. Але, все це, спасибі розробникам, написано в документації.
У нас установка зайняла 3 простих рядки:
 

sudo apt-get install git libboost-dev gcc g++ make cmake libstxxl-dev \
libxml2-dev libbz2-dev zlib1g-dev libzip-dev libboost-filesystem-dev \
libboost-thread-dev libboost-system-dev libboost-regex-dev libboost-program-options-dev \
libboost-iostreams-dev libgomp1 libpng-dev libprotoc7 libprotobuf-dev protobuf-compiler \
liblua5.1-0-dev libluabind-dev pkg-config libosmpbf-dev

 
git clone https://github.com/DennisOSRM/Project-OSRM.git

 
mkdir -p build; cd build; cmake ..; make

 
Після чого, подумавши пару хвилин, сервер повідомив що збірка пройшла успішно.
Тепер, починався наступний етап, як виявилося найдовший — запуск.
Щоб запустити сервер, йому необхідно підготувати дані, для побудови графа. Щоб завантажити їх, необхідно їх витягти з карт OpenStreetMap . Робиться це, що входять в комплект утилітами.
Але, спочатку потрібно завантажити карту регіону, для якого ви хочете будувати маршрути.
Розробники, пропонують використовувати сервіс GeoFabrik . На якому можна завантажити карти для основних материків землі, окремих країн і регіонів. Але, нам захотілося більшого, і ми викачали цілком карту планети через Planet OSM .
За допомогою утиліти osrm-extract, дані витягуються з карти і зберігаються для подальшого завантаження. Перед тим як витягати дані, необхідно вказати файл профілю (profile.lua), в якому описано які саме маршрути необхідні. Усі профілі лежать в папці profiles в кореневій папці з вихідними кодами і підключаються створенням посилання на потрібний файл.
 
 
ln -s ../profiles/bicycle.lua profile.lua

 
Як бачите, ми вказали профіль для велосипедистів. Але, там є профілі і для автомобільного транспорту і для пішоходів.
Так само, може знадобитися вказати посилання на папку з додатковими бібліотеками
 
 
ln -s ../profiles/lib/

 
Після чого, запускаємо саму утиліту.
 
 
./osrm-extract map.osm

 
Треба знову віддати належне розробникам — вони чесно попередили про те, що процес довгий, і навіть написали що у них він зайняв 65 хвилин на конфігурації Core i7 with 8GB RAM and (slow) 5400 RPM Samsung SATA.
На нашому сервері (Core i5, 8GB RAM, 5400), файл з картами розміром 35 ГБ в підсумку оброблявся 4 години. Надалі ми спробували в якості експерименту взяти карту європейської частини Росії — на це пішло 30 хвилин.
Розробники для прискорення радять по-перше, завантажувати карти у форматі PBF, а по-друге — переходити на SSD диски :)
І ось, у нас вийшов файл з розширенням osrm. Але, потрібно скористатися ще однією утилітою з комплекту — osrm-prepare.
Вона створює кілька файлів: hsgr — ієрархію маршрутів, для знаходження найбільш підходящих, nodes — граф маршрутів, і файли з індексами. Запустивши утиліту,
 
 
./osrm-prepare map.osrm 

 
ми знову сіли пити каву, тому що процес в черговий раз зайняв кілька годин. І ось, побачивши на екрані заповітні 100% ми запустили сам сервер:
 
 
./osrm-routed

 
Але, перед запуском, як виявилося, потрібно покласти, в директорії з сервером, файл ініціалізації server.ini. У ньому ми вказуємо які файли і звідки брати, і кілька параметрів запуску.
 
 
Threads = 4
IP = 0.0.0.0
Port = 5000

hsgrData=./map.osrm.hsgr
nodesData=./map.osrm.nodes
edgesData=./map.osrm.edges
ramIndex=./map.osrm.ramIndex
fileIndex=./map.osrm.fileIndex
namesData=./map.osrm.names

 
Ура! Сервер запустився і радісно закліпав рядками повідомляють нам що він готовий створювати маршрути. Але, дивитися на що повертається JSON було не цікаво. І на цей випадок, у розробників є невелике web-додаток для використання OSRM.
Викачуємо исходники з цього адресою . Викладаємо їх на веб-сервер. Більше ніяких додаткових налаштувань робити не треба — достатньо зайти на сторінку http:// <your-server> / osrm / main.html
За замовчуванням, додаток налаштоване на демо-сервер OSRM, але відкривши файл OSRM.config.js ми можемо поміняти адресу сервера на той, який встановили, помінявши параметр url в розділі ROUTING_ENGINES.
 
І от у нас є власний сервіс побудови маршрутів. Спасибі, за увагу!
    
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.