Если вы работали с геоданными больше пяти минут, вы знаете эту боль. Нужно построить маршрут от точки А до точки Б, и вроде бы задача тривиальная. Но потом приходит продакт-менеджер и говорит: “А можно ещё учитывать пробки? И высоту? И чтобы для грузовиков с ограничением по высоте? И ещё матрицу расстояний для 10 000 точек за раз?” И вы сидите перед выбором: OSRM — быстрый, но требует 300+ GB RAM для планеты и не гибкий, Valhalla — лёгкий в памяти, но медленный на длинных маршрутах, Google Maps API — дорого, закрыто. Мы прошли через это. И нашли GraphHopper.
GraphHopper — open-source маршрутизатор на Java, работающий с данными OpenStreetMap. Начинался как пэт проект Питера Кархенбергера в 2012 году, вырос в решение, которое сейчас крутит маршруты на openstreetmap.org и в куче коммерческих проектов.
- Профили: car, bike, foot, scooter, delivery truck, cargo bike — и кастомные через Custom Model API

Кастомные профили
Вот где GraphHopper выигрывает у конкурентов. Представьте: вам нужен маршрут для эвакуатора с ограничением по ширине 2.5 метра, который избегает мостов с грузоподъёмностью менее 5 тонн. В OSRM вам придётся писать Lua-скрипт и пересобирать граф. В GraphHopper — просто JSON в запросе:
JSON
{
"profile": "truck",
"custom_model": {
"priority": [
{ "if": "max_width < 2.5", "multiply_by": "0" },
{ "if": "max_weight < 5", "multiply_by": "0" },
{ "if": "road_class == PRIMARY", "multiply_by": "1.2" }
]
}
}
С версии 10.0 появились блоки if-else-if, позволяющие писать сложные условия без дублирования.
GraphHopper поддерживает трёхмерные маршруты через интеграцию с SRTM (Shuttle Radar Topography Mission) и другими DEM-источниками, а также типы покрытий. Данные о высоте и покрытиях влияют на:
- Расчёт времени в пути — подъём замедляет, спуск ускоряет (для пешеходов и велосипедов)
- Потребление энергии — критично для электротранспорта
- Визуализация — профиль высоты на карте

GraphHopper предлагает облачное API. Лимиты бесплатного tier'а: 5000 точек на запрос, 500 credits/день (одна точка в матрице = один credit). Сервис поддерживает кириллицу, понимает сокращения (ул., пр-т), работает с дублирующимися названиями (указывает регион/город). Бесплатных 500 credits в день хватает для тестирования и небольших pet-проектов. Не забудьте включить elevation=true — видеть профиль высоты в ответе API без дополнительных затрат всегда приятно.
Для российских реалий — когда нужно работать с ограниченными бюджетами, но строить enterprise-логистику — это лучший выбор. Особенно если у вас есть команда, которая может поддерживать Java-приложение.