#ifndef COLLISIONDETECTIONTHREAD_H #define COLLISIONDETECTIONTHREAD_H /* * @cbwu * @brief 基于地形的碰撞检测子线程 */ //#if _MSC_VER >= 1600 //#pragma execution_character_set("utf-8") //#endif #include #include #include #include #include #include #include #include "qmapcontrol.h" #include "geocomputation.h" #include "geospatialanalysis.h" #include "routeglobalvariant.h" class CollisionDetectionThread : public QObject { Q_OBJECT public: explicit CollisionDetectionThread(QMapControl* pMapControl,QObject *parent = nullptr); ~CollisionDetectionThread(); //执行子线程业务逻辑 void working(double lon,double lat,double relativeAlititude,double heading,double speed); void start(int ms); public slots: //接收飞机状态信息 void receiveLocationData(QList lon,QList lat,QList relativeAlititude, QList heading,QList speed); //停止检测 void closedCollisionDetection(); signals: void requestPositionInfo(int ms);//请求接收数据 void stopSendData();//停止接收数据 void showNotify(QString title,QString body,QVariantMap data); private: //判断是否同一碰撞点 bool isIdenticalCollisionPoint(double collisionLon,double collisionLat); //重置预警 void resetWarning(); //显示预警通知 void showWarningNotify(int collisionTime,int collisionDist,int collisionHeight); private: int ms; //探测时间间隔 // double currentLon1; //飞机当前经度 // double currentLat1; //飞机当前纬度 // double heading; //航向角 // double relativeAltitude; //相对高度 // double speed;//飞行速度(m/s) // const double detectDist = 500; //探测距离 QMapControl* pMapControl; GeoComputation geoComputation; GeoSpatialAnalysis spatialAnalysis; //历史碰撞点 int collisionX; int collisionY; //预警等级 bool highWarning; bool middleWarning; bool lowWarning; // QSystemTrayIcon *trayIcon; // QIcon icon; //探测标志 bool detectFlag; bool endFlag; }; /********************发数据测试线程**************************/ class SendDataTestThread : public QObject { Q_OBJECT public: explicit SendDataTestThread(QObject *parent = nullptr); // ~SendDataTestThread(); //执行子线程业务逻辑 void working(); public slots: void stopGenerateData(); private: void generateData(); signals: void sendPositionData(QList lon,QList lat,QList relativeAlititude, QList heading,QList speed); void sendPositionData1(QList lon,QList lat,QList heading); void sendTest(int i); private: QPointF pt; QList lon, lat, heading,speed,relativeAlititude; QTimer* m_timer; bool stopFlag = false; GeoComputation geoComputation; }; #endif // COLLISIONDETECTIONTHREAD_H