#if !defined(AFX_GISDLG_H__C9D2192D_FC93_4663_863B_24AB8906C0A2__INCLUDED_)
#define AFX_GISDLG_H__C9D2192D_FC93_4663_863B_24AB8906C0A2__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// GISDlg.h : header file
//

/////////////////////////////////////////////////////////////////////////////
// CGISDlg dialog

#include "resource.h"
#include "MapLayerManage.h"
#include "ShowHZDistanceDlg.h"
#include "LonLatDlg.h"
#include "Globe.h"

#include "LineManage.h"
#include "LineSectDisAZDlg.h"
#include "FlyLineDesign.h"
#include "toolbarex.h"

#include "GuidePointDataStruct.h"
#include "DrawLineStruct.h"

#include "LineDesign.h"
#include "UAVSelectDlg.h"
#include "TargetDlg.h"

#include "GISManager.h"
#include "DlgLightRegion.h"
#include "DlgDemAlt.h"
#include "TopologicalAnalysis.h"
#include "DlgMarker.h"
#include <map>
#include <array>
#include "MapElevation.h"
#include "../Include/8BMapDLL_type.h"
#include "SaveZoneDlg.h"
#include "circleguidence.h"
#include "designsurveylinedlg.h"
#include "setmultiroutedlg.h"
using namespace B8MapDLL;

#define MESSAGE_B8MAP   WM_USER+750 
#define MESSAGE_DRAWZK	WM_USER+751

//����Ŀ������
const UINT MAX_TARGET_NUM = 20000;
const UINT MAX_PLANE_NUM_ADS = 100;

typedef CMap<LPCTSTR,LPCTSTR,LPCTSTR,LPCTSTR> labelMap;

//��ý�嶨ʱ��
#include <mmsystem.h>
#include "map.h"
#pragma comment(lib,"Winmm.lib")

class CGISDlg : public CBCGPDialog
{
	// Construction
public:

	CGISDlg(CWnd* pParent = NULL);   // standard constructor

	~CGISDlg();

	//��ȡ��ͼ�汾��
	CString GetMapVersion();
	/*******************����<�༭����>����**************************/
	map<int,DrawLineDataStruct> m_ShowedLineDataList;  //�洢����ʾ�ĺ�������
	DrawLineDataStruct m_editLineDataGroup;  //�༭��������
	MapElevation m_mapElevation;   //����
	int m_highLightLineLayerID;    //ѡ�и���ͼ��
	int m_tempTerrainPointsLayerID; //���ε�ͼ��
	long m_tempshpPointLayerID;  //��ʱ��ͼ��
	long m_tempshpLineLayerID;   //��ʱ��ͼ��
	bool m_bSelectFeatureFlag; //ѡ��Ԫ��ģʽ
	int m_lineSelectedID;   //ѡ�еĺ��ߺ�  
	int circlingPointID;    //�洢������ID

	long GLOBAL_X; //�洢���������������
	long GLOBAL_Y;
	//��ȡ�з��յĵ��ε�
	void GetDangerousTerrainPoints(double pts[][2],int pointNum,long alt,vector<double>& vec_alt,vector<double>& vec_lon,vector<double>& vec_lat);
	//���Σ�յ��ε�
	int DrawDangerousTerrainPoints(double pts[][2],int pointNum,long alt); 
	//���Σ�յ��ε�
	void ClearDangerousTerrainPoints();
	// ������ʱ��
	void DrawTempLine(double m_Pts[][2],int pointNum);

	//����ѡ�и���ͼ��
	void DrawHighLightLine(const PtStruct *pts, const int ptNum);

	//�����ʱ��
	void ClearTempLine();
	//���������
	void ClearHighLightLine();
	//ת��ΪGrid����
	void TransformToXY(double pts[][2],int pointNum,vector<int>& ptsRow,vector<int>& ptsCol);
	//��ȡ����㼯
	void TransformToVectorPoints(DrawLineDataStruct lineDataGroup,vector<double>& lineX,vector<double>& lineY);

	TopologicalAnalysis topologicalAnalysis;
	//�������ӵ�
	void AddPointInLine(int ptPos,double* pt,DrawLineDataStruct& editLineDataGroup);
	//����ɾ����
	bool RemovePointInLine(int ptPos,DrawLineDataStruct& backLineDataGroup);
	// �Ƿ�ѡ����Ҫ�أ���ѡ�з��غ��߱�ţ����򷵻�-1
	int IsSelectLine(double* pt);
		
	long m_distLabelLayer; //�༭ʱ��ʾ��λ�Ǻ;���
	BOOL m_bEditLine;			//�༭���պ���   
	DrawLineDataStruct backLineDataGroup; //���պ������ݼ���
	BOOL m_dragFlag;   //��ק�ƶ���־

	long m_KTPtShpLayerID; //��Ͷ��ͼ��ID

	//��Ͷ������ƶԻ���
	//CDesignKTLineDlg *m_pDesignKTLineDlg;
	/***************����� By Wu 2023.10.16********/
	bool m_bPolylineMeasure;  //������־
	int m_numPolylineMeasurePts;  //�����������ĵ���
	double m_posPolylineMeasurePts[512][2]; //��������㼯
	bool m_bMeasureDrag;    //�Ƿ��������
	bool m_bEndMeasure;     //��������
	//���������������߶�ͼ��
	long m_polylineMeasureLineLayerID;

	//��ע������������ע��ͼ��
	long m_polylineMeasureLabelLayerID;

