Found in desktop testing: saving a built route showed 'Маршрут пуст' and dropped to the list — addRoute returned the INSERT lastInsertId, an i64 the SQL plugin corrupts by ±1, so showRouteDetail opened a non-existent id. Re-read the id via CAST(id AS TEXT) (same guard importGpxSession uses). Session log: desktop verification of all 6 fixes.
4.8 KiB
4.8 KiB
Сессия 2026-09-11 — редактор маршрутов и достройка: 6 правок
Контекст
После первой версии планировщика и достройки пользователь на телефоне поймал 6 проблем.
Работал по утверждённому плану docs/plans/2026-09-11-route-editor-gapfill-fixes.md.
Согласовано: тап по линии = вставить точку (долгий тап = дорога/прямая) с широкой зоной
попадания; в редакторе показывать оковку с уклоном как в детали; достройка мостит только
реальные длинные потери GPS.
Разбор трека 2026-09-08 (session 1788878075973, 14.67 км, 1648 точек, забрал копию БД с телефона через run-as): сэмплинг <5с, но порог dt>30с/хорда>60м давал 15 «пропусков», часть — обычная езда (три по 30с/89м = 10 км/ч), отсюда объезды и «+0.00 км».
Сделано
- Тумблеры день/ночь, уклон/высота и кнопка «моё место» (◎) в редакторе — переиспользованы
addDarkMapControl, паттерныsdColorCtl/locBtn. - Достройка (
GPS.fillGaps): порог по умолчанию dt>60с, хорда>150м; пропуск, если дорога2× хорды (крюк) или добавляет < 40м (дорога ≈ прямая). Статус
skipped-nogain— не рисуется и не считается «не удалось». - Низ редактора: своя разметка
.re-bottom— подсказка сверху, кнопки рядом, «Отмена» ниже (не трогая.rec-bottomэкрана записи). - Вставка точки: тап по линии (широкая невидимая полилиния-цель,
pointer-events:stroke), долгий тап — дорога/прямая. - Хранение:
routes.waypoints_json{waypoints, legMode}. Сохраняются и опорные (5-6, для правки), и плотная геометрия. Открытие на правку грузит опорные; список показывает их число. - Оковка+уклон построенного маршрута: в
routeDirtyсохраняются высотыeleиз BRouter (раньше отбрасывались) →drawRoutePolylineрисует оковку и в редакторе, и в детали.drawRoutePolyline: прямые отрезки без высот — только тонкой линией.
Проверка (десктоп Xvfb :99 + домашний RouteServer, скрины)
- Редактор: 3 точки по Новочеркасску → маршрут рисуется оковкой с уклоном (зелёный→красный) + тонкой линией, как в детали (#6). Тумблер уклон/высота (∡→⛰) переключает раскраску (#1). Тап по линии вставил точку (4-я, маршрут перестроился) — легко попал (#4). Низ: подсказка сверху, кнопки рядом, «Отмена» ниже (#3).
- Сохранение: в БД points_json = 61 точка с ele + waypoints_json = 4 опорные; список показал «4 тчк · ▲» (#5). Деталь маршрута — оковка+уклон+профиль высоты, как импорт (#6).
- Баг, найденный тестом: сохранение показывало «Маршрут пуст» —
addRouteвозвращалlastInsertId(i64 портится SQL-плагином ±1). Исправлено: id перечитывается черезCAST(id AS TEXT)(как вimportGpxSession). После фикса сохранение ведёт прямо в деталь. - Достройка (#2): на 06-22 старый порог давал 4 пропуска, новый (dt>60/хорда>150 + пропуск крюков и «нулевого выигрыша») — 2 реальных длинных дропаута (+1.64 км), маргинальные отсеяны.
- Экран записи (
.rec-bottom) не тронут. Тестовые маршруты из десктопной БД убраны.
Дальше
- На теле встроенным движком офлайн:
./build.sh android -d -i. Проверить тач-жесты (тап-вставка, долгий тап — дорога/прямая) и достройку на реальных треках (09-08 и др.).