# GraphHopper Routing Engine

Сервис маршрутизации и изохрон на базе OpenStreetMap.

## Быстрый старт

### 1. Скачать OSM данные

```bash
# Россия (~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. Запустить

```bash
docker compose up -d
```

Первый запуск занимает 10-30 минут (построение графа).

### 3. Проверить

```bash
curl http://localhost:8989/health
```

## API Endpoints

### Routing (маршрут)
```bash
curl "http://localhost:8989/route?point=55.75,37.62&point=59.93,30.31&profile=car"
```

### Isochrone (изохрона)
```bash
# Изохрона 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/           # Построенный граф (создается автоматически)
```

## Обновление данных

```bash
# Скачать свежие данные
cd data
wget -N https://download.geofabrik.de/russia-latest.osm.pbf

# Удалить старый граф и перезапустить
rm -rf graph-cache
docker compose restart graphhopper
```

## Интеграция с фронтендом

```typescript
// 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 }
}
```