	//�����������ĵ���ŵı�עͼ��
	long m_polylineMeasurePtLayerID[2];

	void ClearPloylineMeasure();  //���������
	/*******************************************/
	/*************************************************************************************/
	//��ʾ���ߺ� ����� ��ƫ�����Ϣ	2015.11.20
	tagDRAWZK m_DRAWZK;

	//�����Ƿ��Ѿ����ı�־
	bool m_pHaveDrawLineFlag[14];

	// ���ܣ����õ�����ʽ��Ϣ���;������Ϣ��
	void SetMsgInfo(const HWND hwnd, const UINT msgID);

	BOOL ReadLine(int iLine,PTLIST *pList);


	// ���ܣ�����װ��������Ϣ���;������Ϣ��
	void SetLoadLineMsgInfo(const HWND hwnd, const UINT msgID);
	//���ܣ��������˻��ķ��к��㣬���Ƴ����˻��ķ��к���
	//���룺���˻��ĵ�ǰ�ľ���lon��γ��lat�������yaw, ���ԣ���Ϊ��λ��
	void AddFlyPoint(int uavid,const double lon, const double lat, const double yaw,bool control);
	void AddFlyPoint_ADS(const int uavNum, const int uavid, const double lon, const double lat, const double yaw, const bool control, const CString strPlaneName);

	//���ܣ�����GIS����ʾ����
	void SetGISWindowArea(const CRect gisArea);

	//���ܣ���ʾGIS�Ի���
	void ShowDlg(const CRect rc, CWnd* pParent);

	//���ܣ�����Ŀ��㣬�ڵ�ͼ��ʾ��������
	//���룺Ŀ����ptID������lon��γ��lat
	void AddTargetPoint(const int ptID, const double lon, const double lat);

	//���ܣ�ɾ������ID�ŵ�Ŀ���
	void DeleteTarget(const int ptID);

	//���ܣ�ɾ������Ŀ���
	void DeleteAllTargets();

	//���ܣ��ڵ�ͼ��ʾ������װ���ķ��к�������
	//���룺���������弯��linePtArray�����ߵĺ������ptNum
	//˵������ͼ��ʾ���Ѿ�����˸ú��ߣ��������棬���±�溽��
	void DrawBindingLine(const PtStruct *linePtArray, const int ptNum);	

	//���ܣ����õ���վλ��
	//���룺����lon��γ��lat���߶�alt
	void SetGCSPosition(const double lon, const double lat, const double alt);


	//���ܣ���浼����λ��
	//���룺����������guideMode��1Ϊ��������1,2Ϊ��������2��������lon��γ��lat
	void DrawGuidePoint(const BYTE guideMode, const double lon, const double lat);


	//���ܣ���ʾ����
	//���룺�����ļ�����strLineFileName
	void OnShowGivenLine(const CString strLineFileName);


	//���ܣ������յ�λ��
	//���룺����������callbackMode��1Ϊ���յ�1��2Ϊ���յ�2��������lon��γ��lat
	void DrawCallBackPoint(const BYTE callbackMode, const double lon, const double lat);


	//���ܣ�����shpfile��ͼ���淽������UAV
	void AddUAVPoints2Polygon(const long shpLayerID);


	//���ܣ�ȡ����ͼ�����ĵ�����
	void OnRemoveGuidePtDraw();

	////
	void MouseWheel(short zDelta);

	void SetRouteLine(int iLine ,PTLIST *pList);

	//���ܣ����½�����ʾ����
	//���룺��ֵ��
	void UpdateDataInfo(int index,const char* key,double value);

	//���ܣ�������ݲ˵��뺽����ʾ��صIJ���
	//      1)�����Ѿ���ע�������ʾ
	//      2)����δ��ע��������ʾ
	//���룺���߱��lineID
	void SetFlyLineShowStatus(const int lineID);


	// Dialog Data
	//{{AFX_DATA(CGISDlg)
	enum { IDD = IDD_DIALOG1 };
	// NOTE: the ClassWizard will add data members here
	//}}AFX_DATA


	// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CGISDlg)

	/*
	brief:�������ͼ���ߵ�ͼ����
	*/
	void AddTianDiTuService();

	/*
	brief:�������ͼ���ߵ�ͼ����
	*/
	void LoadTianDiTuService();

	/*
	brief:���ŵ�Ŀ��λ��
	param: lon���ȣ��ȣ�
	param: latγ�ȣ��ȣ�
	*/
	void ZoomToLocation(double lon,double lat);

	//��ʾ������½����ɻ�������
	void ShowLine14Ex(int uavID,double uavLon,double uavLat,bool bShow); 
	//����װ����������½������
	void SetBindLine14Coordinate(int uavID,double lon,double lat);
private: 
	//map<int,map<long,long>> m_subLineLayerID;	  //�Ӻ�����ͼ���
	//map<int,map<long,long>> m_subLinePtLayerID;	  //�Ӻ��ߵ�ͼ���
	map<int,long> m_TempLine14LayerID;  //�洢������½����ɻ�������ͼ��
	map<int,Point2D> m_CoordinateBindLine14; //�洢��װ����������½�����꣬������ɻ�����

