public void ParseGPGGAStringWithNullField() { string str = "$GPGGA,,,,,,,,,,,99.99,M,,*35"; var parser = new NMEAParser(); var res = parser.Parse(str); FixData data = (FixData)res; }
public void Update(String line) { try { //validate checksum first if (IsValidChecksum(line)) { if (line.StartsWith("$GPGGA")) { FixData newFix = FixData.Parse(line); if (newFix != null && newFix.Valid) { //compute vertical speed int newAltTimeSeconds = (newFix.Time.Hour * 3600) + (newFix.Time.Minute * 60) + (newFix.Time.Second); double dt = newAltTimeSeconds - lastAltTimeSeconds; if (lastAltitude > 0 && dt > 0) { double newVS = (newFix.Altitude - lastAltitude) / (dt); VerticalSpeed = VerticalSpeed + 0.2f * (newVS - VerticalSpeed); } lastAltitude = newFix.Altitude; lastAltTimeSeconds = newAltTimeSeconds; //compute maximum altitude if (newFix.Altitude > MaximumAltitude) { MaximumAltitude = newFix.Altitude; } } this.Fix = newFix; } else if (line.StartsWith("$GPRMC")) { this.Movement = MovementData.Parse(line); } else if (line.StartsWith("$GPGSV")) { this.Satellites = SatellitesData.Parse(line); } } } catch (Exception ex) { Console.WriteLine(ex); } }
public void ParseGPGGAString() { string str = "$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47"; var parser = new NMEAParser(); var res = parser.Parse(str); FixData data = (FixData)res; Assert.AreEqual(new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 12, 35, 19, 0), data.CurrentTime); Assert.AreEqual(48, data.Latitude.Value.Degree); Assert.AreEqual(7.038, data.Latitude.Value.Minutes); Assert.AreEqual(LatitudeDegree.DirectionType.North, data.Latitude.Value.Direction); Assert.AreEqual(11, data.Longitude.Value.Degree); Assert.AreEqual(31, data.Longitude.Value.Minutes); Assert.AreEqual(LongitudeDegree.DirectionType.East, data.Longitude.Value.Direction); Assert.AreEqual(8, data.SateliteUsed); Assert.AreEqual(0.9, data.HDOP); Assert.AreEqual(545.4, data.MeanSeaLevel); Assert.AreEqual(46.9, data.GeoidSeparation); }
private void UpdateDataToDB() { // создание соединения с БД SQLiteConnection connection = new SQLiteConnection(_connection); // команда для фиксации факта изменения записи SQLiteCommand fixdata = new SQLiteCommand(FixData.GetReplaceText(PersonInfo.tablename, FixData.FixType.Edit, _personID, _operName, DateTime.Now)); // создание команд для обновления SQLiteCommand updatePerson = PersonInfo.CreateUpdateCommand(); // инициализация комманды для Адресса прописки SQLiteCommand commandRegadr = _regadrID == -1 ? Adress.CreateInsertCommand() : Adress.CreateUpdateCommand(); // инициализация комманды для Адресса проживания SQLiteCommand commandFactadr = null; if (adressrealCheckBox.Checked) { commandFactadr = _factadrID == -1 ? Adress.CreateInsertCommand() : Adress.CreateUpdateCommand(); } // инициализация комманды для Места рождения SQLiteCommand commandBornadr = _bornadrID == -1 ? Adress.CreateInsertCommand() : Adress.CreateUpdateCommand(); // инициализация комманды для документа SQLiteCommand commandIDoc = _idocID == -1 ? IDocInfo.CreateInsertCommand() : IDocInfo.CreateUpdateCommand(); // присвоение подключения командам updatePerson.Connection = connection; commandRegadr.Connection = connection; if (commandFactadr != null) { commandFactadr.Connection = connection; } commandBornadr.Connection = connection; commandIDoc.Connection = connection; fixdata.Connection = connection; // заполнение команд параметрами SetRegAdressValues(commandRegadr); if (commandFactadr != null) { SetFactAdressValues(commandFactadr); } SetBornplaceValues(commandBornadr); SetDocValues(commandIDoc); // открытие соединения connection.Open(); // создание транзакции SQLiteTransaction transaction = connection.BeginTransaction(); // присвоение транзакции командам fixdata.Transaction = commandRegadr.Transaction = commandBornadr.Transaction = commandIDoc.Transaction = updatePerson.Transaction = transaction; if (commandFactadr != null) { commandFactadr.Transaction = transaction; } // выполнение запросов для вставки данных в смежные таблицы if (_regadrID == -1) { // вставка прописки и получение ID записи _regadrID = (long)commandRegadr.ExecuteScalar(); } else { // обновление записи commandRegadr.ExecuteNonQuery(); } // если фактический адресс проживания отличается от прописки if (commandFactadr != null && adressrealCheckBox.Checked) { if (_factadrID == -1) { // вставка адресса проживания и получение ID записи _factadrID = (long)commandFactadr.ExecuteScalar(); } else { // обновление записи commandFactadr.ExecuteNonQuery(); } } else // если адресс прописки совпадает с адрессом фактического проживания { _factadrID = _regadrID; } if (_bornadrID == -1) { // вставка места рождения и получение ID записи _bornadrID = (long)commandBornadr.ExecuteScalar(); } else { // обновление записи commandBornadr.ExecuteNonQuery(); } if (_idocID == -1) { // вставка документа и получение ID записи _idocID = (long)commandIDoc.ExecuteScalar(); } else { commandIDoc.ExecuteNonQuery(); } // заполнение команды вставки Персоны параметрами, // в том числе определенными ID ранее вставленных записей адрессов и документа SetPersonValues(updatePerson); // исполнение команды обновления Персоны updatePerson.ExecuteNonQuery(); fixdata.ExecuteNonQuery(); // подтаверждение транзакции transaction.Commit(); // закрытие соединения connection.Close(); }
private void InsertDataToDB() { // создание соединения с БД SQLiteConnection connection = new SQLiteConnection(_connection); // создание команд для вставки SQLiteCommand insPerson = PersonInfo.CreateInsertCommand(); SQLiteCommand insRegadr = Adress.CreateInsertCommand(); SQLiteCommand insFactadr = Adress.CreateInsertCommand(); SQLiteCommand insBornadr = Adress.CreateInsertCommand(); SQLiteCommand insIDoc = IDocInfo.CreateInsertCommand(); SQLiteCommand insFixdata = new SQLiteCommand(); SQLiteCommand insPersonOrg = new SQLiteCommand(); // присвоение подключения командам insPerson.Connection = connection; insRegadr.Connection = connection; insFactadr.Connection = connection; insBornadr.Connection = connection; insIDoc.Connection = connection; insFixdata.Connection = connection; insPersonOrg.Connection = connection; // заполнение команд параметрами SetRegAdressValues(insRegadr); SetFactAdressValues(insFactadr); SetBornplaceValues(insBornadr); SetDocValues(insIDoc); // открытие соединения connection.Open(); // создание транзакции SQLiteTransaction transaction = connection.BeginTransaction(); // присвоение транзакции командам insPersonOrg.Transaction = insFixdata.Transaction = insFactadr.Transaction = insRegadr.Transaction = insBornadr.Transaction = insIDoc.Transaction = insPerson.Transaction = transaction; // выполнение запросов для вставки данных в смежные таблицы // вставка прописки и получение ID записи _regadrID = (long)insRegadr.ExecuteScalar(); // если фактический адресс проживания отличается от прописки if (adressrealCheckBox.Checked) { // вставка адресса проживания и получение ID записи _factadrID = (long)insFactadr.ExecuteScalar(); } else // если адресс прописки совпадает с адрессом фактического проживания { _factadrID = _regadrID; } // вставка места рождения и получение ID записи _bornadrID = (long)insBornadr.ExecuteScalar(); // вставка документа и получение ID записи _idocID = (long)insIDoc.ExecuteScalar(); // заполнение команды вставки Персоны параметрами, // в том числе определенными ID ранее вставленных записей адрессов и документа SetPersonValues(insPerson); // исполнение команды вставки Персоны _personID = (long)insPerson.ExecuteScalar(); // выполнение запроса на фиксацию факта создания записи insFixdata.CommandText = FixData.GetReplaceText(PersonInfo.tablename, FixData.FixType.New, _personID, _operName, DateTime.Now); insFixdata.ExecuteNonQuery(); insPersonOrg.CommandText = PersonOrg.GetInsertPersonOrgText(_personID, _orgID); insPersonOrg.ExecuteScalar(); // подтверждение транзакции insRegadr.Transaction.Commit(); // закрытие соединения connection.Close(); }