--- type: brd work_item_id: ET-007 title: "BRD: Спутниковая карта (Схема / Спутник)" version: 2 status: draft created_at: 2026-05-31 updated_at: 2026-05-31 changelog: - "v2 (2026-05-31): code-review fix (12-review.md P1-3) — митигация риска hillshade приведена в соответствие с TRZ/ADR/AC: авто-выключение не вводится." authors: - "agent:analyst" --- # BRD — ET-007: Спутниковая карта (Схема / Спутник) ## 1. Цель Дать пользователю возможность одним кликом переключать подложку карты между «Схемой» (текущая OSM-схема) и «Спутник» (растровые снимки поверхности Земли). Спутниковая подложка помогает увидеть реальный рельеф и поверхность маршрута — лес/поле/брод/каменистый участок — до выезда. ## 2. Контекст - Сейчас в приложении используется единственная подложка — OSM-растр, стилизованный для «Схемы» в двух темах (`style.json`, `style-dark.json`). Спутникового слоя нет. - В фазе PH-5 Redesign уже была введена тёмная/светлая тема — но «тема» относится к стилизации (контрасты, насыщенность), а не к природе подложки. - Эндуро-маршруты часто проходят вне дорог OSM (бездорожье, броды, лесные участки). Спутник критичен для разведки. - Все клиентские модули (`app.js`, `units.js`, `gpx.js`) уже умеют переживать `map.setStyle()` через `rebuildMapOverlays()` — это опорная точка для будущей реализации. ## 3. Scope ### In scope | # | Функция | | ----- | ------------------------------------------------------------------------------------ | | F-01 | Переключатель «Схема / Спутник» в UI (segmented control) | | F-02 | Спутниковая подложка как новый raster-источник (бесплатный, без API-ключа) | | F-03 | В режиме «Спутник» — скрыта OSM-схема, показаны спутниковые тайлы | | F-04 | Все надстройки (грунтовки, тропы, POI, hillshade, TRI, маршрут, GPX) поверх спутника | | F-05 | Сохранение выбора в `localStorage` (ключ `map-base-layer`) | | F-06 | Восстановление выбора при загрузке страницы и при смене темы | | F-07 | Корректное отображение атрибуции спутниковых тайлов | | F-08 | Сохранение всех пользовательских слоёв (роутинг, GPX, recon) при переключении | ### Out of scope - Кэширование спутниковых тайлов (offline / PWA — это PH-9). - Динамический выбор провайдера спутниковых тайлов в UI. - Гибридный режим «Спутник + подписи дорог OSM поверх». - Самостоятельный хостинг спутниковых тайлов (юридические/трафик-риски). - Изменение базовой карты для расчёта маршрутов (роутинг по-прежнему OSRM). - Авто-переключение Схема/Спутник в зависимости от зума. ## 4. Метрики успеха | Метрика | Критерий | | ------------------------ | ------------------------------------------------------------------------------------- | | Время переключения | ≤ 500 мс от клика до первой видимой спутниковой плитки | | Сохранение состояния | Выбор подложки сохраняется после reload, смены темы, смены слоёв terrain | | Совместимость со слоями | Грунтовки, тропы, POI, маршрут OSRM, GPX-треки, hillshade, TRI видны и поверх спутника | | Совместимость с темой | Переключение тёмной/светлой темы не сбрасывает режим «Спутник» | | Атрибуция | На карте видна корректная атрибуция провайдера спутника | | Не ломает существующее | Все режимы (роутинг, разведка, красивый маршрут, GPX, линейка) работают как прежде | ## 5. Риски | Риск | Вероятность | Влияние | Митигация | | ------------------------------------------------------------------------------------------------- | ----------- | ------- | -------------------------------------------------------------------------------------------------------------------------- | | Провайдер спутниковых тайлов закроет доступ / введёт лимит / потребует API-ключ | Средняя | Высокое | Зафиксировать конкретного провайдера в ADR; предусмотреть точку расширения для альтернативного провайдера (несколько URL) | | Спутниковая подложка медленно грузится → пользователь видит «дыры» | Высокая | Среднее | Использовать background-цвет (тёмно-серый) под спутником; OSM-схема остаётся как fallback в случае ошибки загрузки тайлов | | Цвет грунтовок и троп плохо виден на спутниковой подложке | Высокая | Среднее | TRZ: на режиме «Спутник» включается обводка (halo) у линий грунтовок и троп — по аналогии с подписями POI | | Hillshade поверх спутника даёт некрасивое наложение (двойное затенение рельефа) | Средняя | Низкое | Hillshade продолжает работать поверх спутника как и поверх схемы — авто-выключение не вводится (TRZ §1 REQ-F-04, ADR-004 §«Контекст 1.5»); визуальная проверка — UI-тест AC-04 «Hillshade поверх спутника» | | Юридические ограничения на использование стороннего провайдера спутниковых тайлов | Низкая | Высокое | В ADR указать выбранного провайдера с лицензией, разрешающей использование без API-ключа (Esri World Imagery, ArcGIS) | | Регресс UI на мобильных устройствах из-за нового переключателя | Низкая | Среднее | UI-тест-кейсы (04b) для desktop и mobile viewport | | Конфликт с уже сохранёнными localStorage-значениями старых версий | Низкая | Низкое | Использовать новый ключ `map-base-layer`, default = `schematic` | ## 6. Зависимости - Только фронтенд — backend изменений не требуется. - MapLibre GL JS 4.7.0 (уже подключен). - Внешний провайдер спутниковых тайлов (выбор и фиксация — в ADR). - Сетевое подключение клиента к серверу провайдера. ## 7. Связь с roadmap - Фаза PH-5 Redesign — тёмная тема и mobile UI уже сделаны; ET-007 встраивается в эту же панель «Рельеф / Слои» (одна точка управления визуальными слоями карты). - Фаза PH-9 PWA — кэширование спутниковых тайлов оффлайн — будет планироваться отдельно, ET-007 закладывает архитектурную основу (источник тайлов, точка переключения).