예제 #1
0
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);

}
예제 #2
0
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();
}
예제 #3
0
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;
}