feat(ET-001): implement barrier blocking and footway exclusion in OSRM profile
- enduro.lua: блокировка нод barrier=gate|bollard|lift_gate|chain|cycle_barrier| motorcycle_barrier|border_control|block через mode.inaccessible (ADR-001). cattle_grid и ford остаются проезжими. - enduro.lua: highway=footway|pedestrian|steps|corridor полностью исключены из графа (early return в process_way). Эти типы удалены из highway_rate и highway_speeds, чтобы профиль был самодостаточным. - scripts/rebuild-osrm.sh: пересборка графа (extract → partition → customize) и рестарт контейнера osrm-routed. - tests/integration/test_routing_barriers.py: 7 тестов (TC-001..TC-005 + статический анализ blocked_barriers/excluded_highways). Интеграционные тесты скипаются если OSRM не доступен. Refs: ET-001
This commit is contained in:
72
scripts/rebuild-osrm.sh
Executable file
72
scripts/rebuild-osrm.sh
Executable file
@@ -0,0 +1,72 @@
|
||||
#!/usr/bin/env bash
|
||||
# rebuild-osrm.sh — пересборка OSRM-графа эндуро-профиля.
|
||||
#
|
||||
# Запускает полный цикл extract → partition → customize и рестартит роутер.
|
||||
# Требует docker, osrm-backend образ и pbf-файл в каталоге OSRM_DIR.
|
||||
#
|
||||
# Использование:
|
||||
# ./scripts/rebuild-osrm.sh
|
||||
# OSRM_DIR=/path/to/osrm OSRM_PBF=area.osm.pbf ./scripts/rebuild-osrm.sh
|
||||
#
|
||||
# Переменные окружения (со значениями по умолчанию):
|
||||
# OSRM_DIR — каталог с enduro.lua и .osm.pbf (default: /home/slin/enduro-trails/osrm)
|
||||
# OSRM_PBF — имя pbf-файла (default: enduro.osm.pbf)
|
||||
# OSRM_PROFILE — имя lua-профиля (default: enduro.lua)
|
||||
# OSRM_IMAGE — docker-образ osrm-backend (default: ghcr.io/project-osrm/osrm-backend:latest)
|
||||
# OSRM_CONTAINER — имя контейнера для рестарта (default: osrm-osrm-routed-1)
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
OSRM_DIR="${OSRM_DIR:-/home/slin/enduro-trails/osrm}"
|
||||
OSRM_PBF="${OSRM_PBF:-enduro.osm.pbf}"
|
||||
OSRM_PROFILE="${OSRM_PROFILE:-enduro.lua}"
|
||||
OSRM_IMAGE="${OSRM_IMAGE:-ghcr.io/project-osrm/osrm-backend:latest}"
|
||||
OSRM_CONTAINER="${OSRM_CONTAINER:-osrm-osrm-routed-1}"
|
||||
|
||||
if [[ ! -d "$OSRM_DIR" ]]; then
|
||||
echo "ERROR: каталог $OSRM_DIR не существует" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -f "$OSRM_DIR/$OSRM_PBF" ]]; then
|
||||
echo "ERROR: pbf-файл $OSRM_DIR/$OSRM_PBF не найден" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -f "$OSRM_DIR/$OSRM_PROFILE" ]]; then
|
||||
echo "ERROR: lua-профиль $OSRM_DIR/$OSRM_PROFILE не найден" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
OSRM_BASE="${OSRM_PBF%.osm.pbf}"
|
||||
OSRM_FILE="$OSRM_BASE.osrm"
|
||||
|
||||
echo "==> Пересборка OSRM-графа"
|
||||
echo " каталог: $OSRM_DIR"
|
||||
echo " pbf: $OSRM_PBF"
|
||||
echo " профиль: $OSRM_PROFILE"
|
||||
echo " образ: $OSRM_IMAGE"
|
||||
echo " контейнер: $OSRM_CONTAINER"
|
||||
|
||||
run_osrm() {
|
||||
docker run --rm -v "$OSRM_DIR:/data" "$OSRM_IMAGE" "$@"
|
||||
}
|
||||
|
||||
echo "==> [1/4] osrm-extract (это ~40 минут)"
|
||||
run_osrm osrm-extract -p "/data/$OSRM_PROFILE" "/data/$OSRM_PBF"
|
||||
|
||||
echo "==> [2/4] osrm-partition"
|
||||
run_osrm osrm-partition "/data/$OSRM_FILE"
|
||||
|
||||
echo "==> [3/4] osrm-customize"
|
||||
run_osrm osrm-customize "/data/$OSRM_FILE"
|
||||
|
||||
echo "==> [4/4] Рестарт контейнера $OSRM_CONTAINER"
|
||||
if docker ps -a --format '{{.Names}}' | grep -qx "$OSRM_CONTAINER"; then
|
||||
docker restart "$OSRM_CONTAINER"
|
||||
echo " контейнер перезапущен"
|
||||
else
|
||||
echo " WARNING: контейнер $OSRM_CONTAINER не найден — рестарт пропущен" >&2
|
||||
fi
|
||||
|
||||
echo "==> Готово"
|
||||
Reference in New Issue
Block a user