Docs: brouter Part B (show fords + adventure opt-in) done, verified on home portal
This commit is contained in:
parent
d25cb0de49
commit
e12e19132d
2 changed files with 26 additions and 8 deletions
|
|
@ -36,7 +36,7 @@
|
|||
- **Сохранённые маршруты** — импорт GPX-маршрутов, нарисованных заранее (например, в конструкторе Яндекс.Карт: формат `<rtept>`), выбор активного, наложение цветной линией поверх карты во время записи И на экране просмотра прошлого трека — для визуальной навигации. Управление на отдельной странице (импорт/переименование/цвет/удаление, один активный за раз), переключение линии кнопкой-тогглом. Цвета «проезженных дорог» настраиваются раздельно для вело/пеших/бега.
|
||||
- **Высоты маршрута (рельеф до поездки)** — экран предпросмотра маршрута (тап по названию): профиль высоты (крутые участки красным), длина/набор/сброс/макс. уклон, тап по точке — высота и уклон, разворот карты на весь экран. Топографическая обводка линии с тогглом **уклон/высота**: уклон по НАПРАВЛЕНИЮ движения, полосами по 1%: подъём зелёный→жёлтый→красный→коричневый→чёрный, спуск зелёный→cyan→синий→navy (≥10% крайний), или гипсометрия по высоте (зелёный→жёлтый→коричневый). Обводка и тоггл доступны и в оверлее на карте записанного трека и во время записи; маршрут рисуется ПОД треком. Высоты (`<ele>` из GPX или онлайн) тянутся по цепочке: **GPXZ** (Copernicus GLO-30, точнее для уклонов; ключ в GPS-настройках, хранится только на устройстве) → open-elevation → open-meteo → OpenTopoData (без ключа). Калории пересчитываются по сглаженным точкам; уклон считается по дистанционному окну ~30м (одна ячейка DEM), чтобы ступенька SRTM не давала ложный крутой уклон на одном коротком сегменте. **Поправка высот по проездам**: где катал >=N раз, SRTM-высота в превью сдвигается вверх/вниз на медиану (измеренная−SRTM) по ячейкам ~20м (SRTM остаётся базой, недеструктивно; `get_elev_correction`).
|
||||
- **Редактор маршрутов** — создание («Новый маршрут») и правка сохранённого маршрута прямо в приложении: тап по карте — добавить точку в конец, **тап по линии — вставить точку** (широкая зона попадания), долгий тап по линии — переключить отрезок дорога/прямая, тащить точку — двигать, тап по точке — удалить. Роутинг **по-сегментный**: каждый отрезок между опорными точками отдельно либо по дорогам (BRouter, профиль trekking, высоты из BRouter), либо прямой; по дорогам по умолчанию, где дороги/сегментов нет — молча прямая; кнопка **«🚲 По дорогам»** задаёт режим сразу всем. Маршрут в редакторе рисуется **оковкой с раскраской уклон/высота** как в детали; тумблеры день/ночь, уклон/высота и кнопка «моё место» на карте. Сохраняются и **опорные точки** (5-6, для правки — при повторном открытии столько же), и плотная дорожная геометрия с высотами (для показа и профиля уклона).
|
||||
- **Оффлайн-роутинг (BRouter)** — движок BRouter встроен в приложение (Android): маршруты строятся по дорогам без сети, сегменты `.rd5` региона качаются с домашнего зеркала прямо в приложении (экран дорог → «Сегменты»). Используется в редакторе маршрутов («По дорогам») и для заполнения GPS-пропусков. На десктопе/дома движка нет — те же вызовы уходят на домашний BRouter-RouteServer по HTTP. Профиль `trekking` по умолчанию **избегает бродов** (`ford`), заброшенных грунтовок (`tracktype=grade5`) и троп с плохой видимостью (`trail_visibility=bad|horrible|no`); тумблер `%allow_adventure%` (деф. false). Показ опасных участков на превью + опт-ин «испытать удачу» — в работе.
|
||||
- **Оффлайн-роутинг (BRouter)** — движок BRouter встроен в приложение (Android): маршруты строятся по дорогам без сети, сегменты `.rd5` региона качаются с домашнего зеркала прямо в приложении (экран дорог → «Сегменты»). Используется в редакторе маршрутов («По дорогам») и для заполнения GPS-пропусков. На десктопе/дома движка нет — те же вызовы уходят на домашний BRouter-RouteServer по HTTP. Профиль `trekking` по умолчанию **избегает бродов** (`ford`), заброшенных грунтовок (`tracktype=grade5`) и троп с плохой видимостью (`trail_visibility=bad|horrible|no`) - штраф в costfactor. В редакторе тумблер **«Броды: избегать/разрешить»** переключает на `trekking-adventure` (allow_adventure). **Показ опасности**: дорожные ноги строятся через geojson (`format=geojson` даёт `WayTags`/`NodeTags` на сегмент; on-device `formatAsGeoJson`), броды и грунт/тропы помечаются на карте + счётчик «⚠ брод/грунт» - видно ДО поездки (`GPS.parseRouteGeoJson`).
|
||||
- **Заполнение GPS-пропусков по дороге** — на детали трека кнопка **«🧩»** прокладывает дорожный путь (BRouter, профиль shortest) через каждый GPS-дропаут (разрыв по времени + реальная хорда) и показывает **предпросмотр только достроенных пропусков** (голубым, с бело-чёрной оковкой; недостроенные — красным пунктиром) плюс панель «Достроено N (+X км), M не удалось» с кнопками **Сохранить/Отмена**. Сохранение — **обратимый патч на месте**: достроенные точки помечаются `estimated` и добавляются в трек (оригинал цел), статистика пересчитывается; повторный тап предлагает **«Убрать достройку»** (удаляет только достроенное). Достраиваются только реальные длинные потери сигнала (по умолчанию разрыв > 60с и хорда > 150м); пропуск не достраивается, если дорога заметно длиннее хорды (крюк, > 2×) или почти совпадает с прямой (мостить нечего) — чтобы не перерисовывать нормальные участки объездами.
|
||||
- **Непроезжие места (nogo)** — красные круги, которые роутинг ОБЪЕЗЖАЕТ. Ставятся кнопкой **⛔**: в планировщике — тапом по карте/линии, на карте записи — «здесь нет проезда» (текущее место). Показываются на картах планировщика, записи и детали трека; тап по кругу — убрать. Избегание работает и через домашний RouteServer, и встроенным движком офлайн (BRouter nogopoints). Web-BRouter умеет nogo сам.
|
||||
- **Объезд с возвратом на маршрут (на ходу)** — на карте записи кнопка **«↪»**: если активный маршрут ведёт через непроезжее место, строит от текущей позиции объезд обратно НА маршрут за местом затыка (отступ ~1.5 км вперёд, растёт при неудаче до конца маршрута), избегая nogo и разворота на 180° (учитывает курс). Показывается ярким навигационным оверлеем (не меняет сохранённый маршрут и не прерывает запись); долгий тап по кнопке убирает оверлей.
|
||||
|
|
|
|||
|
|
@ -39,13 +39,31 @@ node и way), `tracktype=grade5`, `trail_visibility=bad|horrible|no`; тумбл
|
|||
но локального brouter-jar нет -> ПРОВЕРКА СИНТАКСИСА только маршрутизацией на устройстве (ошибка
|
||||
профиля = routeBrouter бросает ошибку = безопасный отказ, не кривой маршрут).
|
||||
|
||||
## НЕ сделано (объявлено явно)
|
||||
- **П.3 Part B** - показать опасность на превью + опция «испытать удачу»: нужен (1) спайк, отдаёт ли
|
||||
btools `OsmTrack.messageList` теги путей рядом с GPX в `routeBrouter`; (2) если да - пометить
|
||||
ford/вода/крутой спуск на превью + счётчик; (3) отдельный профиль `trekking-adventure.brf`
|
||||
(allow_adventure=true) + тумблер в редакторе (профиль выбирается по ИМЕНИ файла, параметры в
|
||||
btools рантаймом не пробрасываются). Пока включён только default-avoid.
|
||||
- Все проверки на устройстве (телефон отключился): П.1/П.2/П.4/П.5 + синтаксис профиля П.3.
|
||||
## П.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`.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue