Реализация модуля маршрутизации, Разработка модуля с Graph Hopper - Разработка модуля маршрутизации с использованием Graph Hopper

Разработка модуля с Graph Hopper

GraphHopper - это быстрый роутинговый движок, написанный на Java. К его отличительным особенностям можно отнести:

    - работу с данными OpenStreetMap - эффективное использования памяти - широкие возможности по настройке - свободная лицензия Apache

К роутинговым движкам относится программное обеспечение, позволяющее прокладывать маршрут на карте из одной точки в другую по имеющемуся графу. Существует большое количество программ данного рода, одна из наиболее известных - Open Source Routing Machine (OSRM), написанная на С++.

Так как код GraphHopper полностью открыт, то можно использовать необходимые Java-классы в своем собственном приложении. Кроме того, GraphHopper может быть использован в качестве Веб-сервиса маршрутизации, предоставляющего соответствующий HTTP API [4].

пример работы graph hopper

Рисунок 5 - Пример работы Graph Hopper

Последний из методов мы использовали для разработки нашего модуля.

Для этого необходимо было выполнить несколько шагов, а именно:

    1. Зарегистрироваться на официальном сайте https://graphhopper. com/ 2. Для использования API Направления необходимо получить ключ API. Получить его можно бесплатно после регистрации
получение api-ключа

Рисунок 6 - Получение API-ключа

    3. Скачать с репозитория GitHab zip-файлы, для локального использования 4. Прочитать документацию для API Routing 5. Количество лимитов на запросы ограничено, чтобы увеличить лимиты запроса для производства необходимо оплатить онлайн в течение нескольких минут с помощью кредитной карты. 6. После получения API-ключа присваиваем его переменной key и получаем первый запрос [2]:

"https://graphhopper. com/api/1/route? point=51.131108%2C12.414551&;point=48.224673%2C3.867187&;vehicle=car&;locale=de&;debug=true&;points_encoded=false&;key=[YOUR_KEY]"

Таблица 1 - Параметры маршрутизации API

Параметр

По умолчанию

Описание

Point

-

Спецификация несколько точек, для которых должен быть вычислен маршрут. Порядок важен. Укажите, по крайней мере две точки. Максимальное количество зависит от выбранного пакета.

Locale

En

Языковой результат. Например, pt_PT для португальском или де ля немецкого

Optimize

False

Если false порядок расположения будет идентичен порядку точечных параметров. Если у вас есть более 2 точек вы можете установить этот параметр, чтобы оптимизировать true. Т. е. дополнительная точка, через которую строится маршрут.

Instructions

True

Если должна быть рассчитана и возвращена навигационная инструкция.

Vehicle

Car

Транспортное средство, такое как автомобиль, велосипед, пешком.

Points_encoded

True

Если false массив GeoJSON в точке возвращается. Если true полученный маршрут будет закодирован. Вам понадобится специальная обработка для декодирования этой строки на стороне клиента, увидеть Java или JavaScript код.

Calc_points

True

Если должна быть рассчитана на все точки на маршруте. Иногда только необходимо расстояние и время.

Debug

False

Если true, то будет вывод будет отформатирован.

Таблица 2 - Параметры геокодирования

Результат JSON

JSON path/attribute

Description

Paths

Массив возможных путей

Paths[0].distance

Общая протяженность маршрута, в метрах

Paths[0].time

Общее время в пути, в минутах, секундах

Paths[0].bbox

Ограничительные рамки маршрута, формат:

MinLon, minLat, maxLon, maxLat

Paths[0].instructions

Содержит информацию о командах для данного маршрута. Последняя инструкция всегда принимает 0 мс и 0meter.

Paths[0].instructions[0].text

Описание того, что пользователь должен сделать для того, чтобы следить за маршрутом. Язык зависит от локального параметра.

Paths[0].instructions[0].distance

Расстояние для этой команды, в метре

Paths[0].instructions[0].time

Продолжительность для этой команды, в мс

Paths[0].instructions[0].interval

Массив, содержащий первый и последний индекс (по отношению к путям [0] .points) точек для этой команды. Это полезно знать, какая часть маршрута действительна.

Paths[0].instructions[0].exit_number

[optional] Only available for USE_ROUNDABOUT instructions. The count of exits at which the route leaves the roundabout.

пример выходных данных

Рисунок 7 - Пример выходных данных

В каждой системе маршрутизации, неотъемлемой частью является геокодирование. Геокодирование есть процесс, преобразующий описание местоположения (например, координаты, адрес или название места) в местоположение на поверхности Земли. Геокодировать можно, вводя описание одного местоположения за один раз или вводя описание сразу нескольких местоположений в таблице.

пример результата геокодирования

Рисунок 8 - Пример результата геокодирования

В результате геокодирования получаются географические объекты с атрибутами, которые можно использовать для составления карт, построения маршрутов или пространственного анализа. С помощью геокодирования можно быстро находить различные виды местоположений. Естественно что и Graph Hopper не обходится без этого.

Пример ответа геокодирования (ниже представлена таблица описания URL - параметров):

Https://graphhopper. com/api/1/geocode? q=berlin&;locale=de&;debug=true&;key=[YOUR_KEY]

Таблица 3 - Параметры геокодирования

Parameter

Default

Description

Q

-

Укажите адрес

Locale

En

Показать результаты поиска на указанном языке. Доступны: французский (FR), английский (EN), немецкий (DE), русский - по умолчанию-EN

Limit

10

Желаемое количество результатов (автоподбор)

Debug

False

Если true, то результат будет выведен.

Point

-

Смещение расположения в формате "широта, долгота", например, точка = 45.93272,11.58803

Для того, чтобы использовать "движок" Graph Hopper нам необходимо было изучить все стороны, вплоть до оформления графического интерфейса. Изучив все файлы css и js, мы изменили внешний вид и оставили необходимую функциональность, при этом поменяв базовую карту на OSM.

результат преобразований

Рисунок 8 - Результат преобразований

Похожие статьи




Реализация модуля маршрутизации, Разработка модуля с Graph Hopper - Разработка модуля маршрутизации с использованием Graph Hopper

Предыдущая | Следующая