diff --git a/IMPLEMENTATION_PLAN.md b/IMPLEMENTATION_PLAN.md index 07f2079..3ec9099 100644 --- a/IMPLEMENTATION_PLAN.md +++ b/IMPLEMENTATION_PLAN.md @@ -26,8 +26,8 @@ app data dir; профиль trekking (идея 2) и shortest (идея 1); л **Success:** на телефоне с вручную положенным тайлом региона (adb push для спайка) вызов `BRouter.route([[lon,lat],[lon,lat]], "shortest")` возвращает дорожный GPX/GeoJSON, а не ошибку. **Tests:** ручной вызов из DevTools (CDP) + лог движка; сверить, что трек идёт по дорогам. -**Status:** DONE (проверено на устройстве 2026-09-09). `shortest` Ростов 5.4км за 3.2с; - `trekking` кросс-тайл Ростов→Новочеркасск 44.8км/набор 316м за 1.2с; GPX с track-length/ascend/cost. +**Status:** DONE (проверено на устройстве 2026-09-09). `shortest` по региону 5.4км за 3.2с; + `trekking` кросс-тайл в регионе 44.8км/набор 316м за 1.2с; GPX с track-length/ascend/cost. ВАЖНО: bundled `lookups.dat` из 1.6.3 — версии 10, а живые сегменты brouter.de/segments4 — v11 («lookup version mismatch»). Ассеты заменены на v11 из репозитория (abrensch/brouter master: misc/profiles2/{lookups.dat,trekking.brf,shortest.brf}); движок 1.6.3 их принимает. Профили/lookups @@ -59,7 +59,7 @@ app data dir; профиль trekking (идея 2) и shortest (идея 1); л ЗЕРКАЛО (по решению пользователя, 2026-09-09): данные качаются НЕ с brouter.de напрямую, а со своего зеркала. Источники в загрузчике по порядку: LAN `http://192.168.1.1:88/brouter/segments4` - → WAN `http://77.66.192.45:8088/brouter/segments4` → brouter.de (запас). Зеркало на роутере + → WAN `http://mirror.invalid:8088/brouter/segments4` → brouter.de (запас). Зеркало на роутере (Keenetic uhttpd :88, docroot /opt/share/www → файлы в /opt/share/www/brouter/{segments4,profiles2}, USB, всегда включён). ПРОВЕРЕНО: телефон качает тайл с LAN-зеркала за <2с, маршрут на нём ок. Плюс BRouter RouteServer на ПК (jar, /mnt/02F6E7F6F6E7E7BD/brouter-mirror, systemd brouter.service — @@ -80,8 +80,8 @@ app data dir; профиль trekking (идея 2) и shortest (идея 1); л «🚲 По дорогам»: waypoints остаются редактируемыми маркерами, линия между ними прокладывается BRouter'ом (`brouterMode`/`routeGeom`, debounce 450мс), сохраняется дорожная геометрия. Роутинг — `BRouter.route` (router.js): Android → встроенный движок, иначе (десктоп/дом) → PC-RouteServer по - HTTP (`http_request`, мимо CSP; хосты LAN 192.168.1.18:17777 / WAN 77.66.192.45:17777). - Сквозной прогон в редакторе: 3 точки по Новочеркасску → прямая 1.69км сменилась дорожной линией + HTTP (`http_request`, мимо CSP; хосты LAN 192.168.1.18:17777 / WAN mirror.invalid:17777). + Сквозной прогон в редакторе: 3 точки в городе → прямая 1.69км сменилась дорожной линией 2.25км по улицам (Буденновская → кольцо → Ермака). БАГ, найденный и исправленный при этой проверке: `doBrouter` в конце звал `changed()`, который обнулял `routeGeom` и заново ставил `doBrouter` в очередь — бесконечный цикл, дорожная линия никогда не рисовалась. Заменено на прямой @@ -108,7 +108,7 @@ app data dir; профиль trekking (идея 2) и shortest (идея 1); л ## Release-хардненинг (item 4, сделано) - `network_security_config.xml` (res/xml): cleartext OFF глобально в release, разрешён только хостам - зеркала/RouteServer (192.168.1.1 / 192.168.1.18 / 77.66.192.45); `debug-overrides` — всё в debug. + зеркала/RouteServer (192.168.1.1 / 192.168.1.18 / mirror.invalid); `debug-overrides` — всё в debug. Подключён в AndroidManifest (`android:networkSecurityConfig`). - `proguard-rules.pro`: `-keep class btools.** { *; }` + `-dontwarn btools.**` — минификация release не вырежет встроенный движок. @@ -127,7 +127,7 @@ ATM, банк, скамейка, туалеты, вода, кафе/бар/фа автобусная остановка, пекарня/супермаркет/кофе, смотровая, укрытие, пикник и т.д. (набор — как в brouter-web overlays, см. скрины). С фильтром категорий (тумблеры), иконки скачать и рисовать. **Что проанализировать перед реализацией:** -- Источник данных POI ОФФЛАЙН: Overpass-выгрузка по региону (bbox ~100км вокруг Новочеркасска) в +- Источник данных POI ОФФЛАЙН: Overpass-выгрузка по региону (bbox ~100км вокруг опорной точки) в локальный стор (SQLite/JSON, как seed/tiles), т.к. сеть в поле недоступна. rd5 не годится как POI-хранилище. Обновление — по проводу с зеркала (как тайлы/сегменты). - Иконки: взять набор (напр. используемый brouter-web / maki / OSM-carto sprites), лицензия, @@ -136,12 +136,12 @@ brouter-web overlays, см. скрины). С фильтром категори z-order (POI над тайлами/дорогами, под треком/паком). - Перф: сотни-тысячи точек — кластеризация/культинг по зуму и bbox видимой области. **Статус:** v1 СДЕЛАНО (проверено функционально на устройстве). Данные: Overpass по ~100км вокруг -Новочеркасска (адаптивная выгрузка — дробить не понадобилось, весь bbox отдал 5662 POI одним +опорной точки (адаптивная выгрузка — дробить не понадобилось, весь bbox отдал 5662 POI одним запросом), компактный `frontend/data/pois.json` [{la,lo,c,n}] (358КБ, бандл, оффлайн). Отрисовка: `frontend/js/poi.js` — круглые контрастные значки (эмодзи в кружке, `.poi-badge`, светлый/тёмный под `body.dark-map`), куллинг по видимым границам + от zoom 13, cap 500/кадр; Leaflet-контрол 📍 с панелью категорий (чекбоксы), выбор в localStorage. Привязан к картам записи/деталей/дорог -(`POI.attach`). Проверено: 124 значка в кадре z16 над Новочеркасском, границы/фильтр корректны. +(`POI.attach`). Проверено: 124 значка в кадре z16 над регионом, границы/фильтр корректны. ОСТАЛОСЬ: визуальная проверка на живом экране (WebView в CDP не рисует — скрин чёрный); при желании — расширить область за 100км и добавить недостающие категории (сейчас все 21 категория есть). diff --git a/PROJECT_MAP.md b/PROJECT_MAP.md index a9ae239..4dd7750 100644 --- a/PROJECT_MAP.md +++ b/PROJECT_MAP.md @@ -27,7 +27,7 @@ | `js/sync.js` | ~300 | Синхронизация между устройствами (LAN, PHP сервер на роутере) | | `js/chzn.js` | ~330 | Честный знак (CRPT). Скан DataMatrix → карточка Нацкаталога → префилл КБЖУ. `ChZ`: сессия в localStorage (`chzn_session`), `importFromText`, `refresh`/`ensureSid` (sid 48ч, refreshToken ~год), `authedPost/Get` (userId+sid в query, авто-refresh на 401), `check`, `nutritionInfo` (витамины, часто 204), `normalizeCode` (реконструкция GS 0x1D перед AI 93), `parseCard` (группа «Энергетическая ценность…», имена атрибутов разнятся у производителей), `resolve`. `/authorize/anonymous` закрыт Play Integrity — свою сессию не завести, только импорт из приложения (`tools/chzn_export.sh`) | | `js/tilecache.js` | 178 | Оффлайн кэш тайлов карты (IndexedDB) | -| `js/router.js` | ~80 | Оффлайн-роутинг BRouter. `BRouter.route(points,[profile])`: Android → встроенный движок (`invoke("brouter_route")`), иначе/при ошибке → PC-RouteServer по HTTP (`http_request`, мимо CSP; LAN 192.168.1.18:17777 / WAN 77.66.192.45:17777). Профили `trekking` (планирование) / `shortest` (гэпы). Докачка сегментов `.rd5`: `downloadTile/downloadStatus/listTiles/downloadTileAndWait` | +| `js/router.js` | ~80 | Оффлайн-роутинг BRouter. `BRouter.route(points,[profile])`: Android → встроенный движок (`invoke("brouter_route")`), иначе/при ошибке → PC-RouteServer по HTTP (`http_request`, мимо CSP; LAN 192.168.1.18:17777 / WAN mirror.invalid:17777). Профили `trekking` (планирование) / `shortest` (гэпы). Докачка сегментов `.rd5`: `downloadTile/downloadStatus/listTiles/downloadTileAndWait` | | `js/poi.js` | ~200 | POI-оверлей на картах: круглые контрастные бейджи (эмодзи в круге, не пины), фильтр категорий (`POI.attach(map)`, данные `data/pois.json`, localStorage `baldav_poi_cats/shown`) | | `js/bmr.js` | ~70 | BMR (Mifflin-St Jeor), РСП из БД (33 нутриента), полураспад | | `css/styles.css` | ~2100 | Темная тема, мобильный дизайн, HR зоны, ландшафтный режим | diff --git a/README.md b/README.md index 469fd23..cc83631 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ - **Оффлайн-роутинг (BRouter)** — движок BRouter встроен в приложение (Android): маршруты строятся по дорогам без сети, сегменты `.rd5` региона качаются с домашнего зеркала прямо в приложении (экран дорог → «Сегменты»). Используется в редакторе маршрутов («По дорогам») и для заполнения GPS-пропусков. На десктопе/дома движка нет — те же вызовы уходят на домашний BRouter-RouteServer по HTTP. - **Заполнение GPS-пропусков по дороге** — на детали трека тумблер **«🧩»** прокладывает дорожный путь (BRouter, профиль shortest) через каждый GPS-дропаут (разрыв по времени + реальная хорда) и рисует его голубым пунктиром поверх трека; если дорога в разы длиннее хорды — оставляет хорду. Оверлей, данные трека не меняет. - **Де-джиттер трека** — сглаживание дрожащего GPS-трека методом Савицкого-Голея (настраиваемое окно/число итераций, живое превью на карте детали трека). Хранится обратимо: оригинал и сглаженный вариант лежат раздельно, калории пересчитываются по сглаженным точкам, откат к оригиналу в один тап. Точность каждого фикса (`accuracy_m`) пишется в БД: при пересчёте трека точки хуже порога «Макс. погрешность GPS» исключаются из расчёта и линии (обратимо — точки в БД остаются; поднять порог = вернуть). Работает во всех пересчётах (кнопка «Пересчитать», «Пересчитать всё», после де-джиттера); импорт/старьё без точности и dead-reckoning заполнения не трогает. -- **POI на карте** — точки интереса (кафе, магазины, вода, туалеты, банки/ATM, остановки, укрытия, смотровые и т.д.) круглыми контрастными значками (эмодзи в кружке, читаемо на светлой и тёмной карте). Кнопка `📍` с панелью-фильтром категорий; рендер по видимой области от зума 13. Данные оффлайн (`data/pois.json`, ~100 км вокруг Новочеркасска, 5662 объекта из OSM/Overpass). На картах записи, деталей трека и дорог. +- **POI на карте** — точки интереса (кафе, магазины, вода, туалеты, банки/ATM, остановки, укрытия, смотровые и т.д.) круглыми контрастными значками (эмодзи в кружке, читаемо на светлой и тёмной карте). Кнопка `📍` с панелью-фильтром категорий; рендер по видимой области от зума 13. Данные оффлайн (`data/pois.json`, ~100 км вокруг опорной точки, 5662 объекта из OSM/Overpass). На картах записи, деталей трека и дорог. - **Тёмная карта** — тумблер `☾` на экранах записи, деталей трека и дорог: инвертирует ТОЛЬКО слой тайлов (`invert + hue-rotate 180° + brightness`, трек/маршрут/дороги остаются цветными), выбор запоминается. Работает одинаково на офлайн-тайлах и онлайне, без ключей/квот/перепаковки. - **Метки ветра** — кнопка «Ветер» на экране записи: тап открывает интервал встречного ветра, тап закрывает. Метки хранятся с треком (`wind_marks`) как эталон для проверки оценки ветра по треку; на расчёт калорий/мощности не влияют. Голосовые метки — на будущее. - **Экспорт/импорт** — свои продукты, рецепты и добавки одним файлом (JSON). diff --git a/docs/brouter-findings.md b/docs/brouter-findings.md index 9bd021b..51cc6df 100644 --- a/docs/brouter-findings.md +++ b/docs/brouter-findings.md @@ -38,9 +38,9 @@ BRouter — **маршрутизатор без карты**: на вход оп - **Высоты** в сегментах берутся из **SRTM-90м** (CGIAR). Именно они дают BRouter'у профиль рельефа, по которому он считает набор высоты (см. §4). Без SRTM сегменты соберутся, но без высот — маршруты «с малым набором» не получатся. -- Для нашего региона (Ростовская обл., ~47N/40E) нужны тайлы, чьи SW-углы кратны 5: +- Для нашего региона (~47N/40E) нужны тайлы, чьи SW-углы кратны 5: **`E35_N45.rd5`** (35–40E, 45–50N, ~23.8 МБ) и **`E40_N45.rd5`** (40–45E, ~14.1 МБ) — - Новочеркасск ~40.1E попадает во второй (проверено загрузкой). Одноразовая загрузка по проводу — + опорная точка ~40.1E попадает во второй (проверено загрузкой). Одноразовая загрузка по проводу — тот же паттерн «скачать дома», что для DEM/прогноза. - **ВЕРСИЯ ДАННЫХ (важно, проверено на устройстве).** `lookups.dat` и профили ОБЯЗАНЫ совпадать по версии с сегментами, иначе «lookup version mismatch». Дистрибутив 1.6.3 несёт `lookups.dat` diff --git a/docs/session-logs/2026-09-07_brouter-findings.md b/docs/session-logs/2026-09-07_brouter-findings.md index 722a89c..de1f0cf 100644 --- a/docs/session-logs/2026-09-07_brouter-findings.md +++ b/docs/session-logs/2026-09-07_brouter-findings.md @@ -43,8 +43,8 @@ README не трогал: пользовательской фичи пока н run-as cp), запустил через CDP. Первый вызов упал: «lookup version mismatch lookups.dat=10 rd5=11» — дистрибутив 1.6.3 несёт lookups.dat v10, а сегменты brouter.de/segments4 — v11. Взял v11 lookups.dat + trekking.brf + shortest.brf из abrensch/brouter master (misc/profiles2), заменил -вложенные ассеты; движок 1.6.3 их принял. Результаты: shortest Ростов ~5.4км за 3.2с (холодный), -trekking Ростов→Новочеркасск 44.8км/набор 316м за 1.2с (кросс-тайл), на зашитых в apk v11-данных +вложенные ассеты; движок 1.6.3 их принял. Результаты: shortest по региону ~5.4км за 3.2с (холодный), +trekking кросс-тайл в регионе 44.8км/набор 316м за 1.2с, на зашитых в apk v11-данных 617мс. Мост JS→Rust→Kotlin(движок)→GPX работает целиком. Этап 1 = DONE. Урок: профили и lookups.dat ОБЯЗАНЫ совпадать по версии с сегментами (сейчас v11). @@ -63,7 +63,7 @@ readTimeout 60с, до 30 попыток. Итог на устройстве: E4 ## Дополнение 2026-09-09 (3): своё зеркало вместо прямого brouter.de По решению пользователя данные берём со своего зеркала (не с brouter.de напрямую). Инфраструктура: -- Роутер Keenetic (белый IP 77.66.192.45): на :88 уже uhttpd (docroot /opt/share/www, USB 23ГБ free). +- Роутер Keenetic (внешний адрес mirror.invalid): на :88 уже uhttpd (docroot /opt/share/www, USB 23ГБ free). Положил тайлы+профили в /opt/share/www/brouter/{segments4,profiles2} — раздаётся как http://192.168.1.1:88/brouter/... (uhttpd игнорирует Range → отдаёт файл целиком; на LAN неважно). - ПК: BRouter RouteServer (jar) в /mnt/02F6E7F6F6E7E7BD/brouter-mirror (segments4/profiles2/customs + @@ -77,11 +77,11 @@ readTimeout 60с, до 30 попыток. Итог на устройстве: E4 ## Дополнение 2026-09-09 (4): своё зеркало на роутере + BRouter-Web + тёмная карта - Зеркало на Keenetic: тайлы+профили в /opt/share/www/brouter/ (uhttpd :88), доступно LAN 192.168.1.1:88 - и WAN 77.66.192.45:8088 (static-NAT PPPoE0 :8088→:88). BalDav качает тайлы с зеркала (LAN→WAN→brouter.de). + и WAN mirror.invalid:8088 (static-NAT PPPoE0 :8088→:88). BalDav качает тайлы с зеркала (LAN→WAN→brouter.de). - BRouter RouteServer на ПК: /mnt/02F6E7F6F6E7E7BD/brouter-mirror, СИСТЕМНЫЙ systemd brouter.service (multi-user.target, автостарт без логина, поставил пользователь sudo). WAN :17777→ПК:17777. - BRouter-Web (nrenner 0.18.1) на зеркале: http://192.168.1.1:88/brouter-web/ (+WAN), config.js → RouteServer, - дефолт-слой ÖPNV (CARTO/др. — «needs key»), центр Новочеркасск. + дефолт-слой ÖPNV (CARTO/др. — «needs key»), центр — опорная точка. - Тёмная карта в BalDav: перебрали провайдеров (CARTO/Thunderforest/2GIS/Yandex — ключи/квоты/ToS/проекция/ недоступность в РФ; проба доступности из BalDav по мобильному Tele2: доступны OSM/CARTO/ÖPNV/Esri/2GIS, нет OpenTopo/Yandex-vec). Транспортную инвертом — плохо в городе. Решение: OSM-стандарт + CSS @@ -93,7 +93,7 @@ readTimeout 60с, до 30 попыток. Итог на устройстве: E4 на десктопе со скринами на виртуальном экране (Xvfb :99), не только по API. Прогон в реальном UI (`npx tauri dev` на Xvfb :99, драйв через xdotool, скрины `import`): -- Stage 3 «🚲 По дорогам»: 3 опорные точки по Новочеркасску. Прямая линия 1.69км сменилась +- Stage 3 «🚲 По дорогам»: 3 опорные точки в городе. Прямая линия 1.69км сменилась дорожной 2.25км по улицам (Буденновская → кольцо → просп. Ермака). Роутинг — PC-RouteServer (десктоп без встроенного движка), профиль trekking. - Stage 4 «🧩»: трек 2026-06-22 (session 1782115144011, 16.24км, два дропаута ~2км хорды) — @@ -105,7 +105,7 @@ readTimeout 60с, до 30 попыток. Итог на устройстве: E4 линия НИКОГДА не рисовалась (в UI линия оставалась прямой, дистанция не менялась). Исправлено: `doBrouter` рисует напрямую (`updatePolyline(); updateStats();`), `changed()` не трогает. Отдельным коммитом (цикл виден в истории). Для проверки временно уводил дефолт-центр редактора на -Новочеркасск — откатил. +опорную точку — откатил. Проверка на телефоне встроенным движком (Stage 3 планирование, Stage 4 гэпы, докачка сегментов) — когда тело подключат: `./build.sh install -d`. diff --git a/frontend/js/main.js b/frontend/js/main.js index e7fbfec..9de7ff9 100644 --- a/frontend/js/main.js +++ b/frontend/js/main.js @@ -4473,7 +4473,7 @@ let MAP_REGIONS = [ { name: "Москва", bounds: [[55.55, 37.35], [55.95, 37.85]] }, { name: "Санкт-Петербург", bounds: [[59.80, 30.05], [60.10, 30.55]] }, { name: "Ростов-на-Дону", bounds: [[47.15, 39.55], [47.35, 39.85]] }, - { name: "Новочеркасск + окрестности", bounds: [[47.35, 39.95], [47.52, 40.22]] }, + { name: "Мой регион", bounds: [[47.35, 39.95], [47.52, 40.22]] }, { name: "Краснодар", bounds: [[44.95, 38.85], [45.15, 39.15]] }, { name: "Казань", bounds: [[55.70, 49.00], [55.90, 49.30]] }, { name: "Новосибирск", bounds: [[54.90, 82.75], [55.10, 83.15]] }, @@ -5906,7 +5906,7 @@ let TILES_BASE_URL = "http://192.168.1.1:88/baldav/tiles/"; // Regions the packing tools know about. Shown even when the router has no .db for // them yet (greyed out) so nothing silently disappears from the list. let KNOWN_REGIONS = { - novocherkassk: "Новочеркасск", + novocherkassk: "Мой регион", rostov_city: "Ростов-на-Дону", rostov_oblast: "Ростовская обл.", moscow_city: "Москва", @@ -7397,8 +7397,8 @@ function formatDate(iso) { // from the mirror (LAN -> WAN -> brouter.de) by BRouter.downloadTileAndWait. async function showBrouterSegments() { let region = [ - { name: "E35_N45", label: "E35_N45 — Ростов, запад (35–40°E, 45–50°N)" }, - { name: "E40_N45", label: "E40_N45 — Новочеркасск, восток (40–45°E)" }, + { name: "E35_N45", label: "E35_N45 — запад (35–40°E, 45–50°N)" }, + { name: "E40_N45", label: "E40_N45 — восток (40–45°E)" }, ]; let haveSet = new Set(); try { (await BRouter.listTiles()).forEach(t => haveSet.add(t.name)); } catch (e) {} diff --git a/frontend/js/router.js b/frontend/js/router.js index 7e84725..2a04dca 100644 --- a/frontend/js/router.js +++ b/frontend/js/router.js @@ -9,7 +9,7 @@ // embedded engine isn't available (desktop) or errors — lets planning work on the desktop // too. http_request is Rust-native (ureq), so it's not subject to the WebView CSP. window.BRouter = { - _servers: ["http://192.168.1.18:17777", "http://77.66.192.45:17777"], + _servers: ["http://192.168.1.18:17777", "http://mirror.invalid:17777"], async _routeServer(pts, profile) { let lonlats = pts.map(p => p[0] + "," + p[1]).join("|"); diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 103d7ec..16f94ad 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -139,7 +139,7 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "baldav" -version = "0.1.448" +version = "0.1.449" dependencies = [ "base64 0.22.1", "btleplug", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 9326e5b..c65c016 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "baldav" -version = "0.1.448" +version = "0.1.449" edition = "2021" [lib] diff --git a/src-tauri/gen/android/app/src/main/java/dev/baldav/app/MainActivity.kt b/src-tauri/gen/android/app/src/main/java/dev/baldav/app/MainActivity.kt index 6f72e07..525c29e 100644 --- a/src-tauri/gen/android/app/src/main/java/dev/baldav/app/MainActivity.kt +++ b/src-tauri/gen/android/app/src/main/java/dev/baldav/app/MainActivity.kt @@ -219,7 +219,7 @@ class MainActivity : TauriActivity() { // fine on the fast LAN. val bases = listOf( "http://192.168.1.1:88/brouter/segments4", // LAN mirror - "http://77.66.192.45:8088/brouter/segments4", // WAN mirror (router port-forward) + "http://mirror.invalid:8088/brouter/segments4", // WAN mirror (router port-forward; set real host locally) "https://brouter.de/brouter/segments4" // upstream fallback ) var total = -1L diff --git a/src-tauri/gen/android/app/src/main/res/xml/network_security_config.xml b/src-tauri/gen/android/app/src/main/res/xml/network_security_config.xml index c1c6721..39e7265 100644 --- a/src-tauri/gen/android/app/src/main/res/xml/network_security_config.xml +++ b/src-tauri/gen/android/app/src/main/res/xml/network_security_config.xml @@ -6,7 +6,7 @@ 192.168.1.1 192.168.1.18 - 77.66.192.45 + mirror.invalid diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 9a041ea..3adee72 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://raw.githubusercontent.com/nicegui/tauri-v2/refs/heads/main/tooling/cli/schema.json", "productName": "BalDav", - "version": "0.1.448", + "version": "0.1.449", "identifier": "dev.baldav.app", "build": { "frontendDist": "../frontend" diff --git a/tools/brouter-web/README.md b/tools/brouter-web/README.md index bf8be91..28ab816 100644 --- a/tools/brouter-web/README.md +++ b/tools/brouter-web/README.md @@ -4,8 +4,8 @@ `/opt/share/www/brouter-web/`. Смотрит на свой RouteServer (ПК, systemd brouter.service, :17777). ## Файлы кастомизации (кладутся рядом с распакованным brouter-web) -- `config.js` — host RouteServer (LAN 192.168.1.18:17777 / WAN 77.66.192.45:17777), профили с зеркала, - базовые слои (ÖPNV дефолт, CARTO Dark «needs key» и т.д.), центр Новочеркасск, профили trekking/shortest. +- `config.js` — host RouteServer (LAN 192.168.1.18:17777 / WAN mirror.invalid:17777), профили с зеркала, + базовые слои (ÖPNV дефолт, CARTO Dark «needs key» и т.д.), центр — опорная точка, профили trekking/shortest. - `baldav-custom.css` + `baldav-custom.js` — подключены в index.html после `dist/brouter-web.js`: тумблер день/ночь (☾/☀) в тулбаре → тёмная карта (invert только слой тайлов) + тёмная правая панель; авто-простановка нужных POI-оверлеев один раз (флаг localStorage `baldav_bw_overlays_v1`).