	long m_subLineLayerID[20][255]; //�Ӻ�����ͼ���
	long m_subLinePtLayerID[20][255]; //�Ӻ��ߵ�ͼ���
	bool m_pHaveDrawCopyLineFlag[20][255]; //ͼ���Ƿ��ѻ���
	int m_line14FlyID;  //������½��ɻ�ID
	bool m_bShowCopyLine;
	map<int,CString> m_lineFullPathName;
	//
	void ShowModifyPointDlg(int selectedPointID=0);  //�༭����ʱ,��ʾ�������öԻ���
	void ShowEditSaveDlg();     //��ʾ����༭�Ի���
	void EndPolylineMessure();  //��������
	//���ƽ��������޷���
	long noFlyZoneLayersID[5]; //������
	long restrictedZoneLayersID[5]; //�޷���
	long m_tempZoneLayerID;
	bool bDrawRestrictedZone;
	bool bShowZone;
	double firstZonePoint[2];
	//����������
	void DrawRestrictedZone(long& layerID,double* xPoints,double* yPoints,int nPoints,int type);
	//���������
	void ClearZoneLayer(long& zoneID);
	//�����������
	void ComputeRectanglePoints(double* point1,double* point2,double* xPoints,double* yPoints);
	//��ʾ����������Ի���
	void ShowSaveZoneDlg(double* xPoints,double* yPoints);
	void arrayDouble2Variant(double *pArray,int iDimlength,VARIANT &vaArray);

protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

	// Implementation
protected:

	// Generated message map functions
	//{{AFX_MSG(CGISDlg)
	afx_msg void OnMouseMove(UINT nFlags, CPoint point);
	//	afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
	afx_msg void OnAddpoint();
	afx_msg void OnEnddesign();

	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()

private:

	//��ͼ��������
	CMap1 m_map;

	//�滮���߱���ID��
	int m_drawPlanFlyLine;

	//���յ��ĺ������
	long int m_uavFlyPoints;

	//ͼ�������
	CMapLayerManage* m_Layer;

	//��γ����ʾ��
	CLonLatDlg *m_pLonLatDlg;


	//��γ�ȶԻ�����ʾ��ʶ
	bool m_bHaveShowLonLatDlg;

	//�º�����ƶԻ�����ʾ��ʶ
	bool m_bHaveShowLineDesign;

	//2��֮���ˮƽ������ʾ�Ի������
	CShowHZDistanceDlg *m_pHZDistanceDlg;

	//2��֮���ˮƽ���������ʾ�ı�ʶ
	bool m_bHaveShowDistanceDlg;

	//�Ƿ��Ѿ������˵�ͼ
	bool m_bHaveAddMap;	

	//�������ͼ��ID
	long m_flyTrackLayerID[255];

	//UAV�������ͼ��ID
	long m_UAVFlyTrackLayerID[255];
	long m_UAVFlyTrackLayerID_ADS[MAX_PLANE_NUM_ADS];

	//�Ƿ��Ѿ���������˻��ķ��й켣
	bool m_bFirstDrawUAVTrack[255];
	bool m_bFirstDrawUAVTrack_ADS[MAX_PLANE_NUM_ADS];

	//��ͼ��ʾ�����ȡ��߶ȵ���
	double m_onePerWidth;
	double m_onePerHeight;

	//��ͼ��ʾ�����ȡ��߶�
	double m_mapAreaHalfWidth;
	double m_mapAreaHalfHeight;

	//�������״̬
	bool m_bLineDesign;

	//GIS��ʾ����
	CRect m_rcGISArea;

	//�Ի�����ʾ����
	CRect m_rcDialogArea;

	//������	
	double m_ppUavPtArray[18][2];
	double m_ppUavPtArray_ADS[18][2];

	CPoint	m_ptPlane[18];
	CPoint	m_ptPlane_ADS[18];

	//��������������
	int m_ptNum;

	//��ͼ��ʾ�������Ͻ�X����
	int m_leftTopX;

	//��ͼ��ʾ�������Ͻ�Y����
	int m_leftTopY;

	//Ŀ����SHPͼ��ID��
	int m_targetPtShapeID;

	//�Ƿ��Ѿ�������SHPĿ���עͼ��
	bool m_bHaveCreateTargetShp;

	//��עƫ����
	int m_labelWarpValue;

	//�����ӵı���Ŀ������
	int m_targetPointNum;

	//�ܹ���Ŀ������
	int m_totalPointNum;

	//Ŀ�����ͼ���ID��
	long m_targetDrawLayerID;

	//�뺽�������صı���
	int m_lineMaxPointNum;            //һ�������ܵĺ������
	PtStruct *m_pDesignLineStruct;    //��������
	int m_designLinePointNum;		  //�������

	int  m_iPtSel;//���߱༭ʱѡ��
	BOOL m_bPtDel;//�Ƿ�ɾ��
	BOOL m_bSetPointModel;          //�Ƿ����õ�״̬
	BOOL m_bEndSetPoint;            //������ƺ���
	BOOL m_bPtEdit;//�༭����

	BOOL m_bLDSetPoint;				//���߱༭ʱ�����õ�״̬	2016.01.05

	//��ǰ��Ƶĺ�������
	PtStruct m_curDesignPoint;

	//���߱��ͼ���ID��
	long m_designLineLayerID;
	long m_designLineLayerID2;

	long m_canvasLayerID;

	//�Ƿ��Ѿ������µĺ���
	bool m_bAddNewPoint;

	//��ʱ���ͼ��
	int m_tempLayerID;

	//��ʶ�Ƿ�����ʱͼ���Ͻ��б�ע
	bool m_beTemLayerDrawing;

	//////////////////�뺽����ʾ��ص�������/////////////////////
	DrawLineDataStruct m_pFlyLines[14]; //�����������  5��14
	int m_totalFlyLines;     //�ܵķ��к�����
	int m_flyLineNum;		 //�������

