Развертывание GraphHopper в качестве веб-сервиса для построения маршрутов

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
Эта страница является черновиком статьи.


Рассмотрен процесс развертывания 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 предназначен для быстрого запуска Веб-приложений непосредственно из командной строки и не требует установки полноценного Веб-сервера.

  1. Для дальнейшей работы создадим в домашней директории каталог graphhopper (все файлы, с которыми мы будем работать, должны быть размещены здесь). В Linux:
    mkdir ~/graphhopper
  2. Воспользуемся версией Jetty Runner 9.1.2 jetty-runner-9.1.2.v20140210.jar. Поместим его в директорию graphhopper. Отметим, что для запуска Jetty Runner данной версии в системе должна быть установлена JRE7 или JRE8. Если же у вас нет возможности обновить JRE, то для запуска Jetty Runner на JRE6 можно попробовать воспользоваться старыми версиями Jetty Runner.
  3. На сегодняшний день последняя стабильная версия GraphHopper - 0.2, master-версия имеет ряд проблем, например, неправильное указание направлений в описании маршрута #171 и поэтому мы будем работать именно с версией 0.2. Скачиваем graphhopper-web-0.2.war.
  4. Скачиваем пример конфигурационного файла GraphHopper config-example.properties.
  5. Скачиваем данные проекта OpenStreetMap на основе которых будет осуществляться роутинг. Для примере возьмём Москву.
  6. Запускаем 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/, вы увидите следующую картину:

Веб-приложение GraphHopper

По данному адресу (http://localhost:8989/) расположено Веб-приложение, с помощью которого можно указать начальную и конечную точки и просмотреть получившийся маршрут, а также его текстовое описание с указанием того куда и через сколько метров следует поворачивать. В некоторых случаях достаточно просто вставить ссылку на это приложение в свою страницу и тем самым предоставить клиентам возможность построения маршрутов.

Если же вы не хотите использовать Web-приложение GraphHopper, а только HTTP API, то вам следует ознакомиться со следующей документацией. Пример 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.