7.3 KiB
2026-10-26 - Точность высот/уклона в предпросмотре + безопасность маршрутов (brouter)
Работали по утверждённому плану docs/plans/ (финальный вариант - см. ниже «План»). Пять пунктов
по предпросмотру маршрута и маршрутизации. Телефон в ходе работы отключился - часть проверок на
устройстве ждёт переподключения (отмечено).
Что сделано (по пунктам плана)
П.2 - направленная раскраска спусков (коммит 27c60a4)
routeSlopeColor стала знакочувствительной: подъём - тёплый веер (green->yellow->red->brown->black),
спуск по направлению движения - холодный (green->cyan->blue->navy). Легенда показывает обе шкалы.
Один общий routeSlopeColor/drawRoutePolyline -> чинит везде (превью, деталь трека, редактор,
оверлей на записи). Проверка на устройстве: ЖДЁТ (нужен реальный маршрут с рельефом).
П.1 - уклон по дистанционному окну (коммит 80ddff9)
GPS.routeElevStats: grades[i] теперь центральная разность высоты по РАССТОЯНИЮ окном ~30м
(config gradeWindowM), а не между соседними точками. Ступенька ячейки DEM (30м) размазывается по
ячейке - уходит ложный крутой уклон на одном коротком сегменте. maxGrade - по тем же.
«Не рисует где есть» - предел разрешения SRTM 30м, не чинится без более точного DEM (улучшает П.5).
Проверка: ЖДЁТ устройство.
П.4 - объезд ↪ только при реальном затыке впереди (коммит ac37f36)
rejoinReroute: (а) прогресс = ближайшая точка маршрута к позиции; (б) направление по компасу; (в)
объезд строится ТОЛЬКО если nogo реально на маршруте впереди в окне ~2.5км, иначе toast «впереди
затыка нет». Цель - первая точка за nogo + 300м. Раньше строил всегда и прыгал «к первому вейпоинту»
(глобально ближайшая точка на петле). Проверка: ЖДЁТ устройство (поставить nogo впереди/без nogo).
П.5 - поправка высот по проездам: база SRTM + медиана как сдвиг (коммит 0d5a598)
Rust get_elev_correction(minPasses): по ячейке ~20м медиана (altitude_gps_m − altitude_srtm_m)
по >= N разным сессиям-проездам. SRTM остаётся базой; это только сдвиг вверх/вниз там, где катал.
JS applyRiddenElevCorrection применяет сглаженную дельту к высотам маршрута в превью
(showRouteDetail), недеструктивно (копия; нет покрытия -> без изменений). Порог проездов -
localStorage baldav_elev_corr_passes (деф. 3). Проверка: ЖДЁТ (ячейки с многими проездами).
П.3 - brouter: ИЗБЕГАТЬ (Part A, коммит 85aa87e). Part B - следующим заходом.
Профиль trekking.brf (asset + staging синхронно): штраф на броды (ford=yes|stepping_stones,
node и way), tracktype=grade5, trail_visibility=bad|horrible|no; тумблер %allow_adventure%
(деф. false = избегать). Теги подтверждены в lookups.dat. Синтаксис сверен с грамматикой BRouter,
но локального brouter-jar нет -> ПРОВЕРКА СИНТАКСИСА только маршрутизацией на устройстве (ошибка
профиля = routeBrouter бросает ошибку = безопасный отказ, не кривой маршрут).
П.3 Part B - СДЕЛАНО (коммит 109879a) + фикс avoidance
Спайк пройден: brouter отдаёт теги путей. В geojson (format=geojson) в properties.messages
есть колонки WayTags/NodeTags на сегмент; on-device btools (brouter-1.6.3-all.jar) имеет
formatAsGeoJson. Реализовано:
brouter_route(Rust) +routeBrouter(Kotlin) - параметрformat; приgeojsonвозвращаетсяformatAsGeoJson(GPX-путь не тронут).BRouter.routeGeoJson+GPS.parseRouteGeoJson- геометрия + опасности (ford / grade5|плохая тропа / паром) из тегов.- Редактор маршрута: дорожные ноги строятся через geojson, броды (cyan) и грунт/тропы (orange) помечаются на карте + счётчик «⚠ брод/грунт»; тумблер «Броды: избегать/разрешить» (trekking / trekking-adventure) + ре-роутинг.
- Профиль
trekking-adventure.brf(allow_adventure=true), asset+staging+стенд .18.
Фикс avoidance (коммит 640429a): штраф за брод сидел в way-initialcost и НЕ менял cost
(проверено на .18: avoid и adventure давали одинаковый cost). Перенёс в costfactor.
Проверено на домашнем портале 192.168.1.18 (реальный брод 47.5387,40.3164):
trekking(avoid): 6199м в обход, fords=0;trekking-adventure: 1418м через брод, fords=1.GPS.parseRouteGeoJsonна реальном ответе .18: 42 точки, 1 брод на 47.53867,40.31637 (твой).- Профиль ПАРСИТСЯ (синтаксис валиден). Профили задеплоены на .18 (бэкап trekking.brf.bak-*).
НЕ проверено (телефон отключился)
- На УСТРОЙСТВЕ: П.1/П.2/П.4/П.5 + редактор (маркеры опасности, тумблер adventure) + on-device geojson-путь routeBrouter. Собрано (build 0.1.531), компилируется. Ставить при переподключении.
- 2-й брод (47.4926,39.8610) - тестовые точки его не пересекли, тест неинформативен (не провал).
Критичные места (для продолжения)
frontend/js/gps.js:routeElevStats(grades окно),filterAndSmoothAlt.frontend/js/main.js:routeSlopeColor/ROUTE_SLOPE_UP/ROUTE_SLOPE_DOWN/slopeLegendHtml,drawRoutePolyline,rejoinReroute,loadElevCorrection/applyRiddenElevCorrection.src-tauri/src/lib.rs:get_elev_correction..../assets/brouter/profiles2/trekking.brf(+tools/brouter-web-staging/profiles2/trekking.brf).MainActivity.ktrouteBrouter(для Part B - messageList).