	//���߹�����
	CLineManage m_lineManage;

	//���к��߱�ע��
	long m_flyLinesLayerID;

	//�Ƿ��Ѿ����������˻�����Shp��ͼ��
	bool m_bHaveCreateUAVShpLayer;

	//���˻�����Shp��ͼ��ID
	long m_uavShapileLayerID;

	//���߱��ͼ���Shpͼ��ID���飬ÿ�����߾���2�����ͼ�㣺1��ͼ��Ϊ���㡢��һ��ͼ��Ϊ����
	long m_ppPlanLineShpLayerIDArr[14][2];



	//��ʾ�������ʱ�ĺ���������Ϣ
	CLineSectDisAZDlg *m_pLineSectDlg;

	//�ɻ�ѡ��
	/*UAVSelectDlg *m_pUavSelDlg1;
	UAVSelectDlg *m_pUavSelDlg2;
	UAVSelectDlg *m_pUavSelDlg3;*/

	//��һ�������Ƿ��Ѿ����
	bool m_bDesignFirstPoint;

	//������ƶԻ���
	CFlyLineDesign *m_pFlyLineDesign;

	//������ƶԻ���
	CLineDesign		*m_pLineDesign;

	//��ͼ��ʾ������Ƶļ��δ�С
	CRect m_rcDesignGISWindow;

	///////////////////////��������������//////////////////////////

	CImageList m_ImageList;
	CToolBarCtrl m_ToolBar;
	CRect m_rcgisSmallArea;         //GIS������

	bool m_bShowToolBar;            //�Ƿ���ʾ������	
	///////////////////////��������������//////////////////////////

	//���������ݽṹ��
	GuidePointData m_guidePtInfo;

	//����վλ�õ�ʸ��ͼ��
	long m_gcsPtShpLayerID;

	//������λ�õ�ʸ��ͼ��
	long m_guidePtShpLayerID;

	// ���ʹ�����Ϣ
	HWND m_MsgHwnd;
	UINT m_MsgID;    //������ʽ��ϢID
	UINT m_LineLoadMsgID;      //װ������
	//�ص�����
	struMapOut	m_struMapOut;

	//��ǰ���༭�ĺ�������
	PtStruct m_curEditLinePoint;

	//�����Ƿ�����ƶ�
	//bool m_bEnablePointMove;

	//Ŀ���ʸ��ͼ��ID��	
	//long m_pTargetShapfileID;

	//�������ĸ߶�
	int m_toolbarHeight;

	//������ȫ��Ļ�е�GIS��ʾ����
	CRect m_gisAreaInScreen;

	//�Ƿ�����Զ����εı�ʶ
	bool m_bAutoMove;

	//���յ�ʸ��ͼ��ID��	
	long m_pCallBackShapfileID[255];

	//������ģʽ
	int m_guidePointMode;

	bool m_bGuideMode;//��������ģʽ

	long m_CircleGuideLayer; //��������ͼ��

	int m_drawTrackPtNum[255];

	//�º�����Ƶĺ����������	2016.01.06
	int m_MaxNumofLinePt;
	int m_NowNumLineDesign;			//��ǰ����ĸ���

// 	tmpPT *m_pNewDesignLineStruct;    //�º�������
// 	tmpPT m_CurNewDesignPt;			//��ǰ��Ƶĺ�������

	PtStruct *m_pNewDesignLineStruct;    //�º�������
	PtStruct m_CurNewDesignPt;			//��ǰ��Ƶĺ�������

	struInfoData m_infoData;

	TargetPt m_targets[255];
	int      m_targetSelID;

	bool m_bSelectDropPoint; //�ر��Ի����Ƿ���ѡ��

	CDlgDemAlt m_DlgDemAlt;  //����̷߳����Ի���

private:
	CTargetDlg *m_pTargetDlg;
private:

	virtual BOOL OnInitDialog();

	afx_msg void OnAddMapData();			    //���ص�ͼ����
	afx_msg void OnAddRasterImage();            //����դ��Ӱ������
	afx_msg void OnAddFlyLineData();	        //���ص�������

	afx_msg void OnMapSelect();				    //��ͼѡ��
	afx_msg void OnMapZoomIn();	                //��ͼ�Ŵ�
	afx_msg void OnMapZoomOut();	            //��ͼ��С
	afx_msg void OnMapMove();	                //��ͼ����	
	afx_msg void OnMapFullScreen();	            //��ͼȫ����ʾ
	afx_msg void OnSurvey();                    //��������
	afx_msg void OnEraseTrack();	            //�������
			void EraseTrack(int uavid);			//�������

	afx_msg void OnRemoveAllLayers();           //�������ͼ��
	afx_msg void OnLayerManage();               //ͼ�����
	afx_msg void OnShowLonLatInfo();            //��ʾ��γ����Ϣ

	afx_msg void OnRefreshInfo();               //ˢ����ʾ
	afx_msg void OnPrint();                     //��ӡ���
	afx_msg void OnShowCtrlMenu();              //��ʾ���߲˵�
	afx_msg void OnMenuLinePtCtrlShow();        //��ʾ���Բ˵�
	afx_msg void OnZhangCW();
	afx_msg BOOL OnToolTipsNotify(UINT id,NMHDR* pNMHDR,LRESULT* pResult);            //��ť������ʾ
	afx_msg void OnDesignLine();                //Design line
private:
	void Openlocalfile(CString file);
	CString GetFileType(CString file);
	CString GetFileName(CString file);

