|
|
|
|
#include "realtimepositioninfothread.h"
|
|
|
|
|
#include "qdebug.h"
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* @brief 实时接收飞机位置信息子线程,并将位置信息传递给其他线程
|
|
|
|
|
*/
|
|
|
|
|
RealTimePositionInfoThread::RealTimePositionInfoThread(QObject *parent)
|
|
|
|
|
: QObject{parent}
|
|
|
|
|
{
|
|
|
|
|
// showPos_timer.setInterval(200);
|
|
|
|
|
// showPos_timer.start();
|
|
|
|
|
// connect(&showPos_timer,&QTimer::timeout,this,[=](){
|
|
|
|
|
// emit sendPos(this->qmapLon[0],this->qmapLat[0],this->qmapHeading[0]);
|
|
|
|
|
// });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void RealTimePositionInfoThread::working()
|
|
|
|
|
{
|
|
|
|
|
// qDebug()<<"*************************RealTimePositionInfoThread:"<<QThread::currentThread();
|
|
|
|
|
// while(true)
|
|
|
|
|
// {
|
|
|
|
|
// if(this->qmapLon[0].size()>=MAX_CONTAINER)
|
|
|
|
|
// {
|
|
|
|
|
// mutex.lock();
|
|
|
|
|
// removePositionContainer(50);
|
|
|
|
|
// mutex.unlock();
|
|
|
|
|
// }
|
|
|
|
|
// QThread::msleep(100);
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//定时任务:发送地形碰撞检测所需位置信息
|
|
|
|
|
void RealTimePositionInfoThread::startSendCollisionDetectionPosInfo(int ms)
|
|
|
|
|
{
|
|
|
|
|
collisionDetect_timer = new QTimer;
|
|
|
|
|
connect(collisionDetect_timer,&QTimer::timeout,this,&RealTimePositionInfoThread::collisionDetectTimeout);
|
|
|
|
|
collisionDetect_timer->start(ms);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//接收实时飞行位置信息
|
|
|
|
|
void RealTimePositionInfoThread::receiveRealTimePositionInfo(QList<double> lon, QList<double> lat, QList<double> relativeAlititude, QList<double> heading, QList<double> speed)
|
|
|
|
|
{
|
|
|
|
|
// qDebug() << "RealTimePositionThread address: " << QThread::currentThread();
|
|
|
|
|
// qDebug()<<"*************************receiveRealTimePositionInfo:";
|
|
|
|
|
mutex.lock();
|
|
|
|
|
// qDebug()<<"*************************size:"<<this->qmapLon[0].size();
|
|
|
|
|
if(this->qmapLon[0].size()>=MAX_CONTAINER)
|
|
|
|
|
{
|
|
|
|
|
removePositionContainer(50);
|
|
|
|
|
}
|
|
|
|
|
for(int index=0;index<lon.size();index++)//飞机数量
|
|
|
|
|
{
|
|
|
|
|
this->qmapLon[index].append(lon.at(index));
|
|
|
|
|
this->qmapLat[index].append(lat.at(index));
|
|
|
|
|
this->qmapRelativeAlititude[index].append(relativeAlititude.at(index));
|
|
|
|
|
this->qmapHeading[index].append(heading.at(index));
|
|
|
|
|
this->qmapSpeed[index].append(speed.at(index));
|
|
|
|
|
}
|
|
|
|
|
mutex.unlock();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//发送位置信息用于实时显示飞机位置
|
|
|
|
|
void RealTimePositionInfoThread::startSendDisplayInfo(int ms)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
showPos_timer = new QTimer;
|
|
|
|
|
connect(showPos_timer,&QTimer::timeout,this,[=](){
|
|
|
|
|
// qDebug()<<"*************************RealTimePositionInfoThread:";
|
|
|
|
|
emit sendDisplayInfo(this->qmapLon,this->qmapLat,this->qmapHeading);
|
|
|
|
|
});
|
|
|
|
|
showPos_timer->start(ms);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//停止发送数据给碰撞探测子线程
|
|
|
|
|
void RealTimePositionInfoThread::stopSendCollisionDetectionPosInfo()
|
|
|
|
|
{
|
|
|
|
|
collisionDetect_timer->stop();
|
|
|
|
|
delete collisionDetect_timer;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void RealTimePositionInfoThread::receiveTest(int i)
|
|
|
|
|
{
|
|
|
|
|
qDebug() << "************************receive i:"<<i;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void RealTimePositionInfoThread::removePositionContainer(int count)
|
|
|
|
|
{
|
|
|
|
|
for(int i=0;i<this->qmapLon.size();i++)
|
|
|
|
|
{
|
|
|
|
|
for(int j=0;j<count;j++)
|
|
|
|
|
{
|
|
|
|
|
this->qmapLon[i].pop_front();
|
|
|
|
|
this->qmapLat[i].pop_front();
|
|
|
|
|
this->qmapRelativeAlititude[i].pop_front();
|
|
|
|
|
this->qmapHeading[i].pop_front();
|
|
|
|
|
this->qmapSpeed[i].pop_front();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void RealTimePositionInfoThread::collisionDetectTimeout()
|
|
|
|
|
{
|
|
|
|
|
// qDebug()<<"*****************************collisionDetectTimeout:";
|
|
|
|
|
QList<double> lon,lat,relativeAlititude,heading,speed;
|
|
|
|
|
mutex.lock();
|
|
|
|
|
for(int i=0;i<this->qmapLon.keys().size();i++)
|
|
|
|
|
{
|
|
|
|
|
lon.append(this->qmapLon[i].takeLast());
|
|
|
|
|
lat.append(this->qmapLat[i].takeLast());
|
|
|
|
|
relativeAlititude.append(this->qmapRelativeAlititude[i].takeLast());
|
|
|
|
|
heading.append(this->qmapHeading[i].takeLast());
|
|
|
|
|
speed.append(this->qmapSpeed[i].takeLast());
|
|
|
|
|
}
|
|
|
|
|
mutex.unlock();
|
|
|
|
|
emit sendCollisionDetectPosInfo(lon,lat,relativeAlititude,heading,speed);
|
|
|
|
|
}
|