GraphHopper Routing Engine
Сервис маршрутизации и изохрон на базе OpenStreetMap.
Быстрый старт
1. Скачать OSM данные
# Россия (~2.5 GB)
cd data
wget https://download.geofabrik.de/russia-latest.osm.pbf
# Или СНГ (все страны)
# wget https://download.geofabrik.de/russia-latest.osm.pbf
# wget https://download.geofabrik.de/asia/kazakhstan-latest.osm.pbf
# wget https://download.geofabrik.de/europe/belarus-latest.osm.pbf
# ... и объединить через osmium-tool
2. Запустить
docker compose up -d
Первый запуск занимает 10-30 минут (построение графа).
3. Проверить
curl http://localhost:8989/health
API Endpoints
Routing (маршрут)
curl "http://localhost:8989/route?point=55.75,37.62&point=59.93,30.31&profile=car"
Isochrone (изохрона)
# Изохрона 4 часа от Москвы
curl "http://localhost:8989/isochrone?point=55.75,37.62&time_limit=14400&profile=car"
# 3 изохроны: 2, 4, 6 часов
curl "http://localhost:8989/isochrone?point=55.75,37.62&time_limit=21600&buckets=3&profile=car"
# Обратная изохрона (откуда можно доехать)
curl "http://localhost:8989/isochrone?point=55.75,37.62&time_limit=14400&profile=car&reverse_flow=true"
Параметры изохрон
| Параметр | Описание | Пример |
|---|---|---|
| point | Центр изохроны (lat,lon) | 55.75,37.62 |
| time_limit | Время в секундах | 14400 (4 часа) |
| distance_limit | Расстояние в метрах | 500000 (500 км) |
| profile | Профиль маршрутизации | car, truck |
| buckets | Количество изохрон | 3 |
| reverse_flow | Обратное направление | true |
Требования к памяти
| Регион | OSM размер | RAM для импорта | RAM для работы |
|---|---|---|---|
| Россия | ~2.5 GB | 8-12 GB | 4-6 GB |
| Европа | ~25 GB | 32-48 GB | 16-24 GB |
| Весь мир | ~70 GB | 64-96 GB | 32-48 GB |
Структура папок
graphhopper/
├── docker-compose.yml
├── config.yml
├── README.md
└── data/
├── russia-latest.osm.pbf # OSM данные (скачать)
└── graph-cache/ # Построенный граф (создается автоматически)
Обновление данных
# Скачать свежие данные
cd data
wget -N https://download.geofabrik.de/russia-latest.osm.pbf
# Удалить старый граф и перезапустить
rm -rf graph-cache
docker compose restart graphhopper
Интеграция с фронтендом
// composables/useIsochrone.ts
export const useIsochrone = () => {
const getIsochrone = async (
lat: number,
lng: number,
timeMinutes: number,
profile: 'car' | 'truck' = 'car'
) => {
const response = await fetch(
`${GRAPHHOPPER_URL}/isochrone?point=${lat},${lng}&time_limit=${timeMinutes * 60}&profile=${profile}`
)
return response.json() // GeoJSON polygon
}
return { getIsochrone }
}