Обсудить в форуме Комментариев 7Редактировать в вики
Рассмотрен процесс развертывания GraphHopper в качестве Веб-сервиса.
GraphHopper - это быстрый роутинговый движок, написанный на Java. К его отличительным особенностям можно отнести:
К роутинговым движкам относится программное обеспечение, позволяющее прокладывать маршрут на карте из одной точки в другую по имеющемуся графу. Существует большое количество программ данного рода, одна из наиболее известных - Open Source Routing Machine (OSRM), написанная на С++.
Так как код GraphHopper полностью открыт, то вы можете использовать необходимые Java-классы в своём собственном приложении. Кроме того, GraphHopper может быть использован в качестве Веб-сервиса маршрутизации, предоставляющего соответствующий HTTP API. Именно процедуре развертывания GraphHopper в качестве сервиса маршрутизации и посвящена в данная статья. Пример Веб-приложения, использующего GraphHopper в качестве роутингового движка можно посмотреть тут. Отметим, что данное приложение вы получаете автоматически при разворачивании GraphHopper в качестве Веб-сервиса.
Для того, чтобы использовать GraphHopper в качестве Веб-сервиса можно самостоятельно собрать собственный WAR-файл либо воспользоваться уже готовой сборкой. Мы будем использовать как раз готовую сборку. К первому варианту следует прибегать в тех случаях, если готовая сборка вас чем-то не устраивает и вы хотите что-то в ней изменить. Подробнее про сборку GraphHopper тут.
Для развертывания WAR-файла нам потребуется воспользоваться каким-либо контейнером сервлетов. Мы рассмотрим два варианта: развертывание GraphHopper: с помощью Jetty Runner и Jetty. Первый вариант следует использовать, если вы хотите "по-быстрому" оценить, что из себя представляет GraphHopeer. Второй же вариант подходит для промышленного использования.
Jetty Runner предназначен для быстрого запуска Веб-приложений непосредственно из командной строки и не требует установки полноценного Веб-сервера.
mkdir ~/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, то вам следует ознакомиться со следующей документацией. Пример 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.
Jetty — это свободный контейнер сервлетов, написанный полностью на Java. Может использоваться как HTTP-сервер или в паре со специализированным HTTP-сервером. Если у вас еще не установлен Jetty, то установите его. Дальнейшие инструкции предполагают, что установлен Jetty версии 9, который слушает порт 8180.
# where to find osm/pbf file osmreader.osm=/usr/local/jetty/webapps/RU-MOS-140322.osm.pbf
sudo service jetty restartПосле того как вы перезапустили Jetty, в директории webapps будет создана новая директория, содержащая роутинговый граф, в нашем случае это будет директория RU-MOS-140322.osm-gh. Если вы сразу же после перезапуска Jetty попытаетесь перейти по адресу http://localhost:8180/graphhopper/ (либо Jetty вообще не запустился), то ничего не увидите. Нужно подождать некоторое время, пока граф построится (директория RU-MOS-140322.osm-gh будет непустой), либо если Jetty не запустился, то тоже подождать и запустить его еще раз.
GraphHopper API offline? http://localhost:8180Причина возникновения этого сообщения заключается в том, что Веб-приложение ожидает, что HTTP API доступно по адресу http://localhost:8180, а не по http://localhost:8180/graphhopper/. Данную проблему можно решить двумя путями: либо взять исходники GraphHopper, отредактировать там путь и собрать собственный WAR-файл, либо настроить Jetty таким образом, чтобы GraphHopper открывался по адресу http://localhost:8180. Этим способом мы и воспользуемся: просто переименуйте файл graphhopper.war в root.war и перезапустите Jetty.
Обсудить в форуме Комментариев 7Редактировать в вики
Последнее обновление: 2015-01-11 06:59
Дата создания: 23.03.2014
Автор(ы): Denis Rykov
© GIS-Lab и авторы, 2002-2021. При использовании материалов сайта, ссылка на GIS-Lab и авторов обязательна. Содержание материалов - ответственность авторов. (подробнее).