--- type: brd work_item_id: ET-002 title: "BRD: Чекбокс показа/скрытия POI в попапе рельефа" version: 1 status: approved created_at: 2026-05-20 authors: - "agent:analyst" --- # BRD — ET-002: Чекбокс показа/скрытия POI в попапе рельефа ## 1. Цель Дать пользователю возможность скрывать маркеры POI на карте, чтобы они не загромождали обзор при планировании маршрута. Управление — через чекбокс в существующем попапе кнопки «Рельеф». ## 2. Контекст - Сейчас POI (слои `poi-circles`, `poi-labels`) отображаются всегда при загрузке карты. - Попап кнопки «Рельеф» (`terrain-popup`) уже содержит чекбоксы: Тени рельефа, Перепады, Грунтовки, Тропы. - Механизм `toggleLayer('poi')` уже реализован в коде, но не привязан к UI в попапе. ## 3. Scope ### In scope - Добавить чекбокс «POI» в попап кнопки «Рельеф» (после секции «Тропы») - POI включены по умолчанию (checked) - Состояние чекбокса сохраняется в localStorage (ключ `poi-visible`) - При загрузке страницы — восстанавливать состояние из localStorage - Скрытие/показ слоёв `poi-circles` и `poi-labels` через MapLibre `setLayoutProperty` ### Out of scope - Фильтрация POI по типу (кафе, заправки, и т.д.) - Отдельная кнопка для POI вне попапа рельефа - Изменение иконок или стилей POI - Backend-изменения ## 4. Метрики успеха | Метрика | Критерий | |---------|----------| | Чекбокс отображается в попапе | Визуально присутствует после «Тропы» | | Снятие чекбокса скрывает POI | Слои `poi-circles` и `poi-labels` получают visibility: none | | Установка чекбокса показывает POI | Слои получают visibility: visible | | Состояние сохраняется | После перезагрузки страницы чекбокс и видимость POI соответствуют последнему выбору | | Не ломает существующий функционал | Грунтовки, тропы, рельеф, роутинг работают как прежде | ## 5. Риски | Риск | Вероятность | Митигация | |------|-------------|-----------| | Конфликт с существующим toggleLayer('poi') | Низкая | Использовать тот же механизм layerState, не дублировать логику | | Попап становится слишком длинным на мобильных | Низкая | Один чекбокс — минимальное увеличение высоты | ## 6. Зависимости - Нет внешних зависимостей - Только фронтенд (vanilla JS + HTML)