Skip to content

Latest commit

 

History

History
126 lines (97 loc) · 5.9 KB

File metadata and controls

126 lines (97 loc) · 5.9 KB

Добавление плейсмарков по нажатию на карту

Обзор

Теперь приложение поддерживает интерактивное добавление плейсмарков! Пользователи могут нажимать на карту в любом месте, чтобы создавать новые метки.

Новые возможности

1. Интерактивное добавление плейсмарков

  • Нажатие на карту: Создает новую плейсмарку в указанном месте
  • Автоматическое именование: Метки получают уникальные имена
  • Визуальное отображение: Новые плейсмарки сразу видны на карте

2. Управление пользовательскими плейсмарками

  • Просмотр: Список всех созданных меток в нижней панели
  • Удаление: Индивидуальное удаление каждой метки
  • Очистка: Кнопка 🗑️ для удаления всех пользовательских меток

3. Улучшенный UI

  • Инструкция: Подсказка для новых пользователей
  • Панель меток: Отображение координат и названий
  • Кнопки управления: Быстрый доступ к функциям

Как использовать

Добавление новой метки

  1. Нажмите на карту в любом месте
  2. Автоматически создается новая плейсмарка
  3. Метка появляется в списке пользовательских плейсмарков

Управление метками

  • Удалить одну метку: Нажмите на иконку 🗑️ рядом с меткой
  • Удалить все метки: Нажмите на красную кнопку 🗑️ справа
  • Просмотр координат: Координаты отображаются под названием метки

Технические детали

Обработчик нажатий

mapWindow.map.addMapTapListener(object : MapTapListener {
    override fun onMapTap(map: Map, point: Point) {
        // Создание новой плейсмарки
        val placemark = map.mapObjects.addPlacemark(point)
        // Настройка иконки и стиля
        // Уведомление о добавлении
    }
})

Структура данных

data class CustomPlacemark(
    val id: String,           // Уникальный идентификатор
    val title: String,        // Название метки
    val position: Point,      // Координаты
    val timestamp: Long       // Время создания
)

Управление состоянием

  • MapScreenMutableState: Хранит список пользовательских плейсмарков
  • MapState: Управляет нативными объектами карты
  • Callback система: Уведомляет UI об изменениях

Файлы изменений

1. Map.kt

  • Добавлен метод addPlacemarkAtPoint()
  • Добавлен метод addPlacemarkAtScreenPoint()
  • Добавлено управление пользовательскими плейсмарками

2. Map.android.kt

  • Добавлен MapTapListener для обработки нажатий
  • Автоматическое создание плейсмарок при нажатии

3. App.kt

  • Добавлен класс CustomPlacemark
  • Обновлен UI для отображения пользовательских меток
  • Добавлены кнопки управления

4. MapAnimationConfig.kt

  • Конфигурация анимаций остается без изменений

Совместимость

  • Android: Полная поддержка всех функций
  • ⚠️ iOS: Базовая поддержка через общие методы
  • Web: Поддержка через общие методы

Отладка

Проблемы с добавлением меток

  1. Проверьте, что карта инициализирована
  2. Убедитесь, что MapTapListener добавлен
  3. Проверьте логи на наличие ошибок

Проблемы с отображением

  1. Проверьте состояние MapScreenMutableState
  2. Убедитесь, что callback onPlacemarkAdded настроен
  3. Проверьте UI компоненты на корректность

Примеры использования

Создание метки программно

val point = PointFactory.create(59.9343, 30.3061)
mapState.addPlacemarkAtPoint(point, "Исаакиевский собор")

Очистка всех меток

mapScreenMutableState.clearAllCustomPlacemarks()

Получение списка меток

val placemarks = mapScreenMutableState.getCustomPlacemarks()

Будущие улучшения

  1. Редактирование меток: Возможность изменения названия и описания
  2. Категории меток: Группировка по типам
  3. Экспорт/импорт: Сохранение и загрузка пользовательских меток
  4. Поиск: Фильтрация меток по названию или координатам
  5. Стили: Различные иконки для разных типов меток