	void OnShowRMenu(); //��ʾ�Ҽ��˵�

	//���ܣ��Զ�����
	void AutomaticMoveMap(double lon, double lat);

	//���ܣ�����ͼ�����ʾ������
	LRESULT OnSetLayerStatus(WPARAM wParam, LPARAM lParam);

	//���ܣ��ر���ʾ���ȡ�γ�ȵ���������
	LRESULT OnCloseLonLatDialog(WPARAM wParam, LPARAM lParam);

	//���ܣ��ر���ʾ2��֮��ľ�γ���������������
	LRESULT OnCloseShowDistanceDialog(WPARAM wParam, LPARAM lParam);

	//���ܣ��������ڱ�����˻���18��������
	void CalculateUAVPolygonCoordinate(const double lon, const double lat, const double yaw);
	void CalculateUAVPolygonCoordinate_ADS(const double dX, const double dY, const double yaw);
	//���ܣ���ʸ��ͼ���ж�̬�������˻�
	//���룺����lon��γ��lat,�����yaw
	//˵��������ר�����ڻ������˻���ʸ����ͼ�㣬ÿ����ɾ���ϴα���Shp�������±��
	void DrawUAV( int uavid,const double lon, const double lat, const double yaw,bool control);
	void DrawUAV_ADS(const int uavNum, const int uavid, const double lon, const double lat, const double yaw, const bool control, const CString strPlaneName);
	//���ܣ����յ�������ƶԻ����˳���Ϣ�����д���
	LRESULT OnCloseLineDesignDialog(WPARAM wParam, LPARAM lParam);

	//���ܣ�����Ŀ�������λ�ü���Ŀ���ű�עλ��
	//���룺Ŀ���λ�þ��ȡ�targetLon��γ�ȡ�targetLat
	//�����Ŀ����עλ�þ��ȡ�labelLon��γ�ȡ�labelLat
	void TargetPos2LabelPos(double &labelLon, double &labelLat, const double targetLon, const double targetLat);

	//���ܣ��ڵ�ͼ��ʾ�����Ŀ���
	//���룺Ŀ���������targetInfo
	//	    ���ͼ��ID��drawLayerID
	//��������ͼ��ID��drawLayerID
	void DrawTarget(long &drawLayerID, const PtStruct targetInfo);

	//�����������Ŀ�������
	void OnEraseAllTargets();
	/*************************************by wu 2023.10.10****************************************************/

	//���ܣ���ע��Ͷ��
	LRESULT OnDrawKTPoint(WPARAM wParam, LPARAM lParam);

	//���ܣ������Ͷ��
	LRESULT OnClearKTPoint(WPARAM wParam, LPARAM lParam);

	//���ܣ���ʾ��Ͷ����
	LRESULT OnShowKTLine(WPARAM wParam, LPARAM lParam);

	//���ܣ���ʾ/�رտ�Ͷ����
	LRESULT OnShowKTLine6(WPARAM wParam, LPARAM lParam);

	//���ܣ�װ����Ͷ����
	LRESULT OnBindKTLine(WPARAM wParam, LPARAM lParam);

	//���ܣ�װ��Ӧ����
	LRESULT OnBindEPPoint(WPARAM wParam, LPARAM lParam);

	/*********************************************************************************************************/

	//���ܣ����Ӻ��㣬����󣬵�ͼ��ʾ�����к����ע
	LRESULT OnAddLinePoint(WPARAM wParam, LPARAM lParam);

	//���ܣ��༭���㣬����󣬵�ͼ��ʾ�����к����ע
	LRESULT OnEditLinePoint(WPARAM wParam, LPARAM lParam);

	//���ܣ�ɾ�����㣬����󣬵�ͼ��ʾ�����к����ע
	LRESULT OnDeleteLinePoint(WPARAM wParam, LPARAM lParam);

	//���ܣ����溽�ߣ�����󣬵�ͼ��ʾ�����к����ע
	LRESULT OnSaveLinePoints(WPARAM wParam, LPARAM lParam);

	//2016.02.19
// 	//���ܣ�������ʾ���ߺš�����š���ƫ�����Ϣ
// 	LRESULT DRAW_ZK(WPARAM wParam, LPARAM lParam);

	//���ܣ�������õĺ������ݣ��������㼰���ע������
	void DrawDesignLineData();

	//���ܣ�ɾ��������Ƶ����ݣ������������ݺͺ��߱������
	void RemoveDesignLineData();

	//���ܣ�����������ʱ��������
	void ClearDrawingInLineDesign();

	//���ܣ���shpfileͼ�������Ӻ�������
	//���룺ʸ��ͼ��ID��shpLayerID��ʸ��ͼ������shpType��0Ϊ��ͼ�㣻1Ϊ��ͼ�㣻2Ϊ��ͼ�㣩
	//      �������ݼ���pts���������ptNum
	void AddPoints2Shapfile(const long shpLayerID, const int shpType, const PtStruct *pts, const int ptNum);


	//���ܣ������յ�shpfileͼ��
	//���룺ʸ��ͼ������shpType��0Ϊ����ͼ�㣻1Ϊ��ͼ�㣻2Ϊ��ͼ�㣩
	//���룺������ɫdrawColor
	//�����ʸ��ͼ��ID��shpLayerID��
	void CreateEmptyShapfile(long &shpLayerID, const int shpType, const unsigned long drawColor);


	//���ܣ���shpfileͼ��������1����������
	//���룺ʸ��ͼ��ID��shpLayerID��shp����shpType
	//      �������ݣ����ȡ�lon; γ�ȡ�lat
	void AddOnePoint2Shapfile(const long shpLayerID, const int shpType, const double lon, const double lat);	


