4.2 KiB
4.2 KiB
type, work_item_id, title, version, status, created_at, authors
| type | work_item_id | title | version | status | created_at | authors | |
|---|---|---|---|---|---|---|---|
| trz | ET-001 | ТЗ: Исключить шлагбаумы и тротуары из OSRM | 1 | approved | 2026-05-15 |
|
Техническое задание — ET-001
1. Что менять
Файл: OSRM профиль enduro.lua
Расположение на сервере: /home/slin/enduro-trails/osrm/enduro.lua
В репо: infra/osrm/enduro.lua (скопировать текущий + внести изменения)
Изменение 1: process_node — блокировка шлагбаумов
В функции process_node заменить текущую обработку barriers:
-- Блокируемые типы препятствий (полный запрет проезда)
local blocked_barriers = {
gate = true,
bollard = true,
lift_gate = true,
chain = true,
cycle_barrier = true,
motorcycle_barrier = true,
border_control = true,
block = true,
}
function process_node(profile, node, result)
local barrier = node:get_value_by_key("barrier")
if barrier and blocked_barriers[barrier] then
result.barrier = true
result.forward_mode = mode.inaccessible
result.backward_mode = mode.inaccessible
return
end
end
Изменение 2: process_way — исключение тротуаров
В начале функции process_way, после получения highway, добавить:
-- Исключаемые типы дорог (тротуары, пешеходные зоны)
local excluded_highways = {
footway = true,
pedestrian = true,
steps = true,
corridor = true,
}
-- В process_way, после local highway = way:get_value_by_key("highway"):
if excluded_highways[highway] then return end
Также удалить footway, pedestrian, steps из таблицы highway_rate (если есть).
2. Пересборка графа
После изменения lua-профиля — пересобрать граф:
cd /home/slin/enduro-trails/osrm
docker run --rm -v $(pwd):/data ghcr.io/project-osrm/osrm-backend:latest osrm-extract -p /data/enduro.lua /data/enduro.osm.pbf
docker run --rm -v $(pwd):/data ghcr.io/project-osrm/osrm-backend:latest osrm-partition /data/enduro.osrm
docker run --rm -v $(pwd):/data ghcr.io/project-osrm/osrm-backend:latest osrm-customize /data/enduro.osrm
docker restart osrm-osrm-routed-1
Время: ~40 мин (extract) + ~5 мин (partition + customize).
3. Что добавить в репо
infra/osrm/enduro.lua— обновлённый профильscripts/rebuild-osrm.sh— скрипт пересборки графаtests/integration/test_routing_barriers.py— тесты
4. Тесты
Unit/Integration тесты (pytest + httpx)
# tests/integration/test_routing_barriers.py
import pytest
from httpx import AsyncClient, ASGITransport
from src.api.main import app
OSRM_URL = "http://172.22.0.1:5559"
@pytest.mark.asyncio
async def test_route_avoids_barrier():
"""Маршрут через точку с известным шлагбаумом должен обходить его"""
# Точка с шлагбаумом: 55.7558, 37.6173 (пример)
# Тест проверяет что маршрут не проходит через эту ноду
pass # Architect определит конкретные координаты
@pytest.mark.asyncio
async def test_route_no_footway():
"""Маршрут в городе не должен проходить по тротуарам"""
pass # Architect определит конкретные координаты
@pytest.mark.asyncio
async def test_route_allows_cattle_grid():
"""Маршрут через cattle_grid должен работать (не заблокирован)"""
pass
5. Ограничения
- НЕ менять веса существующих дорог (только добавить блокировку)
- НЕ трогать scenic/link/recon логику
- cattle_grid и ford — НЕ блокировать
- Пересборка графа — отдельный ручной шаг (не в CI)