# AISMap - Приложение для отображения AIS и GPS данных на карте ## Описание AISMap - это Android приложение для отображения данных о судах, полученных через AIS (Automatic Identification System) и GPS, на интерактивной карте. Приложение поддерживает несколько источников данных и различные SDK карт. ## Архитектура ### Модели данных #### Vessel.java Модель для нашего судна, содержащая: - Координаты (широта, долгота) - Курс и скорость - Сила GPS сигнала - Количество спутников - Высота над уровнем моря - Временная метка последнего обновления #### AISVessel.java Модель для AIS судов с расширенной информацией: - MMSI (Maritime Mobile Service Identity) - Название судна и позывной - IMO номер и тип судна - Размеры (длина, ширина, осадка) - Пункт назначения и ETA - Навигационный статус ### Контроллеры #### NMEAParser.java Парсер NMEA сообщений, поддерживающий: - GGA (Global Positioning System Fix Data) - RMC (Recommended Minimum Navigation Information) - VTG (Course Over Ground and Ground Speed) - AIS (Automatic Identification System) - Валидация контрольных сумм - Callback интерфейс для уведомлений #### UDPListener.java Контроллер для прослушивания UDP портов: - Асинхронное прослушивание - Настраиваемый порт - Отправка и получение данных - Обработка ошибок #### AndroidNMEAListener.java Контроллер для Android NMEA Listener: - Использование встроенного GPS - Поддержка старых версий Android - Мониторинг статуса GPS - Получение количества спутников #### AppController.java Главный контроллер, координирующий: - Все источники данных - Обновление моделей - Взаимодействие с картой - Управление жизненным циклом ### Интерфейс карт #### MapInterface.java Абстрактный интерфейс для карт: - Добавление/обновление меток судов - Управление слоями - Обработка кликов - Центрирование и зум #### YandexMapImpl.java Реализация для Яндекс.Карт: - Использование API ключа - Создание иконок судов - Анимации перемещения - Обработка событий #### MapForgeImpl.java Реализация для MapForge (офлайн карты): - Работа с локальными картами - Слои и маркеры - Оптимизация производительности ## Источники данных ### UDP - Порт по умолчанию: 10110 (стандартный для AIS) - Настраиваемый порт - Асинхронная обработка ### Android NMEA Listener - Встроенный GPS модуль - Прямой доступ к NMEA данным - Единообразие с UDP данными ### BLE (планируется) - Поддержка внешних GPS устройств - Bluetooth Low Energy - Автоматическое обнаружение ## Особенности ### Валидация данных - Проверка контрольных сумм NMEA - Фильтрация некорректных сообщений - Логирование ошибок ### Производительность - Асинхронная обработка данных - Кэширование меток - Оптимизация обновлений карты ### Расширяемость - Модульная архитектура - Поддержка новых источников данных - Легкое добавление новых SDK карт ## Настройка ### Зависимости ```gradle // Яндекс.Карты implementation 'com.yandex.android:maps.mobile:4.4.0-full' // MapForge (опционально) implementation 'org.mapsforge:mapsforge-map-android:0.15.0' ``` ### Разрешения ```xml ``` ### API ключи - Яндекс.Карты: `9ae1917c-2049-4927-9d1e-29dd0d3e8ebc` ## Использование 1. Запустите приложение 2. Предоставьте разрешения на GPS 3. Включите GPS слушатель 4. При необходимости включите UDP слушатель 5. Используйте кнопки управления для навигации ## Планы развития - [ ] Поддержка BLE устройств - [ ] Расширенный декодер AIS - [ ] Сохранение истории маршрутов - [ ] Экспорт данных - [ ] Настройки отображения - [ ] Многоязычная поддержка ## Лицензия Проект разработан для образовательных целей.