	//���ܣ����ݵ�ͼ�ؼ�����ʾ�ֱ����ƶ���ͼ�ؼ�
	//˵����������ʾ�ֱ��ʺ���Ʒֱ���֮��ļ��ι�ϵ
	//���룺�ƶ���ʾ������moveToArea
	void MoveGISShowWindow(const CRect moveToArea);

	//���ܣ���������������
	void CreateFloatToolBar();


	BOOL OnToolTipText(UINT,NMHDR* pNMHDR,LRESULT*   pResult);


	//���ܣ���shpfile��ͼ�������Ӻ�������
	//���룺ʸ��ͼ��ID��shpLayerID
	//      �������ݼ���pts���������ptNum
	void AddPoints2PointShapfile(const long shpLayerID, const PtStruct *pts, const int ptNum);


	//���ܣ���shpfile��ͼ�������Ӻ�������
	//���룺ʸ��ͼ��ID��shpLayerID
	//      �������ݼ���pts���������ptNum
	void AddPoints2LineShapfile(const long shpLayerID, const PtStruct *pts, const int ptNum);	

	//���ܣ�������ʽһ�����������͵���������
	void OnGuideMode1();

	//���ܣ�������ʽ�������������͵���������
	void OnGuideMode2();

	//���ܣ���ʾ1�ź���
	void OnShowLine1();

	//���ܣ���ʾ2�ź���
	void OnShowLine2();

	//���ܣ���ʾ3�ź���
	void OnShowLine3();

	//���ܣ���ʾ4�ź���
	void OnShowLine4();

	//���ܣ���ʾ5�ź���
	void OnShowLine5();

	//���ܣ������к���
	//���룺��������lineData
	void DrawFlyLine(const DrawLineDataStruct lineData);
	//���ܣ������к���(��������)
	//���룺��������lineData
	void DrawCopyFlyLine(const DrawLineDataStruct lineData);

	afx_msg void OnUpdateLineDisplay1(CCmdUI* pCmdUI);
	afx_msg void OnUpdateLineDisplay2(CCmdUI* pCmdUI);
	afx_msg void OnUpdateLineDisplay3(CCmdUI* pCmdUI);
	afx_msg void OnUpdateLineDisplay4(CCmdUI* pCmdUI);
	afx_msg void OnUpdateLineDisplay5(CCmdUI* pCmdUI);
	afx_msg void OnData();     //test




	//���ܣ�����Ѿ����ĺ���
	//���룺���߱��lineID����0��ʼ����
	void ClearDrawedLine(const int lineID);
	//���ܣ�����Ѿ����ĺ���(����Ӻ���)
	//���룺���߱��lineID����0��ʼ����
	void ClearDrawedCopyLine(const int lineID,const int sublineID);


	//���ܣ������ͼ���ע��Ϣ
	//���룺��ͼ��ID��layerID
	void ClearPointShape(long layerID);


	//���ܣ����ڵ�ʸ��ͼ����Ŀ���
	//���룺��ͼ������drawLayerID
	//		�����꣬����lon, γ��lat
	//      ������strPtName    
	//      �����ɫstrColor
	//      ���������ɫ��ֵfontColor
	void AddPointShapeLayer(long &drawLayerID, const double lon, const double lat,
		const CString strPtName, const CString strColor, unsigned long fontColor);


	//���ܣ��������ʱ����麽�ߵ���ʾ״̬
	LRESULT OnCheckFlyLineShowStatus(WPARAM wParam, LPARAM lParam);

	//���ܣ��ж�����Ƿ�ѡ�к���
	//���룺��������curpoint���������������x��y
	//����ֵ��true�������ѡ�к���
	//        false�������δѡ�к���
	bool BeMouseClickedLinePoint(const PtStruct curpoint, const long x, const long y);


	//���ܣ��Ƿ�����Զ�����
	void OnAutoMove();

	void OnUpdateAutoMov( CCmdUI *pCmdUI );


	void OnUpdateGuideMode1( CCmdUI *pCmdUI);
	void OnUpdateGuideMode2( CCmdUI *pCmdUI);
	int GetPtSel(int x,int y);//��ȡ���ѡȡ�ĵ��
	int GetPtSel(PtStruct* m_pLinePtStruct,int m_PointNum,int x,int y);  //���� by Wu 2023.09.14
	void DrawLineDesign();
	void DrawCanvas();
	/*!
	brief:���ñ�ע�����ԣ��ڴ���ͼ��ʱ�������ڸ�ͼ���עʱʹ��
	param: shapeIDͼ��ID��, fontSize��ע�����С��colorName��ɫ����,fontColor��ע������ɫ
	param: XOffset/YOffset��עλ��ƫ����
	return: void
	*/
	void SetLabelCategory(const long& shapeID, int fontSize = 12, unsigned long fontColor = RGB(255,0,0), 
		unsigned long frameBackColor = RGB(0,0,0), double XOffset = 0, double YOffset = 0);


	void ReadTargetIni(bool bDraw);
private:

	DECLARE_EVENTSINK_MAP()
	void MouseDownMap1(short Button, short Shift, long x, long y);
	void MouseMoveMap1(short Button, short Shift, long x, long y);	
	void MouseUpMap1(short Button, short Shift, long x, long y);
	void MouseDblClickMap1();

