/
latin
/
WialonIPSServer
Обзор
Документация
Войти
/
latin
/
WialonIPSServer
Код
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
Models/DataPacket.cs
104 строки
3 KB
latin
Initial commit: Wialon IPS Server implementation
26 ноя 2025, 15:13
26 ноя 2025, 15:13
8b086c6
Код
Авторство
О чём код?
namespace WialonIPSServer.Models; /// <summary> /// Модель пакета с данными (SD или D) /// Формат: Date;Time;Lat1;Lat2;Lon1;Lon2;Speed;Course;Alt;Sats /// </summary> public class DataPacket { public string Date { get; set; } = string.Empty; // DDMMYY public string Time { get; set; } = string.Empty; // HHMMSS public string Lat1 { get; set; } = string.Empty; // GGMM.MM public string Lat2 { get; set; } = string.Empty; // N или S public string Lon1 { get; set; } = string.Empty; // GGGMM.MM public string Lon2 { get; set; } = string.Empty; // E или W public int Speed { get; set; } // км/ч public int Course { get; set; } // градусы public int Altitude { get; set; } // метры public int Satellites { get; set; } // количество спутников /// <summary> /// Преобразует координаты в десятичный формат /// </summary> public double? GetLatitude() { if (string.IsNullOrEmpty(Lat1) || string.IsNullOrEmpty(Lat2)) return null; // Формат: GGMM.MM if (Lat1.Length < 4) return null; if (!int.TryParse(Lat1.Substring(0, 2), out int degrees)) return null; if (!double.TryParse(Lat1.Substring(2), System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out double minutes)) return null; double decimalDegrees = degrees + (minutes / 60.0); if (Lat2 == "S") decimalDegrees = -decimalDegrees; return decimalDegrees; } /// <summary> /// Преобразует долготу в десятичный формат /// </summary> public double? GetLongitude() { if (string.IsNullOrEmpty(Lon1) || string.IsNullOrEmpty(Lon2)) return null; // Формат: GGGMM.MM if (Lon1.Length < 5) return null; if (!int.TryParse(Lon1.Substring(0, 3), out int degrees)) return null; if (!double.TryParse(Lon1.Substring(3), System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out double minutes)) return null; double decimalDegrees = degrees + (minutes / 60.0); if (Lon2 == "W") decimalDegrees = -decimalDegrees; return decimalDegrees; } public static DataPacket? Parse(string message) { var parts = message.Split(';'); if (parts.Length < 10) return null; var packet = new DataPacket { Date = parts[0], Time = parts[1], Lat1 = parts[2], Lat2 = parts[3], Lon1 = parts[4], Lon2 = parts[5] }; int.TryParse(parts[6], out int speed); packet.Speed = speed; int.TryParse(parts[7], out int course); packet.Course = course; int.TryParse(parts[8], out int alt); packet.Altitude = alt; int.TryParse(parts[9], out int sats); packet.Satellites = sats; return packet; } }