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++

#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);
}
}