	afx_msg void OnFlyLineDesign();
public:
	afx_msg void OnClearpoint();
	afx_msg void OnEditpoint();
	afx_msg void OnEditProper();
	afx_msg void OnDelpoint();
	afx_msg void OnEditLine();       // -----by Wu 2023.09.14
	//afx_msg void OnBindline1();
	afx_msg void OnBindline2();
	afx_msg void OnLoadMyline1();
	afx_msg void OnBindline3();
	afx_msg void OnBindline4();
	afx_msg void OnBindline5();
	afx_msg void OnLayermng();
	afx_msg void OnAddgtarget();
	afx_msg void ShowModifyPointDlg();
	//	afx_msg void OnMouseHWheel(UINT nFlags, short zDelta, CPoint pt);
	afx_msg void OnNlinedesign();
	afx_msg void OnUpdateNlinedesign(CCmdUI *pCmdUI);
	afx_msg void OnShowBackLine();
	afx_msg void OnUpdateShowBackLine(CCmdUI *pCmdUI);
	afx_msg void OnShowHs11();
	afx_msg void OnUpdateShowHs11(CCmdUI *pCmdUI);
	afx_msg void OnBindHs11();
	afx_msg void OnShowTc12();
	afx_msg void OnBindTc12();
	afx_msg void OnUpdateShowTc12(CCmdUI *pCmdUI);
	afx_msg void OnSize(UINT nType, int cx, int cy);
	afx_msg void OnBindBackLine();

	
	afx_msg void OnMove(int x, int y);
	virtual BOOL OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult);
protected:
	afx_msg LRESULT OnSelUav(WPARAM wParam, LPARAM lParam);
public:
	afx_msg void OnAddTarget();
protected:
	afx_msg LRESULT OnDrawTarget(WPARAM wParam, LPARAM lParam);
