You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
160 lines
4.3 KiB
C++
160 lines
4.3 KiB
C++
#include "showplane.h"
|
|
#include "Map/UGMap.h"
|
|
#include "qdebug.h"
|
|
#include "translator.h"
|
|
|
|
ShowPlane::ShowPlane(QObject *parent)
|
|
: QObject{parent}
|
|
{
|
|
|
|
}
|
|
|
|
ShowPlane::ShowPlane(QMapControl *pMapControl)
|
|
{
|
|
m_pMapControl = pMapControl;
|
|
addPlaneDyLayer(pMapControl);
|
|
this->refreshTime = 500;
|
|
|
|
pMapControl->GetMap()->SetRefreshFlag(false);
|
|
|
|
// num_data = 0;
|
|
}
|
|
|
|
ShowPlane::~ShowPlane()
|
|
{
|
|
|
|
}
|
|
|
|
void ShowPlane::startFly()
|
|
{
|
|
addPlaneToDyLayer();
|
|
//每500ms刷新一次
|
|
// m_timer.setInterval(500);
|
|
// connect(&m_timer,&QTimer::timeout,this,&ShowPlane::movePlane);
|
|
// m_timer.start();
|
|
m_pDynamicLayer->SetVisible(true);
|
|
emit requestPositionInfo(this->refreshTime);
|
|
}
|
|
|
|
void ShowPlane::stopFly()
|
|
{
|
|
// m_timer.stop();
|
|
// m_pDynamicLayer->SetVisible(false);
|
|
emit rejectPositionInfo();
|
|
m_pMapControl->refreshDynamicLayer();
|
|
|
|
// num_data = 0;
|
|
// m_pDynamicLayer->RemoveAll();
|
|
// m_planes.clear();
|
|
}
|
|
|
|
//添加飞机
|
|
void ShowPlane::addPlane(Plane* plane)
|
|
{
|
|
m_planes.append(plane);
|
|
}
|
|
|
|
//设置刷新时间
|
|
void ShowPlane::setRefreshTime(int ms)
|
|
{
|
|
this->refreshTime = ms;
|
|
m_timer.setInterval(ms);
|
|
}
|
|
|
|
//接收飞机的位置信息
|
|
void ShowPlane::receivePosition(QList<double> lon,QList<double> lat,QList<double> heading)
|
|
{
|
|
// qDebug()<<"***************lon:"<<lon.takeLast();
|
|
/*
|
|
mutex.lock();
|
|
// qDebug()<<"***************lon:"<<lon.takeLast();
|
|
// qDebug()<<"***************lat:"<<lat.takeLast();
|
|
// qDebug()<<"***************heading:"<<heading.takeLast();
|
|
// qDebug()<<"*********************************receivePosition";
|
|
for(int index=0;index<lon.size();index++)
|
|
{
|
|
this->qmapLon[index].append(lon.at(index));
|
|
this->qmapLat[index].append(lat.at(index));
|
|
this->qmapHeading[index].append(heading.at(index));
|
|
}
|
|
// qDebug()<<"************************Lon:"<<this->qmapLon[0].takeLast();
|
|
// num_data++;
|
|
|
|
// movePlane();
|
|
if(this->qmapLon[0].size()==MAX) removePositionContainer(20);
|
|
mutex.unlock();
|
|
*/
|
|
|
|
m_planes[0]->setPosition(lon.takeLast(),lat.takeLast());
|
|
m_pMapControl->refreshDynamicLayer();
|
|
}
|
|
|
|
void ShowPlane::receivePositionInfo(QMap<int, QList<double> > &qmapLon, QMap<int, QList<double> > &qmapLat, QMap<int, QList<double> > &qmapHeading)
|
|
{
|
|
// this->qmapLon = qmapLon;
|
|
// this->qmapLat = qmapLat;
|
|
// this->qmapHeading = qmapHeading;
|
|
|
|
// qDebug()<<"************************show lon:"<<qmapLon[0].takeLast();
|
|
mutex.lock();
|
|
movePlane(qmapLon,qmapLat,qmapHeading);
|
|
mutex.unlock();
|
|
// m_planes[0]->setPosition(qmapLon[0].takeLast(),qmapLat[0].takeLast());
|
|
// m_pMapControl->refreshDynamicLayer();
|
|
}
|
|
|
|
void ShowPlane::movePlane(QMap<int,QList<double>> qmapLon,QMap<int,QList<double>> qmapLat,QMap<int,QList<double>> qmapHeading)
|
|
{
|
|
int i = 0;
|
|
// if(this->qmapLon[i].isEmpty()) return;
|
|
// qDebug()<<"*************************movePlaneLon:";//<<this->qmapLon[0].takeLast();
|
|
foreach (Plane* plane, m_planes)
|
|
{
|
|
// qDebug()<<"***************PlaneX:"<<plane->getPointX();
|
|
plane->setPosition(qmapLon[i].takeLast(),qmapLat[i].takeLast());
|
|
i++;
|
|
// plane->setPosition(plane->getPointX()+0.001,plane->getPointY());
|
|
}
|
|
|
|
m_pMapControl->refreshDynamicLayer();
|
|
}
|
|
|
|
//添加飞机到动态层
|
|
void ShowPlane::addPlaneToDyLayer()
|
|
{
|
|
foreach (Plane* plane, m_planes)
|
|
{
|
|
UGString planeName = Translator::QStr2UGStr(plane->getPlaneName());
|
|
m_pDynamicLayer->Add(planeName,plane->getGeometry());
|
|
}
|
|
}
|
|
|
|
void ShowPlane::addPlaneDyLayer(QMapControl* pMapControl)
|
|
{
|
|
UGDynamicLayers* pDyLayers = &(pMapControl->GetMap()->m_DynamicLayers);
|
|
UGString dylayername = _U("Plane");
|
|
if(pDyLayers->GetDynamicLayer(dylayername)==NULL)
|
|
{
|
|
m_pDynamicLayer = new UGDynamicLayer(dylayername);
|
|
m_pDynamicLayer->SetLayerName(dylayername);
|
|
pDyLayers->Add(m_pDynamicLayer);
|
|
}
|
|
else
|
|
{
|
|
m_pDynamicLayer = pDyLayers->GetDynamicLayer(dylayername);
|
|
}
|
|
|
|
pMapControl->GetMap()->SetRefreshFlag(false);
|
|
}
|
|
|
|
//清除部分容器值
|
|
void ShowPlane::removePositionContainer(int count)
|
|
{
|
|
for(int i=0;i<m_planes.count();i++)
|
|
{
|
|
// this->qmapLon[i].remove(0,count);
|
|
// this->qmapLat[i].remove(0,count);
|
|
// this->qmapHeading[i].remove(0,count);
|
|
}
|
|
}
|