void CWintec::parseWayPoints(QByteArray data) { for(int pos = 0; pos < data.size(); pos += TrackPoint::size()) { //fwrite(data.mid(pos, TrackPoint::size()).data(), data.mid(pos, TrackPoint::size()).size(), 1, fd); TrackPoint* tp = dataToWayPoint(data.mid(pos, TrackPoint::size())); if(tp == 0) { continue; } if(tp->isLogPoint()) { emit newLogPoint(tp); } else { if(tp->isBeginOfTrack()) { if(m_tmp_track != 0) { m_tmp_track->commit(); emit newTrack(m_tmp_track); qDebug() << QString("End of Track (%1 - %2 , %3 - %4)").arg(m_tmp_track->getMinLong()).arg(m_tmp_track->getMaxLong()).arg(m_tmp_track->getMinLat()).arg(m_tmp_track->getMaxLat()); } m_tmp_track = new Track(); //m_tmp_track->setIndex(trackindex); // trackindex++; //m_track_collection->append(track); } m_tmp_track->append(tp); } } // m_tmp_track->commit(); // emit newTrack(m_tmp_track); }
void CWintec::createTrackpoints() { FILE* fd; Track* track = 0; fd = fopen("outfile2.tkraw", "wb"); qDebug() << QString("createTrackpoints()"); int trackindex = 0; // m_track_collection->clear(); for(int pos = 0; pos < m_log_buf.size(); pos += TrackPoint::size()) { fwrite(m_log_buf.mid(pos, TrackPoint::size()).data(), m_log_buf.mid(pos, TrackPoint::size()).size(), 1, fd); TrackPoint* tp = new TrackPoint(m_log_buf.mid(pos, TrackPoint::size())); if(tp->isLogPoint()) { emit newLogPoint(tp); } else { if(tp->isBeginOfTrack()) { if(track != 0) { track->commit(); emit newTrack(track); qDebug() << QString("End of Track (%1 - %2 , %3 - %4)").arg(track->getMinLong()).arg(track->getMaxLong()).arg(track->getMinLat()).arg(track->getMaxLat()); } track = new Track(); track->setIndex(trackindex); trackindex++; //m_track_collection->append(track); } track->append(tp); } } track->commit(); emit newTrack(track); // m_track_view->setTrackColletcion(m_track_collection); // m_track_collection->commit(); // ui.treeView->resizeColumnToContents(0); // ui.treeView->resizeColumnToContents(1); // ui.treeView->resizeColumnToContents(2); // ui.treeView->resizeColumnToContents(3); // fclose(fd); // m_track_view->update(); }
TrackPoint* CWintec::dataToWayPoint(QByteArray data) { bool data_valid = true; TrackPoint* tp = new TrackPoint(); if(data.size() != 16) { data_valid = false; } uint32_t* tmp; uint16_t *stmp; stmp = reinterpret_cast<uint16_t*>(data.mid(0, 2).data()); tp->isBeginOfTrack(*stmp & 0x01); // m_is_begin_of_track = *stmp & 0x01; tp->isLogPoint(*stmp & 0x02); // m_is_log_point = *stmp & 0x02; tp->isOverSpeed(*stmp & 0x04); //m_is_over_speed = *stmp & 0x04; tmp = reinterpret_cast<uint32_t*>(data.mid(2, 4).data()); int sec = ((*tmp >> 0) & 0x3F); int min = ((*tmp >> 6) & 0x3F); int hour = ((*tmp >> 12) & 0x1F); int mday = ((*tmp >> 17) & 0x1F); int mon = ((*tmp >> 22) & 0x0F); int year = ((*tmp >> 26) & 0x3F); //m_time.setDate(QDate(year+2000, mon, mday)); //m_time.setTime(QTime(hour, min, sec)); //m_time.setTimeSpec(Qt::UTC); QDateTime tmp_dt; tmp_dt.setDate(QDate(year+2000, mon, mday)); tmp_dt.setTime(QTime(hour, min, sec)); tmp_dt.setTimeSpec(Qt::UTC); tp->setTime(tmp_dt); if(tp->getTime().isValid() == false) { data_valid = false; } tmp = reinterpret_cast<uint32_t*>(data.mid(6, 4).data()); tp->setLat((double) (*tmp) / 10000000); if(tp->getLat() < -90.0 || tp->getLat() > 90.0 ) { data_valid = false; } tmp = reinterpret_cast<uint32_t*>(data.mid(10, 4).data()); tp->setLong((double) (*tmp) / 10000000); if(tp->getLong() < -180.0 || tp->getLong() >= 180.0 ) { data_valid = false; } stmp = reinterpret_cast<uint16_t*>(data.mid(14, 2).data()); tp->setAlt((double) (*stmp)); if(data_valid == false) { delete tp; tp = 0; } return tp; }