# 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
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
```

### API ключи
- Яндекс.Карты: `9ae1917c-2049-4927-9d1e-29dd0d3e8ebc`

## Использование

1. Запустите приложение
2. Предоставьте разрешения на GPS
3. Включите GPS слушатель
4. При необходимости включите UDP слушатель
5. Используйте кнопки управления для навигации

## Планы развития

- [ ] Поддержка BLE устройств
- [ ] Расширенный декодер AIS
- [ ] Сохранение истории маршрутов
- [ ] Экспорт данных
- [ ] Настройки отображения
- [ ] Многоязычная поддержка

## Лицензия

Проект разработан для образовательных целей.
