Files

3.3 KiB
Raw Permalink Blame History

type, work_item_id, title, version, status, created_at, authors
type work_item_id title version status created_at authors
brd ET-002 BRD: Чекбокс показа/скрытия POI в попапе рельефа 1 approved 2026-05-20
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)