Развертывание GraphHopper в качестве веб-сервиса для построения маршрутов
Рассмотрен процесс развертывания GraphHopper в качестве Веб-сервиса.
Введение
GraphHopper - это быстрый роутинговый движок, написанный на Java. К его отличительным особенностям можно отнести:
- работу с данными OpenStreetMap
- эффективное использования памяти
- широкие возможности по настройке
- свободная лицензия Apache
Так как код GraphHopper полностью открыт, то вы можете использовать необходимые Java-классы в своём собственном приложении. Кроме того, GraphHopper может быть использован в качестве Веб-сервиса маршрутизации, предоставляющего соответствующий HTTP API. Именно процедуре развертывания GraphHopper в качестве сервиса маршрутизации и посвящена в данная статья. Пример Веб-приложения, использующего GraphHopper в качестве роутингового движка можно посмотреть тут. Отметим, что данное приложение вы получаете автоматически при разворачивании GraphHopper в качестве Веб-сервиса.
Для того, чтобы использовать GraphHopper в качестве Веб-сервиса можно самостоятельно собрать собственный WAR-файл либо воспользоваться уже готовой сборкой. Мы будем использовать как раз готовую сборку. К первому варианту следует прибегать в тех случаях, если готовая сборка вас чем-то не устраивает и вы хотите что-то в ней изменить. Подробнее про сборку GraphHopper тут.
Для развертывания WAR-файла нам потребуется воспользоваться каким-либо контейнером сервлетов. Мы рассмотрим два варианта: развертывание GraphHopper: с помощью Jetty Runner и Jetty. Первый вариант следует использовать, если вы хотите "по-быстрому" оценить, что из себя представляет GraphHopeer. Второй же вариант подходит для промышленного использования.
Запуск GraphHopper с помощью Jetty Runner
Jetty Runner предназначен для быстрого запуска Веб-приложений непосредственно из командной строки и не требует установки полноценного Веб-сервера.
- Для дальнейшей работы создадим в домашней директории каталог graphhopper (все файлы, с которыми мы будем работать, должны быть размещены здесь). В Linux:
mkdir ~/graphhopper
- Воспользуемся версией Jetty Runner 9.1.2 jetty-runner-9.1.2.v20140210.jar. Поместим его в директорию graphhopper. Отметим, что для запуска Jetty Runner данной версии в системе должна быть установлена JRE7 или JRE8. Если же у вас нет возможности обновить JRE, то для запуска Jetty Runner на JRE6 можно попробовать воспользоваться старыми версиями Jetty Runner.
- На сегодняшний день последняя стабильная версия GraphHopper - 0.2, master-версия имеет ряд проблем, например, неправильное указание направлений в описании маршрута #171 и поэтому мы будем работать именно с версией 0.2. Скачиваем graphhopper-web-0.2.war.
- Скачиваем пример конфигурационного файла GraphHopper config-example.properties.
- Скачиваем данные проекта OpenStreetMap на основе которых будет осуществляться роутинг. Для примере возьмём Москву.
- Запускаем GraphHopper:
java -Dgraphhopper.config=config-example.properties -Dgraphhopper.osmreader.osm=RU-MOS-140322.osm.pbf -jar jetty-runner-9.1.2.v20140210.jar --port 8989 graphhopper-web-0.2.war
Первый запуск займёт какое-то время (порядка 1 минуты), это связано с построением графа роутинга. Если в процессе запуска не возникло никаких ошибок, то открыв в браузере страницу по адресу http://localhost:8989/, вы увидите следующую картину:
По данному адресу (http://localhost:8989/) расположено Веб-приложение, с помощью которого можно указать начальную и конечную точки и просмотреть получившийся маршрут, а также его текстовое описание с указанием того куда и через сколько метров следует поворачивать. В некоторых случаях достаточно просто вставить ссылку на это приложение в свою страницу и тем самым предоставить клиентам возможность построения маршрутов.
Если же вы не хотите использовать Web-приложение GraphHopper, а только HTTP API, то вам следует ознакомиться со следующей документацией. URL API для построения маршрутов имеет следующий путь: /api/route. Пример HTTP запроса к GraphHopper: http://localhost:8989/api/route?point=55.422779,37.254639&point=55.646599,38.023682&locale=ru-RU.
Также имеется API для получения информации об инстансе GraphHopper: http://localhost:8989/api/info.