Gap-fill: bridge dropouts over your own ridden roads first, public BRouter only as fallback
fillGaps used the public BRouter shortest only, so a dropout where you rode a trail/track absent from OSM was left unbridged (detour >2x or noroute), even though your own track went straight through. Add opts.routeFn: the detail view now tries rideRoute (the ride-graph over your tracks) first and falls back to public BRouter only where you've never ridden. A ridden bridge is trusted as-is (no detour-too-long rejection); public routing keeps that guard. Clearer 'not bridged' message split by reason (public detour vs no road data).
This commit is contained in:
parent
3e2a6e47f7
commit
93908e3365
3 changed files with 63 additions and 10 deletions
30
docs/session-logs/2026-09-30_gapfill-ridden-router.md
Normal file
30
docs/session-logs/2026-09-30_gapfill-ridden-router.md
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
# Сессия 2026-09-30 - достройка пропусков предпочитает проеханные дороги
|
||||
|
||||
## Проблема (замечание пользователя)
|
||||
Достройка отказывалась мостить разрыв там, где реально проезжал (есть два проезда), с
|
||||
сообщением "больше нужного"/"нет данных". Причина: `GPS.fillGaps` звал только публичный BRouter
|
||||
"shortest" по OSM и ничего не знал о собственных треках пользователя. В проекте уже есть router
|
||||
по проеханным дорогам (`rideRoute`, `get_ride_graph`), которым пользуется редактор маршрутов, но
|
||||
достройка к нему не была подключена. Отсюда: где ехал по тропе/грунту (нет в OSM) - публичный
|
||||
BRouter либо в объезд > 2x, либо noroute.
|
||||
|
||||
## Фикс
|
||||
- `GPS.fillGaps(points, opts)` (gps.js): добавлен `opts.routeFn(a,b) -> {points, ridden}`; дефолт -
|
||||
публичный BRouter. Для `ridden:true` (путь по проеханным дорогам) НЕ применяется гвард "объезд
|
||||
> 2x" - проеханный путь это факт, а не крюк (`rideRoute` и так ограничивает себя 2.5x). Каждому
|
||||
разрыву в `gaps[]` пишется `ridden`.
|
||||
- Место вызова (main.js, деталь трека): `routeFn` = `rideRoute` сначала, публичный BRouter
|
||||
fallback. Так: есть моя дорога -> по ней; нет -> публичное; фэйл (в объезд / нет данных)
|
||||
остаётся, но с понятным сообщением.
|
||||
- Сообщение (drawGapPatches + панель): скипы считаются раздельно (skipped-long / skipped-noroute)
|
||||
и словами: "Не достроено: N (нет твоей проеханной дороги; K — публичный маршрут уводит в объезд,
|
||||
L — нет дорожных данных)."
|
||||
|
||||
## Оговорка
|
||||
Если участок проезжен ТОЛЬКО в этой поездке (где сам разрыв - точек нет), в ride-графе его нет,
|
||||
идёт fallback на публичный BRouter (как раньше). Ожидаемо: не ехал по другим - нельзя достроить.
|
||||
|
||||
## Проверка
|
||||
Синтаксис ок. Собрать + телефон: на воскресном 60-км нажать 🧩, убедиться, что разрывы по
|
||||
проеханным дорогам теперь достраиваются (голубым по реальной дороге), а сообщение по недостроенным
|
||||
- понятное. Отдельно: где не ехал - остаётся честный отказ.
|
||||
Loading…
Add table
Add a link
Reference in a new issue