|
|
#pragma once
|
|
|
#include "Resource.h"
|
|
|
|
|
|
#include "deque"
|
|
|
#include <string>
|
|
|
using namespace std;
|
|
|
|
|
|
//已知地球上两点经纬高,计算两点间的斜率(假定地球是圆的,考虑地球曲率)
|
|
|
double CalSlopeBetweenTwoPoint(const double fromPtLon, const double fromPtLat, const float fromPtAlt, const double endPtLon, const double endPtLat, const float endPtAlt);
|
|
|
|
|
|
//已知地球A点经纬度高,以及B点和A点连线相对于水平方向的斜率,求B点的高度
|
|
|
double CalAltFromSlope(const double fromPtLon, const double fromPtLat, const float fromPtAlt, const double endPtLon, const double endPtLat,const double slope);
|
|
|
|
|
|
/*-------------------------------------------------------------------------------------------------------------
|
|
|
说明:可视域分析
|
|
|
-------------------------------------------------------------------------------------------------------------*/
|
|
|
|
|
|
//线程函数,处理可视域分析
|
|
|
void ThreadFuncLightRegion();
|
|
|
|
|
|
//给定飞行高度,进行可视域分析
|
|
|
bool AnalysisLightRegion(int iAngle, int iRadius);
|
|
|
|
|
|
/*-------------------------------------------------------------------------------------------------------------
|
|
|
说明:实时通视检测
|
|
|
-------------------------------------------------------------------------------------------------------------*/
|
|
|
|
|
|
//线程函数,处理实时通视检测
|
|
|
void ThreadFuncRealTimeDetection();
|
|
|
|
|
|
//给定无人机高度,角度和距离范围,进行通视分析
|
|
|
bool AnalysisVisiArea(double uavAlt, double dAngle, double dDistanceMin, double dDistanceMax, double lonGCS, double latGCS);
|
|
|
|
|
|
/*-------------------------------------------------------------------------------------------------------------
|
|
|
说明:实时碰撞检测
|
|
|
-------------------------------------------------------------------------------------------------------------*/
|
|
|
|
|
|
//线程函数,处理实时碰撞检测
|
|
|
void ThreadFuncRealTimeCrash();
|
|
|
|
|
|
/*-------------------------------------------------------------------------------------------------------------
|
|
|
说明:航线通视分析
|
|
|
-------------------------------------------------------------------------------------------------------------*/
|
|
|
|
|
|
//线程函数,处理航线通视分析
|
|
|
void ThreadFuncAnalysisRoute();
|
|
|
|
|
|
//给定某点的经度、纬度,计算该点相对于地面站的通视高度
|
|
|
float CalculateVisibleAlt(const double& lon, const double& lat);
|
|
|
|
|
|
/*-------------------------------------------------------------------------------------------------------------
|
|
|
说明:实时视线通视分析
|
|
|
-------------------------------------------------------------------------------------------------------------*/
|
|
|
//线程函数,处理实时视线通视分析
|
|
|
void ThreadFuncAnalysisLOS();
|
|
|
|
|
|
/*-------------------------------------------------------------------------------------------------------------
|
|
|
说明:通视等高线分析
|
|
|
-------------------------------------------------------------------------------------------------------------*/
|
|
|
//线程函数,处理通视等高线分析
|
|
|
void ThreadFuncAnalysisContour();
|
|
|
|
|
|
//通视等高线分析并在地图上标绘等高线,iAngle 角度
|
|
|
bool AnalysisContourLine(int iAngle);
|
|
|
|
|
|
//添加点到通视等高线图层
|
|
|
void InsertPtToContourLine(float _fLightAlt, double _dPtLon, double _dPtLat);
|
|
|
|
|
|
// CDlgLightRegion 对话框
|
|
|
|
|
|
class CDlgLightRegion : public CBCGPDialog
|
|
|
{
|
|
|
DECLARE_DYNAMIC(CDlgLightRegion)
|
|
|
|
|
|
public:
|
|
|
CDlgLightRegion(CWnd* pParent = NULL); // 标准构造函数
|
|
|
virtual ~CDlgLightRegion();
|
|
|
|
|
|
// 对话框数据
|
|
|
enum { IDD = IDD_DIALOG_LIGHTREGION };
|
|
|
|
|
|
CBCGPChartCtrl m_wndChart;
|
|
|
CBCGPChartVisualObject* pChart;
|
|
|
|
|
|
CBCGPChartAxis* pXAxis;
|
|
|
CBCGPChartAxis* pYAxis;
|
|
|
|
|
|
CBCGPChartSeries* pSeries1;
|
|
|
CBCGPChartSeries* pSeries2;
|
|
|
CBCGPChartSeries* pSeries3;
|
|
|
|
|
|
CBCGPChartLineObject* m_pLine1;
|
|
|
CBCGPStrokeStyle m_strokeStyle;
|
|
|
CBCGPChartTextObject* m_pTextTip;
|
|
|
|
|
|
double m_dGroundLon; //地面站经度
|
|
|
double m_dGroundLat; //地面站纬度
|
|
|
float m_fGroudAlt; //地面站高程
|
|
|
double m_dCabinHgt; //方舱本身高度
|
|
|
|
|
|
protected:
|
|
|
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
|
|
|
|
|
|
DECLARE_MESSAGE_MAP()
|
|
|
public:
|
|
|
virtual BOOL OnInitDialog();
|
|
|
|
|
|
//标绘地面站位置
|
|
|
afx_msg void OnBnClickedButtonDrawPoint();
|
|
|
|
|
|
//接收其他线程来的消息,更新对话框内容
|
|
|
afx_msg LRESULT OnSendUpdateDialog(WPARAM wParam, LPARAM lParam);
|
|
|
|
|
|
/*-------------------------------------------------------------------------------------------------------------
|
|
|
说明:可视域分析绘制相关变量和函数
|
|
|
-------------------------------------------------------------------------------------------------------------*/
|
|
|
public:
|
|
|
HANDLE hThreadRegion;
|
|
|
DWORD ThreadIDRegion;
|
|
|
|
|
|
int m_iFlightAlt; //飞行高度
|
|
|
int m_iRegionRadius; //分析半径
|
|
|
|
|
|
//提示文字
|
|
|
CBCGPVisualContainerCtrl m_RegionTextContainer;
|
|
|
CBCGPTextGaugeImpl* m_pRegionTTextIndicator;
|
|
|
|
|
|
//初始化可视域分析提示文字显示仪表
|
|
|
void InitRegionTextContainer();
|
|
|
|
|
|
//可视域分析
|
|
|
afx_msg void OnBnClickedButtonRegionAnaylsis();
|
|
|
|
|
|
//清除可视域分析绘制图层
|
|
|
afx_msg void OnBnClickedButtonRegionDelete();
|
|
|
|
|
|
/*-------------------------------------------------------------------------------------------------------------
|
|
|
说明:实时通视检测相关变量和函数
|
|
|
-------------------------------------------------------------------------------------------------------------*/
|
|
|
public:
|
|
|
//是否在实时通视检测
|
|
|
BOOL m_bRealTime_Visi;
|
|
|
|
|
|
HANDLE hThreadDetect;
|
|
|
DWORD ThreadIDDetect;
|
|
|
|
|
|
//选中实时通视检测
|
|
|
afx_msg void OnBnClickedCheckRealtime();
|
|
|
|
|
|
//地图上实时在无人机周边绘制可视域
|
|
|
void DrawVisiAreaRealTime(double uavAlt, double distanceToGCS, double angleToGCS, double lonGCS, double latGCS);
|
|
|
|
|
|
/*-------------------------------------------------------------------------------------------------------------
|
|
|
说明:实时碰撞检测相关变量和函数
|
|
|
-------------------------------------------------------------------------------------------------------------*/
|
|
|
public:
|
|
|
//是否在实时碰撞检测
|
|
|
BOOL m_bRealTime_Crash;
|
|
|
|
|
|
HANDLE hThreadCrash;
|
|
|
DWORD ThreadIDCrash;
|
|
|
|
|
|
//选中实时碰撞检测
|
|
|
afx_msg void OnBnClickedCheckRtDetection();
|
|
|
|
|
|
//地图上实时在无人机周边检测高程
|
|
|
void DrawCrashAreaRealTime(double uavAlt, double uavLon, double uavLat);
|
|
|
|
|
|
/*-------------------------------------------------------------------------------------------------------------
|
|
|
说明:航线通视分析相关变量和函数
|
|
|
-------------------------------------------------------------------------------------------------------------*/
|
|
|
HANDLE hThreadRoute;
|
|
|
DWORD ThreadIDRoute;
|
|
|
|
|
|
CBCGPVisualContainerCtrl m_LineTextContainer;
|
|
|
CBCGPTextGaugeImpl* m_pLineTextIndicator;
|
|
|
|
|
|
//初始化航线通视分析提示文字显示仪表
|
|
|
void InitLineTextContainer();
|
|
|
|
|
|
//加载航线
|
|
|
afx_msg void OnBnClickedButtonLoadRoute();
|
|
|
|
|
|
//保存航线通视分析结果
|
|
|
afx_msg void OnBnClickedButtonSaveImage();
|
|
|
|
|
|
//停止分析
|
|
|
afx_msg void OnBnClickedButtonStopRoute();
|
|
|
|
|
|
//清除航线通视分析结果
|
|
|
afx_msg void OnBnClickedButtonClearResult();
|
|
|
|
|
|
afx_msg LRESULT OnMouseDown(WPARAM wp, LPARAM lp);
|
|
|
|
|
|
/*-------------------------------------------------------------------------------------------------------------
|
|
|
说明:实时视线分析相关变量和函数
|
|
|
-------------------------------------------------------------------------------------------------------------*/
|
|
|
public:
|
|
|
HANDLE hThreadLight;
|
|
|
DWORD ThreadIDLight;
|
|
|
|
|
|
BOOL m_bRTlight; //是否在实时视线分析:地面站-飞机视线方向通视情况
|
|
|
|
|
|
//选中实时视线分析
|
|
|
afx_msg void OnBnClickedCheckRtLight();
|
|
|
|
|
|
//实时视线分析:地面站-飞机方向,在图表上完成结果绘制
|
|
|
void AnalysisRealTime(double uavAlt, double distanceToGCS, double angleToGCS, double lonGCS, double latGCS);
|
|
|
|
|
|
/*-------------------------------------------------------------------------------------------------------------
|
|
|
说明:通视等高线分析
|
|
|
-------------------------------------------------------------------------------------------------------------*/
|
|
|
HANDLE hThreadContour;
|
|
|
DWORD ThreadIDContour;
|
|
|
|
|
|
int m_iMaxLosAlt; //最大通视等高线高度
|
|
|
|
|
|
CBCGPVisualContainerCtrl m_ContourTextContainer;
|
|
|
CBCGPTextGaugeImpl* m_pContourTextIndicator;
|
|
|
|
|
|
//初始化通视等高线分析提示文字显示仪表
|
|
|
void InitContourTextContainer();
|
|
|
|
|
|
//通视等高线分析
|
|
|
afx_msg void OnBnClickedButtonContourline();
|
|
|
|
|
|
//清除通视等高线分析
|
|
|
afx_msg void OnBnClickedButtonContourDelete();
|
|
|
|
|
|
/*-------------------------------------------------------------------------------------------------------------
|
|
|
说明:两点间通视分析
|
|
|
-------------------------------------------------------------------------------------------------------------*/
|
|
|
afx_msg void OnBnClickedButtonSelectPtInMap();
|
|
|
void ShowPointPosition(double ptLon, double ptLat);
|
|
|
void LosBetweenTwoPoints();
|
|
|
afx_msg void OnBnClickedButtonClearLineLayer();
|
|
|
afx_msg void OnSize(UINT nType, int cx, int cy);
|
|
|
afx_msg void OnBnClickedButtonGetAltValue();
|
|
|
afx_msg void OnBnClickedButtonReverse();
|
|
|
|
|
|
//标绘作战范围
|
|
|
afx_msg void OnBnClickedButtonDrawFight();
|
|
|
|
|
|
//清除作战范围
|
|
|
afx_msg void OnBnClickedButtonDeleteFight();
|
|
|
|
|
|
//作战半径
|
|
|
int m_iFightRegion;
|
|
|
|
|
|
//标绘高程数据区域
|
|
|
afx_msg void OnBnClickedButtonGetDemRegion();
|
|
|
}; |