public:
	afx_msg void OnShowWindow(BOOL bShow, UINT nStatus);
	afx_msg void OnTargetDelete();

	afx_msg LRESULT OnSendSelectTarget(WPARAM wParam, LPARAM lParam);    //�ڵ�ͼ��ѡ��

	afx_msg LRESULT OnSendCloseDemAlt(WPARAM wParam, LPARAM lParam);    //�ڵ�ͼ��ѡ��

	afx_msg LRESULT OnShowPointInMap(WPARAM wParam, LPARAM lParam);      //��ʾ�������ĵ���վλ��
	afx_msg LRESULT OnShowPointVisible(WPARAM wParam, LPARAM lParam);    //��ʾ��������
	afx_msg LRESULT OnShowPointNotVisible(WPARAM wParam, LPARAM lParam); //��ʾ����������
	afx_msg LRESULT OnSendClearShape(WPARAM wParam, LPARAM lParam);      //�����������Ͳ���������

	afx_msg LRESULT OnShowAreaVisible(WPARAM wParam, LPARAM lParam);    //��ʾʵʱ��������
	afx_msg LRESULT OnShowAreaNotVisible(WPARAM wParam, LPARAM lParam); //��ʾʵʱ����������
	afx_msg LRESULT OnShowClearArea(WPARAM wParam, LPARAM lParam);      //���ʵʱ����

	afx_msg LRESULT OnDelLineLayer(WPARAM wParam, LPARAM lParam);       //ɾ��ͨ�ӵȸ���ͼ��
	afx_msg LRESULT OnAddLineLayer(WPARAM wParam, LPARAM lParam);       //���ӵ㵽ͨ�ӵȸ���ͼ��

	afx_msg LRESULT OnSendRegionToGis(WPARAM wParam, LPARAM lParam);    //�����������GIS�Ի������Ϣ��Ӧ����

	afx_msg LRESULT OnDrawLinePoint(WPARAM wParam, LPARAM lParam);      //��溽���ϵĵ�

	afx_msg LRESULT OnShowCrashArea(WPARAM wParam, LPARAM lParam);      //��ʾʵʱ��ײ�������

	afx_msg LRESULT OnSendDrawFight(WPARAM wParam, LPARAM lParam);      //�������÷�Χ

	afx_msg LRESULT OnSendDrawDemRegion(WPARAM wParam, LPARAM lParam);  //���Ƹ߳�����

	afx_msg LRESULT OnZoomToLocation(WPARAM wParam,LPARAM lParam);		//���ߵ�ͼ��λ

	GISManager* m_gisManager;
	CDlgLightRegion m_dlgLightRegion;
	afx_msg void OnMenuLightRegion();

	//�Ƿ�ѡ�б��߳�����
	bool m_bPlotDemArea;

	//���ܣ����ڵ�ʸ��ͼ�������ֱ�ע
	//���룺��ͼ������drawLayerID
	//		�����꣬����lon, γ��lat
	//      ������strPtName    
	//      �����ɫstrColor
	//      ���������ɫ��ֵfontColor
	void AddTextToPointShapeLayer(long &drawLayerID, const double lon, const double lat,
		const CString strPtName, const CString strColor, unsigned long fontColor);

	//���ܣ���ʾ���������߶εľ���ͷ�λ
	void DrawLineLabel(long &drawLayerID, const double ptLon1, const double ptLat1, const double ptLon2, const double ptLat2);
	//���ܣ���ʾ���������߶εľ���ͷ�λ
	void DrawDistLabelEx(long drawLayerID, const double ptLon1, const double ptLat1, const double ptLon2, const double ptLat2,int pos=1);
	//����:��ʾ����֮��ľ���ͷ�λ
	void DrawDistLabel(long drawLayerID,const double pts[][2], const int ptNum,int pos=1);
	void DrawDistLebel(long drawLayerID,const PtStruct *pts, const int ptNum);
	afx_msg void OnMenuEntryPoint();
	afx_msg void OnMenuPlotdemArea();

	//��ǵ�Ի���
	CDlgMarker m_dlgMarker;

	//���ܣ��ı�CursorMode
	afx_msg LRESULT OnSetMapCursorMode(WPARAM wParam, LPARAM lParam);

	//���ܣ���ʾ�����ر�ǵ�
	afx_msg LRESULT OnDrawMarker(WPARAM wParam, LPARAM lParam);

	//�������վ���
	afx_msg void OnMenuClearGCS();

	//�Ƿ���ʾADS�ɻ���Ϣ
	bool m_bEnableShowADSB;
	afx_msg void OnMenuADSB();

	bool m_bWithin100km_ADS[MAX_PLANE_NUM_ADS];
	double m_dLon_ADS[MAX_PLANE_NUM_ADS];
	double m_dLat_ADS[MAX_PLANE_NUM_ADS];
	double m_dYaw_ADS[MAX_PLANE_NUM_ADS];
	CString m_strPlaneName_ADS[MAX_PLANE_NUM_ADS];
	CString m_strColor_ADS[MAX_PLANE_NUM_ADS];
	long m_fontColor_ADS[MAX_PLANE_NUM_ADS];

	int m_iCurrentADSid;
	int m_iTotalADSnum;

	UINT TimerID_Draw; //��ʱ�������Ʒɻ�

	//���ܣ���ʱ�������˻�
	afx_msg LRESULT OnTimerDrawUAV(WPARAM wParam, LPARAM lParam);

	afx_msg void OnShowLine6();
	afx_msg void OnUpdateShowLine6(CCmdUI *pCmdUI);
	afx_msg void OnShowLine7();
	afx_msg void OnUpdateShowLine7(CCmdUI *pCmdUI);
	afx_msg void OnShowLine8();
	afx_msg void OnUpdateShowLine8(CCmdUI *pCmdUI);
	afx_msg void OnBindline6();
	afx_msg void OnBindline7();
	afx_msg void OnBindline8();
	afx_msg void OnShowLine9();
	afx_msg void OnUpdateShowLine9(CCmdUI *pCmdUI);
	afx_msg void OnShowLine10();
	afx_msg void OnUpdateShowLine10(CCmdUI *pCmdUI);
	afx_msg void OnBindline9();
	afx_msg void OnBindline10();

	afx_msg void OnShowLine14();
	afx_msg void OnUpdateShowLine14(CCmdUI *pCmdUI);

	/****************************�������˵��¼�************************************/
	void OnDesignZone(); //���������
	void OnImportZone(); //�����������ļ�
	//��ʾ�޷���1-5
	void OnShowRestrictedZone1();
	void OnShowRestrictedZone2();
	void OnShowRestrictedZone3();
	void OnShowRestrictedZone4();
	void OnShowRestrictedZone5();
	//����������״̬
	void SetZoneState(long& zoneLayerID);
	//�����������˵���ѡ
	void SetMenuZoneCheck(CMenu& menu);
	//��ʾ������
	void OnShowNoFlyZone1();
	void OnShowNoFlyZone2();
	void OnShowNoFlyZone3();
	void OnShowNoFlyZone4();
	void OnShowNoFlyZone5();
	//װ��������
	void OnBindZone();

	/****************************��������************************************/
	//CCircleGuidence circleGuidenceDlg;
	//��ʾ��������װ���Ի���
	void OnShowCircleGuidenceDlg();

	/******************************���⺽��*******************************/
	DesignSurveyLineDlg* designSurveyLineDlg;
	//��������ͼ��
	long surveyRegionLayerID;
	long tmpSurveyRegionLayerID;
	long tmpSurveyLineLayerID;
	//�����
	vector<double> surveyRegionLons;
	vector<double> surveyRegionLats;
	//��ʾ��������
	afx_msg LRESULT OnShowSurveyRegion(WPARAM wParam,LPARAM lParam);   
	//��ʾ��溽��
	afx_msg LRESULT OnShowSurveyLine(WPARAM wParam,LPARAM lParam); 
	//װ����溽��
	afx_msg LRESULT OnBindSurveyLine(WPARAM wParam,LPARAM lParam); 
	//�����ʱͼ��
	afx_msg LRESULT OnClearTmpSurveyFeature(WPARAM wParam,LPARAM lParam); 
	void ShowSurveyRegion(long& layerID,vector<double>& xPoints,vector<double>& yPoints);
	//��ʾ���⺽��
	void ShowPolyline(long& layerID,vector<double>& xPoints,vector<double>& yPoints);
	//���ܣ���ʾ��溽����ƶԻ���
	void OnShowDesignSurveyLineDlg();
	/****************************�������һ������************************************/
	void GetMultiRouteLine(double azimuth,double lineInterval,int lineNumber,PtStruct* lineStruct,int nLinePts,vector<vector<PtStruct>>& resultLines,int hPtOffset=0);
	void SaveMultiRouteLine(CString pathDirName,double heightInterval,vector<CString>& savePathNameArr,const vector<vector<PtStruct>>& resultLines);
	void ShowMultiRouteSetting();

	/****************************����Ŀ��׷�ٲ���************************************/
	long testLayer;
	void OnShowTargetPoint(double lon,double lat,int pixelSize);
};

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_GISDLG_H__C9D2192D_FC93_4663_863B_24AB8906C0A2__INCLUDED_)