SatelliteTracker — это серверное приложение на ASP.NET Core, предназначенное для приёма, обработки и трансляции GPS/NMEA-данных со спутниковых приёмников в реальном времени через WebSocket.
Приложение поддерживает два режима получения GPS-данных:
- ✅ Реальный режим — данные читаются с COM-порта (
SimulatedGpsReader) - 🧪 Режим симуляции — используется файл
Nmea_src/output.nmea, содержащий заранее записанные строки в формате NMEA. Вы можете заменить содержимое файла или указать путь к другому файлу вSimulationDataFilePath.
На текущий момент реализован парсинг следующих типов сообщений:
$GPGGA— координаты, высота, количество спутников$GPGSA— показатели точности: PDOP, HDOP, VDOP$GPGSV— информация о видимых спутниках$GPRMC— скорость, направление, статус$GPGLL— широта и долгота
На данный момент подключены не все типы сообщений Если вы используете режим симуляции, то проверьте какие типы сообщений у вас присутствуют.
if (nmeaMessage.StartsWith("$GPGGA"))
{
var data = ParseGPGGA(nmeaMessage);
if (data != null)
{
await _repository.AddSatelliteDataAsync(data);
_logger.LogDebug($"Parsed GPGGA: Lat={data.Latitude}, Lon={data.Longitude}");
}
else
{
_logger.LogWarning($"Parsing $GPGGA returned null.");
}
return data;
}
else if (nmeaMessage.StartsWith("$GPGSV"))
{
var satellites = ParseGPGSV(nmeaMessage);
foreach (var sat in satellites)
{
await _repository.AddSatelliteDataAsync(sat);
}
_logger.LogInformation($"Parsed GPGSV with {satellites.Count} satellites");
return null;
}Все использующиеся типы возвращают data.
- .NET 7 / C#
- ASP.NET Core WebAPI
- Entity Framework Core с PostgreSQL
- NMEA парсер с поддержкой нескольких типов сообщений
- Логирование через Microsoft.Extensions.Logging
- Возможность работы с реальным COM-портом или симуляция с тестовыми данными
Для включения симуляции установите флаг SimulationMode в true в файле appsettings.json:
"GpsSettings": {
"SimulationMode": true,
"SimulationDataFilePath": "Nmea_src/output.nmea",
"UpdateIntervalMs": 1000,
"PortName": "COM3",
"BaudRate": 9600,
"DataBits": 8,
"Parity": "None",
"StopBits": "One",
"WebSocketPath": "/ws"
}- Клонировать репозиторий и открыть в IDE
git clone https://github.com/halfy1/SatelliteTracker- Настроить строку подключения к базе PostgreSQL в
appsettings.jsonОбязательно заполнить поляUsername,Password
"ConnectionStrings": {
"DefaultConnection": "Host=localhost;Port=5432;Database=SatelliteTracker;Username=___;Password=___"
}- Выполнить миграции для создания таблиц:
dotnet ef database update- Запустить проект:
dotnet run- В режиме симуляции данные NMEA будут подгружаться из файла (или COM-порта при отключении симуляции)
SimulatedGpsReader— источник GPS данных (симуляция или COM-порт)NmeaParserService— сервис для парсинга и сохранения NMEA сообщенийSatelliteDataRepository— репозиторий для работы с базой данныхAppDbContext— контекст базы с модельюSatelliteData
- Поддержка дополнительных типов NMEA сообщений (GPGSA, GPRMC и другие)
- Визуализация положения спутников и треков на карте
- Поддержка нескольких спутниковых систем (GLONASS, Galileo и т.д.)