// GISDlg.cpp : implementation file
//

#include "stdafx.h"
#include "GISDlg.h"
#include <math.h>
#include "label.h"
//#include <atlimage.h>
#include "shapedrawingoptions.h"
#include "shape.h"
#include "labelcategory.h"
#include "ScreenCapture.h"
#include "SetSaveLineID.h"

//#include "8BMapDLL_type.h"

#include <fstream>
#include <sstream>
#include <iostream>
#include "vectortoraster.h"
#include "SaveLineEditSetting.h"
#include "ModifyLinePointDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

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

const double DEG2RAD = 0.017453292519943295769236907684886127134428718885417;

DWORD LineClr[15] = {RGB(0,255,0),RGB(255,0,0), RGB(0,0,255),RGB(128,128,0), RGB(0,0,0),RGB(0,255,0),RGB(255,0,0), RGB(0,0,255),RGB(128,128,0), RGB(0,0,0),RGB(0,255,0),RGB(255,0,0), RGB(0,0,255),RGB(124,252,0/*127,255,170*/), RGB(0,0,0)}; 

//³£·¢Êý¾Ý¶¨Ê±Æ÷»Øµ÷º¯Êý
void FAR PASCAL CatchMTimerDraw(WORD IDEvent, WORD uReserved, DWORD dwUser,DWORD dwReserved1,DWORD dwReserve2)
{
	::PostMessage(g_mapHwnd, WM_SEND_DRAWUAV, FALSE, 0);
}

CGISDlg::CGISDlg(CWnd* pParent /*=NULL*/)
: CBCGPDialog(CGISDlg::IDD, pParent)
{
	EnableVisualManagerStyle(TRUE, TRUE);
	//{{AFX_DATA_INIT(CGISDlg)
	// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT

	m_MsgHwnd = NULL;
	m_MsgID = 0;      //µ¼ÒýµãµÄÏûÏ¢ID
    m_LineLoadMsgID=0;  //×°¶©º½Ïß  
	m_drawPlanFlyLine = -1;

	//¾­Î³¶È¶Ô»°¿òÏÔʾ±êʶ
	m_bHaveShowLonLatDlg = false;

	//к½ÏßÉè¼Æ¶Ô»°¿òÏÔʾ±êʶ
	m_bHaveShowLineDesign = false;

	//2µãÖ®¼äµÄˮƽ¾àÀë½çÃæÏÔʾµÄ±êʶ
	m_bHaveShowDistanceDlg = false;

	//ÊÇ·ñÒѾ­¼ÓÔØÁ˵ØÍ¼
	m_bHaveAddMap = false;

	

	for (int i = 0;i<3;i++)
	{
		//º½¼£±ê»æÍ¼²ãID
		m_flyTrackLayerID[i] = -1;

		//UAVº½¼£±ê»æÍ¼²ãID
		m_UAVFlyTrackLayerID[i] = -1;

		//ÊÇ·ñÒѾ­±ê»æÁËÎÞÈË»úµÄ·ÉÐй켣
		m_bFirstDrawUAVTrack[i] = false;

		m_drawTrackPtNum[i] = 0;
	}
	//
	for (int i = 0;i<MAX_PLANE_NUM_ADS;i++)
	{
		//º½¼£±ê»æÍ¼²ãID
		//m_flyTrackLayerID[i] = -1;

		//UAVº½¼£±ê»æÍ¼²ãID
		m_UAVFlyTrackLayerID_ADS[i] = -1;

		m_bWithin100km_ADS[i] = false;
	}
	m_iCurrentADSid = 0;
	m_iTotalADSnum = 0;

	//µØÍ¼ÏÔÊ¾Çø¿í¶È¡¢¸ß¶Èµ¹Êý
	m_onePerWidth = 0;
	m_onePerHeight = 0;

	m_mapAreaHalfWidth = 0;
	m_mapAreaHalfHeight = 0;

	//º½ÏßÉè¼Æ×´Ì¬
	m_bLineDesign = false;

	//·ÉÐÐÆ÷±ê»æµÄº½µã¸öÊý
	m_ptNum = 18;

	//·ÉÐÐÆ÷
	memset(m_ppUavPtArray,0,sizeof(double)*18*2);
	memset(m_ppUavPtArray_ADS,0,sizeof(double)*18*2);

	m_ptPlane[0] = CPoint(0, -13);
	m_ptPlane[1] = CPoint(2, -9);
	m_ptPlane[2] = CPoint(2, -6);
	m_ptPlane[3] = CPoint(12, 4);
	m_ptPlane[4] = CPoint(12, 6);
	m_ptPlane[5] = CPoint(2, 2);
	m_ptPlane[6] = CPoint(1, 10);
	m_ptPlane[7] = CPoint(3, 12);
	m_ptPlane[8] = CPoint(3, 13);
	m_ptPlane[9] = CPoint(0, 13);
	m_ptPlane[10] = CPoint(-3, 13);
	m_ptPlane[11] = CPoint(-3, 12);
	m_ptPlane[12] = CPoint(-1, 10);
	m_ptPlane[13] = CPoint(-2, 2);
	m_ptPlane[14] = CPoint(-12, 6);
	m_ptPlane[15] = CPoint(-12, 4);
	m_ptPlane[16] = CPoint(-2, -6);
	m_ptPlane[17] = CPoint(-2, -9);

	m_ptPlane_ADS[0] = CPoint(0, -13);
	m_ptPlane_ADS[1] = CPoint(2, -9);
	m_ptPlane_ADS[2] = CPoint(2, -6);
	m_ptPlane_ADS[3] = CPoint(12, 4);
	m_ptPlane_ADS[4] = CPoint(12, 6);
	m_ptPlane_ADS[5] = CPoint(2, 2);
	m_ptPlane_ADS[6] = CPoint(1, 10);
	m_ptPlane_ADS[7] = CPoint(3, 12);
	m_ptPlane_ADS[8] = CPoint(3, 13);
	m_ptPlane_ADS[9] = CPoint(0, 13);
	m_ptPlane_ADS[10] = CPoint(-3, 13);
	m_ptPlane_ADS[11] = CPoint(-3, 12);
	m_ptPlane_ADS[12] = CPoint(-1, 10);
	m_ptPlane_ADS[13] = CPoint(-2, 2);
	m_ptPlane_ADS[14] = CPoint(-12, 6);
	m_ptPlane_ADS[15] = CPoint(-12, 4);
	m_ptPlane_ADS[16] = CPoint(-2, -6);
	m_ptPlane_ADS[17] = CPoint(-2, -9);

	//µØÍ¼ÏÔÊ¾ÇøÓò×óÉϽÇX×ø±ê
	m_leftTopX = 0;

	//µØÍ¼ÏÔÊ¾ÇøÓò×óÉϽÇY×ø±ê
	m_leftTopY = 0;

	//Ä¿±ê±ê»æSHPͼ²ãIDºÅ
	m_targetPtShapeID = 0;

	//ÊÇ·ñÒѾ­´´½¨¹ýSHPÄ¿±ê±êעͼ²ã
	m_bHaveCreateTargetShp = false;

	//±êעƫ²îÁ¿
	m_labelWarpValue = 15;

	//×ܹ²µÄÄ¿±êµã¸öÊý
	m_totalPointNum = 512;

	//к½ÏßÉè¼ÆµÄº½µãµÄ×î´ó¸öÊý	2016.01.06
	m_MaxNumofLinePt = 255;
// 	m_pNewDesignLineStruct = new tmpPT[m_MaxNumofLinePt];				//º½µãÊý¾Ý
// 	memset(m_pNewDesignLineStruct, 0, sizeof(tmpPT)*m_MaxNumofLinePt);	//³õʼ»¯

	m_pNewDesignLineStruct = new PtStruct[m_MaxNumofLinePt];				//º½µãÊý¾Ý
	memset(m_pNewDesignLineStruct, 0, sizeof(PtStruct)*m_MaxNumofLinePt);	//³õʼ»¯

	m_NowNumLineDesign = 0;												//µ±Ç°º½µãµÄ¸öÊý

	m_lineMaxPointNum = 255;											//Ò»Ìõº½Ïß×î´óµÄº½µã¸öÊý
	m_pDesignLineStruct = new PtStruct[m_lineMaxPointNum];				//º½µãÊý¾Ý
	memset(m_pDesignLineStruct, 0, sizeof(PtStruct)*m_lineMaxPointNum);  //³õʼ»¯
	m_designLinePointNum = 0;					  						 //µ±Ç°º½µã¸öÊý

	//º½Ïß±ê»æÍ¼²ãID³õʼ»¯
	m_designLineLayerID = -1;
	m_designLineLayerID2 = -1;

	//Ä¿±êµã±ê»æÍ¼²ãµÄIDºÅ
	m_targetDrawLayerID = -1;

	//ÁÙʱ±ê»æÍ¼²ã
	m_tempLayerID = -1; 
	/****************ÐÂÔö<±à¼­º½Ïß>¹¦ÄÜ***********************************/
	/*****by Wu 2023.09.11*******/
	//Ñ¡ÖиßÁÁͼ²ã
	m_highLightLineLayerID = -1;
	//µØÐεãͼ²ã
	m_tempTerrainPointsLayerID = -1;
	m_tempshpPointLayerID = -1;
	m_tempshpLineLayerID = -1;
	//´æ´¢ÅÌÐýµãID
	circlingPointID = -1;   
	m_lineSelectedID = -1;

	GLOBAL_X = 0;
	GLOBAL_Y = 0;

	//±à¼­»ØÊÕº½Ïß״̬
	m_bEditLine = false;
	//»ØÊÕº½ÏßÏÔʾ״̬
	//m_bShowBackLine = false;
	//ÍÏ×§ÒÆ¶¯±êÖ¾
	m_dragFlag = false;
	// Ñ¡Ôñģʽ
	m_bSelectFeatureFlag = false;

	//
	m_KTPtShpLayerID = -1;  //¿ÕͶµãͼ²ã
	//m_pDesignKTLineDlg = NULL;
	/****************/

	/*****By Wu 2023.10.16********/
	m_distLabelLayer = -1; //±à¼­Ê±ÏÔʾ·½Î»½ÇºÍ¾àÀë

	//¶àµã²â¾àÏà¹Ø±äÁ¿³õʼ»¯
	m_bPolylineMeasure = false;  //¶àµã²â¾à±êÖ¾
	m_numPolylineMeasurePts = 0;     //²â¾àµãÊý
	m_bMeasureDrag = false;   //ÊÇ·ñ¿ÉÒÔÀ­³¶
	//²ÎÓë¾àÀë²âÁ¿µÄÁ¬Ïß¶Îͼ²ã
	m_polylineMeasureLineLayerID = -1;

	//±ê×¢¾àÀë²âÁ¿½á¹û±ê×¢µÄͼ²ã
	m_polylineMeasureLabelLayerID = -1;

	//²ÎÓë¾àÀë²âÁ¿µÄµãÐòºÅµÄ±êעͼ²ã
	m_polylineMeasurePtLayerID[0] = -1;
	m_polylineMeasurePtLayerID[1] = -1;
	/************************************************************/
	//±êʶÊÇ·ñÔÚÁÙʱͼ²ãÉϽøÐбê×¢
	m_beTemLayerDrawing = true;

	//µ±Ç°Éè¼ÆµÄº½µãÊý¾Ý	
	memset(&m_curDesignPoint, 0, sizeof(PtStruct));

	//ÊÇ·ñÒѾ­Ôö¼ÓÐµĺ½µã
	m_bAddNewPoint = false;

	int i = 0;
	int j = 0;

	//////////////////Ó뺽ÏßÏÔʾÏà¹ØµÄÊý¾ÝÌå/////////////////////
	m_totalFlyLines = 14;     //×ܵķÉÐк½ÏßÊýÔ­5¸ÄΪ14 20221121

	DrawLineDataStruct m_pFlyLines[14]; //·ÉÐк½ÏßÊý¾ÝÌå Ô­5 ¸ÄΪ12
	memset(m_pFlyLines, 0, sizeof(DrawLineDataStruct)*m_totalFlyLines);


	m_flyLineNum = 0;		 //·ÉÐк½ÏßÊý

	//·ÉÐк½Ïß±ê×¢²ã
	m_flyLinesLayerID = -1;

	//ÊÇ·ñÒѾ­´´½¨ÁËÎÞÈË»ú±ê»æµÄShpÃæÍ¼²ã
	m_bHaveCreateUAVShpLayer = false;

	//ÎÞÈË»ú±ê»æµÄShpÃæÍ¼²ãID
	m_uavShapileLayerID = -1;

	//º½Ïß±ê»æÍ¼²ãµÄShpͼ²ãIDÊý×飬ÿÌõº½Ïß¾ßÓÐ2¸ö±ê»æÍ¼²ã£º1¸öͼ²ãΪº½µã¡¢ÁíÒ»¸öͼ²ãΪº½Ïß//5¸ÄΪ8 20221121
	long m_ppPlanLineShpLayerIDArr[14][2];
	for (i=0; i<14; i++)
	{
		for (j=0; j<2; j++)
		{
			m_ppPlanLineShpLayerIDArr[i][j] = -1;
		}
	}

	//º½ÏßÊÇ·ñÒѾ­±ê»æµÄ±êÖ¾
	for (i=0; i<14; i++)
	{
		m_pHaveDrawLineFlag[i] = false;
	}

	m_pLineSectDlg = NULL;
	m_pTargetDlg = NULL;

	//µÚÒ»¸öº½µãÊÇ·ñÒѾ­±ê»æ
	m_bDesignFirstPoint = true;

	m_pFlyLineDesign = NULL;

	m_pLineDesign = NULL;

	m_bShowToolBar = false;

	//µØÃæÕ¾Î»ÖÃ
	g_gcsLon = 0;   //¾­¶È
	g_gcsLat = 0;   //γ¶È
	g_gcsAlt = 0;   //¸ß¶È

	memset(&m_guidePtInfo, 0, sizeof(GuidePointData));

	//µØÃæÕ¾Î»ÖõãʸÁ¿Í¼²ã
	m_gcsPtShpLayerID = -1;

	//µ¼ÒýµãλÖõãʸÁ¿Í¼²ã
	m_guidePtShpLayerID = -1;

	//µ±Ç°´ý±à¼­µÄº½µãÊý¾Ý
	memset(&m_curEditLinePoint, 0, sizeof(PtStruct));
	//Ä¿±êµãʸÁ¿Í¼²ãIDºÅ	
	//memset(m_pTargetShapfileID, 0, sizeof(long)*MAX_TARGET_NUM);

	//¹¤¾ßÀ¸¸ß¶È
	m_toolbarHeight = 0;

	//ÊÇ·ñ½øÐÐ×Ô¶¯ÂþÓεıêʶ
	m_bAutoMove = true;

	memset(m_pCallBackShapfileID, 0, sizeof(long)*255);

	//µ¼Òýµãģʽ
	m_guidePointMode = 0;

	m_bGuideMode =false ;//µ¼Òý·ÉÐÐģʽĬÈÏΪfalse
	///////
	m_bSetPointModel=false;     //ûÓд¦ÔÚÖõ㹤×÷ģʽ
	m_bEndSetPoint=false;
	m_iPtSel=-1;

	m_bLDSetPoint = FALSE;

	m_canvasLayerID = -1;

	memset(&m_infoData,0,sizeof(m_infoData));

	m_targetSelID = 0;

	m_bSelectDropPoint = false;

	m_gisManager = GISManager::getInstance();

	for (int i=0;i<g_iDemAltPtNum;i++)
	{
		g_lDemAltLayerID[i]  = -1;
		g_lDemAltDisLayerID[i] = -1;
		g_lDemPtNumLayerID[i] = -1;
	}

	m_bPlotDemArea = false;

	m_bEnableShowADSB = true;

}


CGISDlg::~CGISDlg()
{
	timeKillEvent(TimerID_Draw);

	if(m_Layer != NULL) 
	{
		delete m_Layer;
		m_Layer = NULL;
	}

	if (m_pLonLatDlg != NULL)
	{
		delete m_pLonLatDlg;
		m_pLonLatDlg = NULL;
	}

	if (m_pHZDistanceDlg != NULL)
	{
		delete m_pHZDistanceDlg;
		m_pHZDistanceDlg = NULL;
	}

	if (m_pFlyLineDesign != NULL)
	{
		delete m_pFlyLineDesign;
		m_pFlyLineDesign = NULL;
	}

	if (m_pLineDesign != NULL)
	{
		delete m_pLineDesign;
		m_pLineDesign = NULL;
	}


	if (m_pDesignLineStruct != NULL)
	{
		delete []m_pDesignLineStruct;
		m_pDesignLineStruct = NULL;
	}

	//2016.01.06
	if (m_pNewDesignLineStruct != NULL)
	{
		delete []m_pNewDesignLineStruct;
		m_pNewDesignLineStruct = NULL;
	}

	if (m_pLineSectDlg != NULL)
	{
		delete m_pLineSectDlg;
		m_pLineSectDlg = NULL;
	}	
	
	if (m_pTargetDlg != NULL)
	{
		delete m_pTargetDlg;
		m_pTargetDlg = NULL;
	}

	if(m_gisManager != NULL)
	{
		m_gisManager->DestroyObject();
		m_gisManager = NULL;
	}
}


void CGISDlg::DoDataExchange(CDataExchange* pDX)
{
	CBCGPDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_MAP1, m_map);
}


BEGIN_MESSAGE_MAP(CGISDlg, CBCGPDialog)

	//{{AFX_MSG_MAP(CGISDlg)
	ON_WM_MOUSEMOVE()
//	ON_WM_MOUSEWHEEL()
	ON_COMMAND(ID_ADDPOINT, OnAddpoint)
	ON_MESSAGE(WM_SET_LAYER_STATUS, OnSetLayerStatus)
	ON_MESSAGE(WM_CLOSE_LONLAT_DIALOG, OnCloseLonLatDialog)
	ON_MESSAGE(WM_CLOSE_DISTANCE_DIALOG, OnCloseShowDistanceDialog)
	ON_MESSAGE(WM_CLOSE_LINEDESIGN_DIALOG, OnCloseLineDesignDialog) 
	ON_MESSAGE(WM_ADD_LINE_POINT, OnAddLinePoint)			  //Ôö¼Óº½µã
	ON_MESSAGE(WM_EDIT_LINE_POINT, OnEditLinePoint)			  //±à¼­º½µã
	ON_MESSAGE(WM_DELETE_LINE_POINT, OnDeleteLinePoint) 	  //ɾ³ýº½µã
	ON_MESSAGE(WM_SAVE_LINE_POINTS, OnSaveLinePoints) 		  //±£´æº½Ïß       
	ON_COMMAND(IDT_BUTTON1, OnAddMapData)					 //¼ÓÔØµØÍ¼Êý¾Ý
	ON_COMMAND(IDT_BUTTON2, OnAddRasterImage)				 //¼ÓÔØÕ¤¸ñÓ°ÏñÊý¾Ý
	ON_COMMAND(IDT_BUTTON3, OnAddFlyLineData)				 //¼ÓÔØº½ÏßÊý¾Ý
	ON_COMMAND(IDT_BUTTON4, OnLayerManage)					 //ͼ²ã¹ÜÀí
	ON_COMMAND(IDT_BUTTON5, OnRemoveAllLayers)				 //Çå³ýËùÓÐͼ²ã
 	ON_COMMAND(IDM_DESIGN_MYFLYLINE, OnFlyLineDesign)		//º½ÏßÉè¼Æ		2015.11.25	ÆÁ±Îº½ÏßÉè¼Æ¶Ô»°¿ò
	ON_COMMAND(IDT_BUTTON6, OnMenuLinePtCtrlShow/*OnMapSelect*/)					 //µØÍ¼Ñ¡Ôñ
	ON_COMMAND(IDT_BUTTON7, OnMapZoomIn)					 //µØÍ¼·Å´ó
	ON_COMMAND(IDT_BUTTON8, OnMapZoomOut)					 //µØÍ¼ËõС
	ON_COMMAND(IDT_BUTTON9, OnMapMove)						 //µØÍ¼ÂþÓÎ	
	ON_COMMAND(IDT_BUTTON10, OnMapFullScreen)				 //µØÍ¼È«¾°ÏÔʾ
	ON_COMMAND(IDT_BUTTON11, OnEraseTrack)					 //Çå³ýº½¼£
	ON_COMMAND(IDT_BUTTON12, OnShowLonLatInfo)				 //ÏÔʾ¾­Î³¶ÈÐÅÏ¢
	ON_COMMAND(IDT_BUTTON13, OnSurvey)						 //²âÁ¿2µãÖ®¼äµÄ¾àÀë
	ON_COMMAND(IDT_BUTTON14, OnShowCtrlMenu/*OnPrint*/)			//º½ÏßÊôÐÔ		  	 //´òÓ¡Êä³ö	
	ON_COMMAND(IDT_BUTTON15, OnZhangCW)					  	 //´òÓ¡Êä³ö	
	ON_NOTIFY_EX(TTN_NEEDTEXT,0,OnToolTipsNotify)			 //°´Å¥ÎÄ×ÖÌáʾ	
	ON_COMMAND(IDM_GUIDE_FLY1, OnGuideMode1)
	ON_COMMAND(IDM_DESIGN_MYFLYLINE, OnDesignLine)
	ON_UPDATE_COMMAND_UI(IDM_GUIDE_FLY1, OnUpdateGuideMode1)
	ON_COMMAND(IDM_GUIDE_FLY2, OnGuideMode2)
	ON_UPDATE_COMMAND_UI(IDM_GUIDE_FLY2, OnUpdateGuideMode2)
	ON_COMMAND(IDM_SHOW_LINE1, OnShowLine1)
	ON_UPDATE_COMMAND_UI(IDM_SHOW_LINE1, OnUpdateLineDisplay1)
	ON_COMMAND(IDM_SHOW_LINE2, OnShowLine2)
	ON_UPDATE_COMMAND_UI(IDM_SHOW_LINE2, OnUpdateLineDisplay2)
	ON_COMMAND(IDM_SHOW_LINE3, OnShowLine3)
	ON_UPDATE_COMMAND_UI(IDM_SHOW_LINE3, OnUpdateLineDisplay3)
	ON_COMMAND(IDM_SHOW_LINE4, OnShowLine4)
	ON_UPDATE_COMMAND_UI(IDM_SHOW_LINE4, OnUpdateLineDisplay4)
	ON_COMMAND(IDM_SHOW_LINE5, OnShowLine5)
	ON_UPDATE_COMMAND_UI(IDM_SHOW_LINE5, OnUpdateLineDisplay5)
	ON_COMMAND(IDM_AUTO_MOVE, OnAutoMove)
	ON_UPDATE_COMMAND_UI(IDM_AUTO_MOVE, OnUpdateAutoMov)
	ON_MESSAGE(WM_CHECK_FLY_LINE_STATUS, OnCheckFlyLineShowStatus)
	ON_COMMAND(IDM_REMOVE_GUIDE_DRAW, OnRemoveGuidePtDraw)
	ON_COMMAND(IDM_OPEN_FLYLINE, OnAddFlyLineData)
	ON_COMMAND(ID_ENDDESIGN, OnEnddesign)
	//}}AFX_MSG_MAP

	ON_COMMAND(ID_CLEARPOINT, OnClearpoint)
	ON_COMMAND(ID_EDITPOINT, OnEditpoint)
	ON_COMMAND(ID_DELPOINT, OnDelpoint)
	//ON_COMMAND(IDM_BINDLINE1, &CGISDlg::OnBindline1)
	ON_COMMAND(IDM_BINDLINE2, OnBindline2)
	ON_COMMAND(ID_LOAD_MYLINE1, OnLoadMyline1)
	ON_COMMAND(IDM_BINDLINE3, OnBindline3)
	ON_COMMAND(IDM_BINDLINE4, OnBindline4)
	ON_COMMAND(IDM_BINDLINE5, OnBindline5)
	ON_COMMAND(IDM_LAYERMNG, OnLayermng)
	ON_COMMAND(IDM_ADDGTARGET, OnAddgtarget)

	//ON_MESSAGE(MESSAGE_DRAWZK, &CGISDlg::DRAW_ZK)

	//	ON_WM_MOUSEHWHEEL()
	ON_COMMAND(ID_NLINEDESIGN, &CGISDlg::OnNlinedesign)
	ON_UPDATE_COMMAND_UI(ID_NLINEDESIGN, &CGISDlg::OnUpdateNlinedesign)
	ON_COMMAND(ID_SHOW_BACKLINE, &CGISDlg::OnShowBackLine)
	ON_UPDATE_COMMAND_UI(ID_SHOW_BACKLINE, &CGISDlg::OnUpdateShowBackLine)
	ON_COMMAND(ID_SHOW_HS11, &CGISDlg::OnShowHs11)
	ON_UPDATE_COMMAND_UI(ID_SHOW_HS11, &CGISDlg::OnUpdateShowHs11)
	ON_COMMAND(ID_BIND_HS11, &CGISDlg::OnBindHs11)
	ON_COMMAND(ID_SHOW_TC12, &CGISDlg::OnShowTc12)
	ON_COMMAND(ID_BIND_TC12, &CGISDlg::OnBindTc12)
	ON_UPDATE_COMMAND_UI(ID_SHOW_TC12, &CGISDlg::OnUpdateShowTc12)
	ON_WM_SIZE()
	ON_COMMAND(ID_BIND_BACKLINE, &CGISDlg::OnBindBackLine)
	ON_WM_MOVE()
	ON_MESSAGE(WM_SEL_UAV, &CGISDlg::OnSelUav)
	ON_COMMAND(ID_ADD_TARGET, &CGISDlg::OnAddTarget)
	ON_MESSAGE(WM_DRAW_TARGET, &CGISDlg::OnDrawTarget)
	ON_WM_SHOWWINDOW()
	ON_COMMAND(ID_TARGET_DELETE, &CGISDlg::OnTargetDelete)

	ON_MESSAGE(WM_SEND_SELECTTARGET, &CGISDlg::OnSendSelectTarget)
	ON_MESSAGE(WM_SEND_CLOSEDEMALT, &CGISDlg::OnSendCloseDemAlt)

	ON_MESSAGE(WM_SHOW_POINTINMAP, &CGISDlg::OnShowPointInMap)
	ON_MESSAGE(WM_SHOW_ISVISIBLE, &CGISDlg::OnShowPointVisible)
	ON_MESSAGE(WM_SHOW_NOTVISIBLE, &CGISDlg::OnShowPointNotVisible)
	ON_MESSAGE(WM_SEND_CLEARSHAPE, &CGISDlg::OnSendClearShape)

	ON_MESSAGE(WM_SHOW_VISI_REALTIME, &CGISDlg::OnShowAreaVisible)
	ON_MESSAGE(WM_SHOW_NOTVISI_REALTIME, &CGISDlg::OnShowAreaNotVisible)
	ON_MESSAGE(WM_SHOW_VISI_DELETE, &CGISDlg::OnShowClearArea)
	ON_MESSAGE(WM_ADD_LINELAYER, &CGISDlg::OnAddLineLayer)
	ON_MESSAGE(WM_DEL_LINELAYER, &CGISDlg::OnDelLineLayer)
	ON_MESSAGE(WM_SEND_REGIONTOGIS, &CGISDlg::OnSendRegionToGis)
	ON_MESSAGE(WM_DRAW_LINEPOINT, &CGISDlg::OnDrawLinePoint)
	ON_MESSAGE(WM_SHOW_CRASH_REALTIME, &CGISDlg::OnShowCrashArea)
	ON_MESSAGE(WM_SEND_DRAWFIGHT, &CGISDlg::OnSendDrawFight)
	ON_MESSAGE(WM_SEND_DRAWDEMREGION, &CGISDlg::OnSendDrawDemRegion)

	ON_MESSAGE(WM_SEND_MAPLOCATION,&CGISDlg::OnZoomToLocation)

	ON_COMMAND(ID__MENU_LIGHTREGION, &CGISDlg::OnMenuLightRegion)
	ON_COMMAND(ID_MENU_ENTRYPOINT, &CGISDlg::OnMenuEntryPoint)
	ON_COMMAND(ID_MENU_PLOTDEMAREA, &CGISDlg::OnMenuPlotdemArea)

	ON_MESSAGE(WM_SEND_MAPCURSORMODE, &CGISDlg::OnSetMapCursorMode) //ÉèÖÃMap CursorMode
	ON_MESSAGE(WM_SEND_DRAWMARKER, &CGISDlg::OnDrawMarker) //ÏÔʾ»òÒþ²Ø±ê¼Çµã
	ON_COMMAND(ID_MENU_CLEARGCS, &CGISDlg::OnMenuClearGCS)
	ON_COMMAND(ID_MENU_ADSB, &CGISDlg::OnMenuADSB)

	ON_MESSAGE(WM_SEND_DRAWUAV, &CGISDlg::OnTimerDrawUAV) //»æÖÆÎÞÈË»ú

	//º½Ï߱༭    // -----by Wu 2023.09.14
	ON_COMMAND(ID_SELECT_LINE, OnMapSelect)  //Ñ¡Ôñº½Ïß
	ON_COMMAND(ID_EDIT_NODE, OnEditLine)  //±à¼­º½Ïß
	ON_COMMAND(ID_EDIT_LINE, ShowModifyPointDlg)	//Ð޸ĺ½µã
	ON_COMMAND(ID_EDIT_SAVE, ShowEditSaveDlg)	//±£´æ±à¼­
/*
	ON_COMMAND(ID_MODIFY_LINEPOINT, OnMapSelect);  //Ð޸ĺ½µãº½Ïß
	ON_COMMAND(ID_EDIT_SAVE, OnMapSelect);  //±£´æ±à¼­*/
	

/*
	//ÐÂÔöº½Ïß6-8
	ON_COMMAND(IDM_SHOW_LINE6, &CGISDlg::OnShowLine6)
	ON_UPDATE_COMMAND_UI(IDM_SHOW_LINE6, &CGISDlg::OnUpdateShowLine6)
	ON_COMMAND(IDM_SHOW_LINE7, &CGISDlg::OnShowLine7)
	ON_UPDATE_COMMAND_UI(IDM_SHOW_LINE7, &CGISDlg::OnUpdateShowLine7)
	ON_COMMAND(IDM_SHOW_LINE8, &CGISDlg::OnShowLine8)
	ON_UPDATE_COMMAND_UI(IDM_SHOW_LINE8, &CGISDlg::OnUpdateShowLine8)
	ON_COMMAND(IDM_BINDLINE6, &CGISDlg::OnBindline6)
	ON_COMMAND(IDM_BINDLINE7, &CGISDlg::OnBindline7)
	ON_COMMAND(IDM_BINDLINE8, &CGISDlg::OnBindline8)
	ON_COMMAND(IDM_SHOW_LINE9, &CGISDlg::OnShowLine9)
	ON_UPDATE_COMMAND_UI(IDM_SHOW_LINE9, &CGISDlg::OnUpdateShowLine9)
	ON_COMMAND(IDM_SHOW_LINE10, &CGISDlg::OnShowLine10)
	ON_UPDATE_COMMAND_UI(IDM_SHOW_LINE10, &CGISDlg::OnUpdateShowLine10)
	ON_COMMAND(IDM_BINDLINE9, &CGISDlg::OnBindline9)
	ON_COMMAND(IDM_BINDLINE10, &CGISDlg::OnBindline10)*/
	//¿ÕͶº½Ïß
	ON_COMMAND(IDM_SHOW_LINE14, &CGISDlg::OnShowLine14)
	ON_UPDATE_COMMAND_UI(IDM_SHOW_LINE14, &CGISDlg::OnUpdateShowLine14)
	END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CGISDlg message handlers


BOOL CGISDlg::OnInitDialog()
{
	CBCGPDialog::OnInitDialog();	

	SetWindowPos(NULL,0 ,0 ,600, 700, SWP_NOZORDER|SWP_NOMOVE);

	//¹¦ÄÜ£º´´½¨¸¡¶¯¹¤¾ßÀ¸
	CreateFloatToolBar();
	//´°¿Ú¾ä±ú
	g_mapHwnd = this->GetSafeHwnd();

	//´´½¨Í¼²ã¹ÜÀí¶Ô»°¿ò
	m_Layer = new CMapLayerManage();
	m_Layer->Create(IDD_DIALOG_LAYER_MANAGE); 

	//ÔÚÕû¸öÈ«ÆÁÄ»ÖеÄGISÏÔÊ¾ÇøÓò
	m_gisAreaInScreen = m_rcGISArea;
	m_gisAreaInScreen.top += 32;

	//´´½¨¾­Î³¶È¶Ô»°¿ò
	m_pLonLatDlg = new CLonLatDlg();
	m_pLonLatDlg->MoveToGivenArea(m_gisAreaInScreen);
	m_pLonLatDlg->Create(IDD_XY_DIALOG); 

	//2µãÖ®¼äµÄˮƽ¾àÀëÏÔʾ¶Ô»°¿ò¶ÔÏó
	m_pHZDistanceDlg = new CShowHZDistanceDlg();
	m_pHZDistanceDlg->MoveToGivenArea(m_gisAreaInScreen);
	m_pHZDistanceDlg->Create(IDD_DISTANCE_DIALOG); 

	//º½ÏßÉè¼Æ¶Ô»°¿ò
	m_pFlyLineDesign = new CFlyLineDesign();
	m_pFlyLineDesign->MoveToGivenArea(m_gisAreaInScreen);
	m_pFlyLineDesign->Create(IDD_DIALOG_FLYLINE_DESIGN);

// 	m_pLineDesign = new CLineDesign();
// 	m_pLineDesign->Create(IDD_DLG_LINEDESIGN);

	//º½ÏßÉè¼ÆÊ±£¬º½¶ÎÊý¾Ý¶Ô»°¿ò
	m_pLineSectDlg = new CLineSectDisAZDlg();
	m_pLineSectDlg->MoveToGivenArea(m_gisAreaInScreen);
	m_pLineSectDlg->Create(IDD_DIALOG_LINE_SECT);

	m_pTargetDlg = new CTargetDlg();
	m_pTargetDlg->Create(IDD_DIALOG_TARGET,this);

	//´´½¨±ê¼Çµã¶Ô»°¿ò
	m_dlgMarker.Create(IDD_DIALOG_MARKER,this);
	m_dlgMarker.MoveToGivenArea(m_gisAreaInScreen);

	//µØÍ¼ÏÔÊ¾Çø¿í¶È¡¢¸ß¶Èµ¹Êý
	m_onePerWidth = 1.0/m_rcGISArea.Width();
	m_onePerHeight = 1.0/m_rcGISArea.Height();

	//µØÍ¼ÏÔÊ¾Çø¿í¶È¡¢¸ß¶È
	m_mapAreaHalfWidth = 0.5*m_rcGISArea.Width();
	m_mapAreaHalfHeight = 0.5*m_rcGISArea.Height();

	//²âÊÔ
	m_rcgisSmallArea = m_rcGISArea;
	m_rcgisSmallArea.top = 24;

	//¹¤¾ßÀ¸¸ß¶È
	m_toolbarHeight = m_rcgisSmallArea.top;

	m_ToolBar.ShowWindow(SW_SHOW);  
    m_map.SetCursorMode(mapWindow::tkCursorMode::cmNone); 

	m_gisManager->m_pMapCwnd = GetDlgItem(IDC_MAP1);
	m_gisManager->setMap(&m_map);

	m_dlgLightRegion.Create(IDD_DIALOG_LIGHTREGION,this);

	m_DlgDemAlt.Create(IDD_DIALOG_DEMALT,this);

	//¶àýÌ嶨ʱÆ÷
	timeBeginPeriod(0);
	TimerID_Draw = timeSetEvent(500, 1, (LPTIMECALLBACK)CatchMTimerDraw, (DWORD)NULL, TIME_PERIODIC);
	if(!TimerID_Draw)
	{
		BCGPMessageBox(_T("¶àýÌ嶨ʱÆ÷Æô¶¯´íÎó!"),MB_OK|MB_ICONEXCLAMATION,0);
	}

	//¼ÓÔØÔÚÏßµØÍ¼·þÎñ
	AddTianDiTuService();
	//¼¤»îÔÚÏßµØÍ¼·þÎñ
	LoadTianDiTuService();

	m_map.SetScalebarVisible(true);  //ÏÔʾ±ÈÀý³ß

	return TRUE;
}

//¹¦ÄÜ£º¼ÓÔØÌìµØÍ¼ÔÚÏßÓ°ÏñµØÍ¼·þÎñ
void CGISDlg::AddTianDiTuService()
{
	string baseurl = "http://{switch:t0,t1,t2,t3,t4,t5,t6,t7}.tianditu.gov.cn/img_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=img&tileMatrixSet=w&TileMatrix={zoom}&TileRow={y}&TileCol={x}&style=default&format=tiles&tk=";
	//string baseurl_vec = "http://t0.tianditu.gov.cn/vec_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=vec&tileMatrixSet=w&TileMatrix={zoom}&TileRow={y}&TileCol={x}&style=default&format=tiles&tk=";
	string key = "53d93c1a8b3400b050817ac001bdb60e";//¸öÈËKey£¬ÈÕ·ÃÎÊÉÏÏÞ1w´Î¡£
	//string key = "5ff7526440d3a7dab78037697c4679fa";

	mapWindow::ITiles* pTiles = m_map.GetTiles();
	mapWindow::ITileProvidersPtr providers = pTiles->GetProviders();

	//pTiles->ClearCache(mapWindow::tkCacheType::Disk);//Çå³ý´ÅÅÌTiles»º´æ
	//int providerId = (int)mapWindow::tkTileProvider::ProviderCustom + 1;    // (1024 + 1) should be unique across application runs in case disk caching is used
	int providerId = mapWindow::tkTileProvider::ProviderCustom;
	_bstr_t copyright = "TianDiTu,All Rights Reserved";

	bool su = providers->Add(providerId, "TianDiTu",
		(baseurl+key).c_str(),//(_bstr_t)url.c_str(),
		mapWindow::tkTileProjection::SphericalMercator, 0, 18);//,"TianDiTu,All Rights Reserved"

	m_map.put_ZoomBarMaxZoom(18);//ÉèÖÃËõ·ÅÌõ×î´ó18¼¶
	//pTiles->ProviderId = providerId; //¼¤»îµ±Ç°·þÎñ
	//Tile»º´æÉèÖÃ
	//pTiles->put_UseCache(mapWindow::tkCacheType::Disk,true);//ĬÈÏÇé¿öÏ´¦ÓÚ´ò¿ª×´Ì¬
	//pTiles->put_UseCache(mapWindow::tkCacheType::RAM, true);//ĬÈÏÇé¿öÏ´¦ÓÚ´ò¿ª×´Ì¬
	//½«ÐÂÏÂÔØµÄÇÐÆ¬Ìí¼Óµ½»º´æÖÐ
	//pTiles->put_DoCaching(mapWindow::tkCacheType::RAM, true);//ĬÈÏÇé¿öÏ´¦ÓÚ´ò¿ª×´Ì¬
	 pTiles->put_DoCaching(mapWindow::tkCacheType::Disk,true);//Èç¹ûĬÈϹرÕ
	//Èç¹û²»´æÔÚ¾ßÓдËÃû³ÆµÄÎļþ£¬Ôò»á×Ô¶¯´´½¨¸ÃÎļþ¡£Ò»´ÎÖ»ÄÜʹÓÃÒ»¸öÊý¾Ý¿â¡£
	//pTiles->put_UseCache(mapWindow::tkCacheType::Disk, true); //ĬÈÏÇé¿öÏ´¦ÓÚ´ò¿ª×´Ì¬
	 pTiles->put_DiskCacheFilename(_bstr_t("./mwtiles.db3")); 

	//ÕâÁ½ÖÖÀàÐ͵Ļº´æ£¬¶¼ÓÐÄÚÖûúÖÆÀ´ÏÞÖÆÆä´óС£¬³¬¹ý¸Ã»úÖÆÊ±£¬½«É¾³ý×î¾ÉµÄÇÐÆ¬£¬ÒÔ±ãΪ½ÏеÄÇÐÆ¬ÌÚ³ö¿Õ¼ä
	//pTiles->put_MaxCacheSize(mapWindow::tkCacheType::RAM, 200.0); //´óСÒÔ MB Ϊµ¥Î»;ĬÈÏΪ 100
	 pTiles->put_MaxCacheSize(mapWindow::tkCacheType::Disk, 300.0);//´óСÒÔ MB Ϊµ¥Î»;ĬÈÏΪ 100
}

//¹¦ÄÜ£º¼¤»îÌìµØÍ¼ÔÚÏßÓ°ÏñµØÍ¼·þÎñ
void CGISDlg::LoadTianDiTuService()
{
	mapWindow::IGlobalSettingsPtr glSettingsPtr;
	glSettingsPtr.CreateInstance("MapWinGIS.GlobalSettings");
	m_map.put_ReuseTileBuffer(true);
	//m_map.SetMouseWheelSpeed(1);//ĬÈÏֵΪ 0.5¡£½ÓÊÜ 0.1 - 10.0 ·¶Î§ÄÚµÄÖµ¡£Öµ 1.0 ½«¹Ø±ÕÊó±ê¹öÂÖËõ·Å¡£

	m_map.put_GrabProjectionFromData(false); //±ÜÃâͼ²ãΪ0ʱͶӰÖÿյ¼ÖÂÔÚÏßµØÍ¼²»ÏÔʾ
	m_map.put_Projection(mapWindow::tkMapProjection::PROJECTION_WGS84);
	m_map.GetTiles()->ProviderId = mapWindow::tkTileProvider::ProviderCustom;
	m_map.SetCursorMode(mapWindow::tkCursorMode::cmNone);
	m_map.put_ZoomBehavior(mapWindow::tkZoomBehavior::zbUseTileLevels);
	//m_map.put_KnownExtents(mapWindow::tkKnownExtents::keChina);
	m_map.GetTiles()->Visible = true;
	if (m_map.GetNumLayers()==0)
	{
		m_map.put_Longitude(100);
		m_map.put_Latitude(37);
		//m_map.put_CurrentZoom(4);
		m_map.ZoomToTileLevel(6);
	}
	m_map.Redraw3(mapWindow::RedrawSkipAllLayers, True);
	
	//ÊÇ·ñÒѾ­¼ÓÔØÁ˵ØÍ¼
	m_bHaveAddMap = true;
}

//¹¦ÄÜ£ºËõ·Åµ½Ä¿±êλÖÃ
void CGISDlg::ZoomToLocation(double lon,double lat)
{
	m_map.put_Projection(mapWindow::tkMapProjection::PROJECTION_WGS84);
	m_map.GetTiles()->Visible = true;
	m_map.put_Longitude(lon);
	m_map.put_Latitude(lat);
	m_map.put_CurrentZoom(16);
	m_map.Redraw3(mapWindow::RedrawSkipAllLayers, True);
	//ÊÇ·ñÒѾ­¼ÓÔØÁ˵ØÍ¼
	m_bHaveAddMap = true;
}

//¹¦ÄÜ£º¼ÓÔØµØÍ¼Êý¾Ý£¬°üÀ¨Ê¸Á¿Êý¾Ý
void CGISDlg::OnAddMapData()
{
	TCHAR s[10000];
	s[0]=0;
	CFileDialog dlg(true);
	dlg.m_ofn.lpstrTitle=_T("´ò¿ª±¾µØÎļþ");
	dlg.m_ofn.lpstrFile=s;
	dlg.m_ofn.nMaxFile=sizeof(s)/sizeof(TCHAR);
	TCHAR filter[500]=_T("SHAPEÎļþ(*.shp)\0*.shp");
	dlg.m_ofn.lpstrFilter=filter;
	dlg.m_ofn.Flags|=OFN_ALLOWMULTISELECT|OFN_ENABLESIZING|OFN_EXPLORER;
	if(dlg.DoModal()==IDCANCEL) return;

	POSITION pos;
	pos=dlg.GetStartPosition();
	CString path;
	long count=0;
	while(pos)
	{
		path=dlg.GetNextPathName(pos);
		count++;
	}	
	pos=dlg.GetStartPosition();
	while(pos)
	{
		path=dlg.GetNextPathName(pos);
		Openlocalfile(path);
	}
	// ¶ÁÈ¡½ÚµãÅäÖÃÐÅÏ¢
	CString fileName = GetSoftwareCurrentDirectory() + "\\map.ini";
	::WritePrivateProfileString("map","layer",path,fileName);

}



//¹¦ÄÜ£º¼ÓÔØÕ¤¸ñÓ°ÏñÊý¾Ý
void CGISDlg::OnAddRasterImage()
{	
	TCHAR s[10000];
	s[0]=0;
	CFileDialog dlg(true);
	dlg.m_ofn.lpstrTitle=_T("´ò¿ª±¾µØÎļþ");
	dlg.m_ofn.lpstrFile=s;
	dlg.m_ofn.nMaxFile=sizeof(s)/sizeof(TCHAR);
	//TCHAR filter[500]=_T("SHAPEÎļþ(*.shp)\0*.shp\0IMGÎļþ(*.img)\0*.img\0GeoTIFFÎļþ(*.tif)\0*.tif\0ASCÎļþ(*.asc)\0*.asc\0ËùÓÐÎļþ(*.*)\0*.*\0");

	TCHAR filter[500]=_T("GeoTIFFÎļþ(*.tif)\0*.tif\0ËùÓÐÎļþ(*.*)\0*.*\0");
	dlg.m_ofn.lpstrFilter=filter;
	dlg.m_ofn.Flags|=OFN_ALLOWMULTISELECT|OFN_ENABLESIZING|OFN_EXPLORER;
	if(dlg.DoModal()==IDCANCEL) return;

	POSITION pos;
	pos=dlg.GetStartPosition();
	CString path;
	long count=0;
	while(pos)
	{
		path=dlg.GetNextPathName(pos);
		count++;
	}	
	pos=dlg.GetStartPosition();
	while(pos)
	{
		path=dlg.GetNextPathName(pos);
		Openlocalfile(path);
	}
	// ¶ÁÈ¡½ÚµãÅäÖÃÐÅÏ¢
	CString fileName = GetSoftwareCurrentDirectory() + "\\map.ini";
	::WritePrivateProfileString("map","layer",path,fileName);
}



//¹¦ÄÜ£º´ò¿ªÎļþÑ¡Ôñ¶Ô»°¿ò£¬¼ÓÔØº½ÏßÊý¾ÝÎļþ
void CGISDlg::OnAddFlyLineData()
{	
	//δ¼ÓÔØµØÍ¼£¬·µ»Ø
	if (!m_bHaveAddMap)
	{
		return;
	}	

	if (m_flyLineNum > m_totalFlyLines)
	{
		AfxMessageBox(_T("ÒѼÓÔØº½ÏßÊý>12£¡"));
		return;
	}

	//µ¯³öÎļþ¶Ô»°¿ò
	CFileDialog dlg(true, ".txt","*.txt",OFN_HIDEREADONLY, "º½ÏßÎļþ(*.txt)|*.txt|", NULL);

	if (dlg.DoModal() == IDOK)
	{
		//¶ÁÈ¡º½Â·Îļþ£¬²¢±ê»æ³öÀ´
		OnShowGivenLine(dlg.GetPathName());
	}			
}



//¹¦ÄÜ£º½øÐеØÍ¼µÄ·Å´ó²Ù×÷
void CGISDlg::OnMapZoomIn()	  
{
	
	m_bSetPointModel=FALSE;
	//m_bLineDesign=FALSE;
	m_bPtDel=FALSE;
	m_bPtEdit=FALSE;
	m_map.SetCursorMode(0);  

	m_bLDSetPoint = FALSE;

	m_bSelectFeatureFlag = false;

}

//µØÍ¼ËõС
void CGISDlg::OnMapZoomOut()
{
	m_bSetPointModel=FALSE;
	//m_bLineDesign=FALSE;
	m_bPtDel=FALSE;
	m_bPtEdit=FALSE;
	m_map.SetCursorMode(1);

	m_bLDSetPoint = FALSE;

	m_bSelectFeatureFlag = false;
}

//µØÍ¼ÂþÓÎ
void CGISDlg::OnMapMove()
{
	m_bSetPointModel=FALSE;
	//m_bLineDesign=FALSE;
	m_bPtDel=FALSE;
	m_bPtEdit=FALSE;
	if (m_map.GetCursorMode()==mapWindow::tkCursorMode::cmPan)
	{
		m_map.SetCursorMode(mapWindow::tkCursorMode::cmNone);
	}
	else
	{
		m_map.SetCursorMode(mapWindow::tkCursorMode::cmPan);
	}

	m_bLDSetPoint = FALSE;

	m_bSelectFeatureFlag = false;

}


//¹¦ÄÜ£ºµØÍ¼Ñ¡Ôñ
void CGISDlg::OnMapSelect()
{
	m_bSetPointModel=FALSE;
	//m_bLineDesign=FALSE;
	m_bPtDel=FALSE;
	m_bPtEdit=FALSE;
	m_map.SetCursorMode(mapWindow::tkCursorMode::cmSelection);

	m_bLDSetPoint = FALSE;

	if (!m_bEditLine && !m_bLineDesign) //·Çº½Ï߱༭ģʽÏ¿ÉÑ¡
	{
		if (!m_bSelectFeatureFlag)
		{
			m_bSelectFeatureFlag = true;  // by Wu
		}
		else
		{
			m_map.SetCursorMode(mapWindow::tkCursorMode::cmNone);
			ClearHighLightLine();
			m_bSelectFeatureFlag = false;
		}
		
	}
	else
	{
		m_map.SetCursorMode(mapWindow::tkCursorMode::cmNone);
		//ClearHighLightLine();
		//m_bSelectFeatureFlag = false;
	}
}


//µØÍ¼È«¾°ÏÔʾ
void CGISDlg::OnMapFullScreen()
{
	m_bSetPointModel=FALSE;
	//m_bLineDesign=FALSE;
	m_bPtDel=FALSE;
	m_bPtEdit=FALSE;
	m_map.ZoomToMaxExtents();
	m_map.SetCursorMode(mapWindow::tkCursorMode::cmNone);

	m_bLDSetPoint = FALSE;

	m_bSelectFeatureFlag = false;
}


//¹¦ÄÜ£º²âÁ¿2µãÖ®¼äµÄ¾àÀë
void CGISDlg::OnSurvey()
{
	m_bSelectFeatureFlag = false;

	m_bSetPointModel=FALSE;
//	m_bLineDesign=FALSE;
	m_bPtDel=FALSE;
	m_bPtEdit=FALSE;

	m_bLDSetPoint = FALSE;

	m_map.SetCursorMode(mapWindow::tkCursorMode::cmNone);
	//¶àµã²â¾à
	if (m_bPolylineMeasure)
	{
		ClearPloylineMeasure();
		m_bPolylineMeasure = false;
		m_numPolylineMeasurePts = 0;
		m_bMeasureDrag = false;
	}
	else
	{
		m_bPolylineMeasure = true;
	}

/*
	//ÖØÖÃ
	m_pHZDistanceDlg->ResetCoordinateData();

	if (!m_bHaveShowDistanceDlg)
	{
		m_bHaveShowDistanceDlg = true;

		//ÏÔʾÈí¼þ½çÃæ
		m_pHZDistanceDlg->ShowWindow(SW_SHOW);
	}
	else
	{
		m_bHaveShowDistanceDlg = false;

		//Òþ²ØÈí¼þ½çÃæ
		m_pHZDistanceDlg->ShowWindow(SW_HIDE);
	}*/
}


//Çå³ýº½¼£
void CGISDlg::OnEraseTrack()
{
	EraseTrack(0);
	EraseTrack(1);
	EraseTrack(2);
}

 //Çå³ýº½¼£
void CGISDlg::EraseTrack(int uavid)
{
	if (uavid<0||uavid>2)
	{
		return;
	}
	m_bSetPointModel=FALSE;
	//m_bLineDesign=FALSE;
	m_bPtDel=FALSE;
	m_bPtEdit=FALSE;

	m_bLDSetPoint = FALSE;

	//ÒѾ­±ê»æÁËÎÞÈË»úµÄ·ÉÐй켣£¬Çå³ýº½¼£
	if (m_bFirstDrawUAVTrack[uavid])
	{
		//Çå³ýÎÞÈË»úµÄ±ê»æÍ¼²ã
		if (m_flyTrackLayerID[uavid] != -1)
		{
			m_map.RemoveLayer(m_flyTrackLayerID[uavid]);
		}

		if (m_UAVFlyTrackLayerID[uavid] != -1)
		{
			m_map.RemoveLayer(m_UAVFlyTrackLayerID[uavid]);
		}

		m_bFirstDrawUAVTrack[uavid] = false;

		m_map.Redraw();
	}	

}

//Çå³ý±ê»æµÄËùÓÐÄ¿±êµãÊý¾Ý
void CGISDlg::OnEraseAllTargets()
{
	//±ê»æµÄÄ¿±êµã¸öÊý´óÓÚ0ʱ
	if (m_targetPointNum > 0)
	{
		//Çå³ýËùÓÐ±ê»æµÄLabel
		m_map.ClearLabels(m_targetDrawLayerID);

		m_map.ClearDrawing(m_targetDrawLayerID);

		m_targetDrawLayerID = -1;

		m_map.Redraw();
	}	
}


//¹¦ÄÜ£ºÔö¼ÓÎÞÈË»úµÄ·ÉÐк½µã£¬»æÖƳöÎÞÈË»úµÄ·ÉÐк½¼£
//ÊäÈ룺ÎÞÈË»úµÄµ±Ç°µÄ¾­¶ÈdX£¬Î³¶ÈdY£¬º½Ïò½Çyaw, ¶¼ÒÔ£¨¡ãΪµ¥Î»£©
void CGISDlg::AddFlyPoint(int uavId,const double dX, const double dY, const double yaw,bool control)
{
	//δ¼ÓÔØµØÍ¼£¬·µ»Ø
	if (!m_bHaveAddMap)
	{
		return;
	}

	//¶ÔÊäÈëµÄ¾­Î³¶ÈÊýÖµ·¶Î§½øÐмì²é£¬¿´ÊÇ·ñÓÐЧ
	double fabsLon = fabs(dX);
	double fabsLat = fabs(dY);

	//ÅжÏÊý¾Ý·¶Î§ÊÇ·ñÓÐЧ
	if ((fabsLon<=0.000001) || (fabsLon>180) || (fabsLat<=0.000001) || (fabsLat>90) || (yaw<0) || (yaw>360))
	{
		return;
	}

	if (m_bAutoMove)
	{
		//×Ô¶¯ÂþÓΣ¬Ê¹·É»úÏÔʾÔÚµØÍ¼Öмä
		if (control)
		{
			AutomaticMoveMap(dX, dY);
		}
	}

	//±ê»æº½¼£µãÊýzcw
	m_drawTrackPtNum[uavId]++;


	//Ôö¼ÓÁ˺½¼£µãÊý£¬ÓÉ200-¡·2000  2017.07.05
	if (m_drawTrackPtNum[uavId] >= 100)
	{
		//Çå³ýº½¼£
		EraseTrack(uavId);
		m_drawTrackPtNum[uavId] = 0;
	}

	//»æÖÆUAVµÄ·ÉÐй켣
	DrawUAV(uavId,dX, dY, yaw,control);

	/*static int num = 0;
	if (num == 1)
	{
		DrawCanvas();
		num = 0;
	}
	num++;*/

	//ʵʱͨÊÓ·ÖÎö
	//m_dlgLightRegion.AnalysisRealTime(dY, distance, angleGU, g_gcsLon, g_gcsLat);
	//m_dlgLightRegion.DrawVisiAreaRealTime(dY, distance, angleGU, g_gcsLon, g_gcsLat);
	m_dlgLightRegion.DrawCrashAreaRealTime(dY, dX, dY);

	//ˢеØÍ¼£¨Ã¿5Ö¡Ë¢ÐÂÒ»´Î£©
	m_map.Redraw();	
}
void CGISDlg::AddFlyPoint_ADS(const int uavNum, const int uavid, const double lon, const double lat, const double yaw, const bool control, const CString strPlaneName)
{
	//δ¼ÓÔØµØÍ¼£¬·µ»Ø
	if (!m_bHaveAddMap)
	{
		return;
	}

	//¶ÔÊäÈëµÄ¾­Î³¶ÈÊýÖµ·¶Î§½øÐмì²é£¬¿´ÊÇ·ñÓÐЧ
	double fabsLon = fabs(lon);
	double fabsLat = fabs(lat);

	//ÅжÏÊý¾Ý·¶Î§ÊÇ·ñÓÐЧ
	if ((fabsLon<=0.000001) || (fabsLon>180) || (fabsLat<=0.000001) || (fabsLat>90) || (yaw<0) || (yaw>360))
	{
		return;
	}

	//»æÖÆUAVµÄ·ÉÐй켣
	DrawUAV_ADS(uavNum, uavid, lon, lat, yaw, control, strPlaneName);

	//ˢеØÍ¼£¨Ã¿5Ö¡Ë¢ÐÂÒ»´Î£©
	m_map.Redraw();	
}


void CGISDlg::Openlocalfile(CString file)
{
	int error=0;
	CString filetype=GetFileType(file);
	CString filename=GetFileName(file);
	filetype.MakeLower();	

	if(filetype.Compare("shp")==0)
	{
		mapWindow::IShapefilePtr shape;
		shape.CreateInstance("MapWinGIS.Shapefile");
		if( !shape->Open((_bstr_t)file,NULL))
		{
			error=1;
		}
		_bstr_t pro=shape->GetProjection();

		//ÉèÖõØÍ¼µÄ±³¾°É«Îª°×É«
		m_map.SetBackColor(RGB(255,255,255));

		int shpLayerPose = m_map.AddLayer(shape,true);

		//ÒÆ¶¯µ½µ×¶Ë
		m_map.MoveLayerBottom(shpLayerPose);

		m_Layer->AddLayerInfo(filename,1);

		//ÊÇ·ñÒѾ­¼ÓÔØÁ˵ØÍ¼
		m_bHaveAddMap = true;
	}
	else if(filetype.Compare("img")==0)
	{
		mapWindow::IImagePtr image;
		image.CreateInstance("MapWinGIS.Image");
		if( !image->Open((_bstr_t)file,mapWindow::IMG_FILE,true,NULL))
		{
			error=1;
		}

		//ÉèÖõØÍ¼µÄ±³¾°É«Îª°×É«
		m_map.SetBackColor(RGB(255,255,255));

		m_map.AddLayer(image,true);
		m_Layer->AddLayerInfo(filename,2);


		//ÊÇ·ñÒѾ­¼ÓÔØÁ˵ØÍ¼
		m_bHaveAddMap = true;
	}
	else if(filetype.Compare("tif")==0)
	{
		mapWindow::IImagePtr image;
		image.CreateInstance("MapWinGIS.Image");
		if( !image->Open((_bstr_t)file,mapWindow::TIFF_FILE,true,NULL))
		{
			error=1;
		}

		//ÉèÖõØÍ¼µÄ±³¾°É«Îª°×É«
		m_map.SetBackColor(RGB(255,255,255));

		int tiffLayerID =  m_map.AddLayer(image,true);

		m_Layer->AddLayerInfo(filename,2);

		//ÊÇ·ñÒѾ­¼ÓÔØÁ˵ØÍ¼
		m_bHaveAddMap = true;
	}

	else if(filetype.Compare("asc")==0)
	{
		mapWindow::IImagePtr image;
		image.CreateInstance("MapWinGIS.Image");
		if( !image->Open((_bstr_t)file,mapWindow::ASC_FILE,true,NULL))
		{
			error=1;
		}

		//ÉèÖõØÍ¼µÄ±³¾°É«Îª°×É«
		m_map.SetBackColor(RGB(255,255,255));

		m_map.AddLayer(image,true);
		m_Layer->AddLayerInfo(filename,2);

		//ÊÇ·ñÒѾ­¼ÓÔØÁ˵ØÍ¼
		m_bHaveAddMap = true;
	}
	/*if(m_bHaveAddMap)
	{
		ReadTargetIni(true);
	}*/
	
	if(error==1)
	{
		CString msg="ÎÞ·¨´ò¿ª "+file;
		AfxMessageBox(msg);
	}

	m_gisManager->m_bHaveAddMap = m_bHaveAddMap;
}

CString CGISDlg::GetFileType(CString file)
{
	CString type;
	long len=file.GetLength();
	int pos=file.ReverseFind('.');
	type=file.Right(len-pos-1);
	return type;
}

CString CGISDlg::GetFileName(CString file)
{
	CString name;
	long len=file.GetLength();
	int pos=file.ReverseFind('\\');
	name=file.Right(len-pos-1);
	return name;
}

//ÏÔʾÓÒ¼ü²Ëµ¥
void CGISDlg::OnShowRMenu()
{
	//Êó±êÓÒ¼üµã»÷ʱ£¬µ¯³ö¿ì½Ý²Ëµ¥
	if (!m_bLineDesign)
	{

		//ÏÔʾ¿ì½Ý²Ëµ¥
		CMenu   menu;
		
		//CMenu* pMenu = GetMenu();
		//if (pMenu != NULL)
		//{
/*
			CMenu* pSubMenu = menu.GetSubMenu(0);
			if (pSubMenu != NULL)
			{
				CMenu* pSubMenu2 = pSubMenu->GetSubMenu(0);
				if (pSubMenu2 != NULL)
				{
					pSubMenu2->DeleteMenu(IDM_SHOW_LINE14, MF_BYCOMMAND);
				}
			}*/
		//}


		POINT   pt;
		GetCursorPos( &pt );


		//µ±´¦ÓڻطÅģʽʱ£¬ÉèÖᢵ¼Òý²Ù×÷¡¢º½Ïß×°¶©×Ӳ˵¥¶¼ÏÈ»ÒÉ«
		menu.LoadMenu(IDR_MENU2);	

		//º½Ïß1
		if (m_pHaveDrawLineFlag[0])
		{
			menu.CheckMenuItem( IDM_SHOW_LINE1, MF_BYCOMMAND | MF_CHECKED );
		}
		else
		{
			menu.CheckMenuItem( IDM_SHOW_LINE1, MF_BYCOMMAND | MF_UNCHECKED );
		}

		//º½Ïß2
		if (m_pHaveDrawLineFlag[1])
		{
			menu.CheckMenuItem( IDM_SHOW_LINE2, MF_BYCOMMAND | MF_CHECKED );
		}
		else
		{
			menu.CheckMenuItem( IDM_SHOW_LINE2, MF_BYCOMMAND | MF_UNCHECKED );
		}

		//º½Ïß3
		if (m_pHaveDrawLineFlag[2])
		{
			menu.CheckMenuItem( IDM_SHOW_LINE3, MF_BYCOMMAND | MF_CHECKED );
		}
		else
		{
			menu.CheckMenuItem( IDM_SHOW_LINE3, MF_BYCOMMAND | MF_UNCHECKED );
		}

		//º½Ïß4
		if (m_pHaveDrawLineFlag[3])
		{
			menu.CheckMenuItem( IDM_SHOW_LINE4, MF_BYCOMMAND | MF_CHECKED );
		}
		else
		{
			menu.CheckMenuItem( IDM_SHOW_LINE4, MF_BYCOMMAND | MF_UNCHECKED );
		}

		//º½Ïß5
		if (m_pHaveDrawLineFlag[4])
		{
			menu.CheckMenuItem( IDM_SHOW_LINE5, MF_BYCOMMAND | MF_CHECKED );
		}
		else
		{
			menu.CheckMenuItem( IDM_SHOW_LINE5, MF_BYCOMMAND | MF_UNCHECKED );
		}

		/*
		//º½Ïß6
		if (m_pHaveDrawLineFlag[5])
		{
			menu.CheckMenuItem( IDM_SHOW_LINE6, MF_BYCOMMAND | MF_CHECKED );
		}
		else
		{
			menu.CheckMenuItem( IDM_SHOW_LINE6, MF_BYCOMMAND | MF_UNCHECKED );
		}

		//º½Ïß7
		if (m_pHaveDrawLineFlag[6])
		{
			menu.CheckMenuItem( IDM_SHOW_LINE7, MF_BYCOMMAND | MF_CHECKED );
		}
		else
		{
			menu.CheckMenuItem( IDM_SHOW_LINE7, MF_BYCOMMAND | MF_UNCHECKED );
		}
		//º½Ïß8
		if (m_pHaveDrawLineFlag[7])
		{
			menu.CheckMenuItem( IDM_SHOW_LINE8, MF_BYCOMMAND | MF_CHECKED );
		}
		else
		{
			menu.CheckMenuItem( IDM_SHOW_LINE8, MF_BYCOMMAND | MF_UNCHECKED );
		}
		//º½Ïß9
		if (m_pHaveDrawLineFlag[8])
		{
			menu.CheckMenuItem( IDM_SHOW_LINE9, MF_BYCOMMAND | MF_CHECKED );
		}
		else
		{
			menu.CheckMenuItem( IDM_SHOW_LINE9, MF_BYCOMMAND | MF_UNCHECKED );
		}
		//º½Ïß10
		if (m_pHaveDrawLineFlag[9])
		{
			menu.CheckMenuItem( IDM_SHOW_LINE10, MF_BYCOMMAND | MF_CHECKED );
		}
		else
		{
			menu.CheckMenuItem( IDM_SHOW_LINE10, MF_BYCOMMAND | MF_UNCHECKED );
		}
		*/

		if (g_b981ADesktop || g_b981APad)
		{
			//º½Ïß14  »ØÊÕº½Ïß
			if (m_pHaveDrawLineFlag[13])
			{
				menu.CheckMenuItem( ID_SHOW_BACKLINE, MF_BYCOMMAND | MF_CHECKED );
			}
			else
			{
				menu.CheckMenuItem( ID_SHOW_BACKLINE, MF_BYCOMMAND | MF_UNCHECKED );
			}

			//º½Ïß11  Ó¦¼±º½Ïß
			if (m_pHaveDrawLineFlag[10])
			{
				menu.CheckMenuItem( ID_SHOW_HS11, MF_BYCOMMAND | MF_CHECKED );
			}
			else
			{
				menu.CheckMenuItem( ID_SHOW_HS11, MF_BYCOMMAND | MF_UNCHECKED );
			}

			//º½Ïß12  µç×ÓΧÀ¸
			if (m_pHaveDrawLineFlag[11])
			{
				menu.CheckMenuItem( ID_SHOW_TC12, MF_BYCOMMAND | MF_CHECKED );
			}
			else
			{
				menu.CheckMenuItem( ID_SHOW_TC12, MF_BYCOMMAND | MF_UNCHECKED );
			}
		}


		if (g_b981CDesktop)
		{
			//º½Ïß14  »ØÊÕº½Ïß
			if (m_pHaveDrawLineFlag[10])
			{
				menu.CheckMenuItem( ID_SHOW_BACKLINE, MF_BYCOMMAND | MF_CHECKED );
			}
			else
			{
				menu.CheckMenuItem( ID_SHOW_BACKLINE, MF_BYCOMMAND | MF_UNCHECKED );
			}
			//º½Ïß6 ΧÀ¸
			if (m_pHaveDrawLineFlag[5])
			{
				//menu.CheckMenuItem( ID_SHOW_WEILAN, MF_BYCOMMAND | MF_CHECKED );
				menu.CheckMenuItem( ID_SHOW_TC12, MF_BYCOMMAND | MF_UNCHECKED );
			}
			else
			{
				//menu.CheckMenuItem( ID_SHOW_WEILAN, MF_BYCOMMAND | MF_UNCHECKED );
				menu.CheckMenuItem( ID_SHOW_TC12, MF_BYCOMMAND | MF_UNCHECKED );
			}

			//º½Ïß7 Ó¦¼±
			if (m_pHaveDrawLineFlag[6])
			{
				//menu.CheckMenuItem( ID_SHOW_LINE_YINGJI, MF_BYCOMMAND | MF_CHECKED );
				menu.CheckMenuItem( ID_SHOW_HS11, MF_BYCOMMAND | MF_CHECKED );
			}
			else
			{
				//menu.CheckMenuItem( ID_SHOW_LINE_YINGJI, MF_BYCOMMAND | MF_UNCHECKED );
				menu.CheckMenuItem( ID_SHOW_HS11, MF_BYCOMMAND | MF_CHECKED );
			}
			//º½Ïß14,¿ÕͶº½Ïß
			if (m_pHaveDrawLineFlag[13])
			{
				menu.CheckMenuItem( IDM_SHOW_LINE14, MF_BYCOMMAND | MF_CHECKED );
			}
			else
			{
				menu.CheckMenuItem( IDM_SHOW_LINE14, MF_BYCOMMAND | MF_UNCHECKED );
			}
		}


		if (m_bAutoMove)
		{
			menu.CheckMenuItem( IDM_AUTO_MOVE, MF_BYCOMMAND | MF_CHECKED );
		}
		else
		{
			menu.CheckMenuItem( IDM_AUTO_MOVE, MF_BYCOMMAND | MF_UNCHECKED );
		}

		if (m_guidePointMode == 1)
		{
			menu.CheckMenuItem( IDM_GUIDE_FLY1, MF_BYCOMMAND | MF_CHECKED );
		}
		else
		{
			menu.CheckMenuItem( IDM_GUIDE_FLY1, MF_BYCOMMAND | MF_UNCHECKED );
		}

		if (m_guidePointMode == 2)
		{
			menu.CheckMenuItem( IDM_GUIDE_FLY2, MF_BYCOMMAND | MF_CHECKED );
		}
		else
		{
			menu.CheckMenuItem( IDM_GUIDE_FLY2, MF_BYCOMMAND | MF_UNCHECKED );
		}

		if (m_bPlotDemArea)
		{
			menu.CheckMenuItem( ID_MENU_PLOTDEMAREA, MF_BYCOMMAND | MF_CHECKED );
		}
		else
		{
			menu.CheckMenuItem( ID_MENU_PLOTDEMAREA, MF_BYCOMMAND | MF_UNCHECKED );
		}

		if (m_bEnableShowADSB)
		{
			menu.CheckMenuItem( ID_MENU_ADSB, MF_BYCOMMAND | MF_CHECKED );
		}
		else
		{
			menu.CheckMenuItem( ID_MENU_ADSB, MF_BYCOMMAND | MF_UNCHECKED );
		}
		
		//menu.GetSubMenu(0)->ModifyMenu(0, MF_BYPOSITION | MF_DISABLED | MF_GRAYED);

		if (g_b981ADesktop || g_b981APad)
		{
			// »ñÈ¡×Ӳ˵¥
			CMenu* pSubMenu = menu.GetSubMenu(0); // µÚÒ»¸ö×Ӳ˵¥
			//int nn = pSubMenu->GetMenuItemCount();
			
			if (pSubMenu)
			{
				pSubMenu->ModifyMenu(5, MF_BYPOSITION | MF_DISABLED | MF_GRAYED); //Òþ²Ø¸ß³Ì·ÖÎö
				pSubMenu->ModifyMenu(7, MF_BYPOSITION | MF_DISABLED | MF_GRAYED); //Òþ²Ø±ê»æ

				// »ñÈ¡¶þ¼¶×Ӳ˵¥
				CMenu* pSubSubMenu = pSubMenu->GetSubMenu(2); // ¶þ¼¶×Ӳ˵¥£¨º½Ïß×ÓÏ
				//int nn2 = pSubSubMenu->GetMenuItemCount();
				if (pSubSubMenu)
				{
					// Òþ²Ø¶þ¼¶×Ӳ˵¥µÄµÚÒ»¸ö×ÓÏî
					//pSubSubMenu->ModifyMenu(IDM_SHOW_LINE14, MF_BYPOSITION | MF_DISABLED | MF_GRAYED); //Òþ²Ø¿ÕͶº½Ïß
					pSubSubMenu->RemoveMenu(IDM_SHOW_LINE14, MF_BYCOMMAND); //Òþ²Ø¿ÕͶº½Ïß

					// Ð޸Ķþ¼¶×Ӳ˵¥Îı¾
					pSubMenu->ModifyMenu(ID_BIND_BACKLINE, MF_BYCOMMAND | MF_STRING, IDR_MENU2, _T("×ÔÖ÷׎µã×°¶©"));
					pSubMenu->ModifyMenu(ID_SHOW_BACKLINE, MF_BYCOMMAND | MF_STRING, IDR_MENU2, _T("×ÔÖ÷׎µãÏÔʾ"));
				}
			}
		}


		//µ¯³ö¿ì½Ý²Ëµ¥
		menu.GetSubMenu( 0 )->TrackPopupMenu( TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, this );

	}
}


//¹¦ÄÜ£º×Ô¶¯ÂþÓÎ,¼´±£Ö¤ÎÞÈË»ú±ê»æÔÚµØÍ¼µÄÖÐÐÄ
//ʵÏÖÔ­Àí£º1£©ÏÈ»ñµÃµØÍ¼µ±Ç°µÄÏÔÊ¾ÇøÓò
//          2£©ÔÙ¸ù¾ÝÎÞÈË»úµÄµ±Ç°×ø±ê£¬Òƶ¯µØÍ¼
void CGISDlg::AutomaticMoveMap(double dX, double dY)
{
	//¼ÆËãÿ¸öÏñËØµÄ¾­Î³¶ÈÖµ
	double lonDegreePerPixel = 0;
	double latDegreePerPixel = 0;

	mapWindow::IExtentsPtr pExtents;
	pExtents = m_map.GetExtents();   

	double xMin = 0;
	double yMin = 0;
	double zMin = 0;

	double xMax = 0;
	double yMax = 0;
	double zMax = 0;

	pExtents->GetBounds(&xMin,&yMin,&zMin,&xMax,&yMax,&zMax);

	if(dX < xMin || dX > xMax || dY < yMin || dY > yMax)
	{
	lonDegreePerPixel = (xMax-xMin) * m_onePerWidth;
	latDegreePerPixel = (yMax-yMin) * m_onePerHeight;

	//ÏÔʾ·¶Î§
	double xNewMin = 0;
	double yNewMin = 0;
	double zNewMin = 0;

	double xNewMax = 0;
	double yNewMax = 0;
	double zNewMax = 0;	 

	//¾­¶È·½ÏòÔöÁ¿
	double lonIncrement = lonDegreePerPixel*m_mapAreaHalfWidth;		

	//γ¶È·½ÏòÔöÁ¿
	double latIncrement = latDegreePerPixel*m_mapAreaHalfHeight;		

	xNewMin = dX - lonIncrement;
	xNewMax = dX + lonIncrement;

	yNewMin = dY - latIncrement;
	yNewMax = dY + latIncrement;

	//ÉèÖÃеÄÏÔʾ·¶Î§
	pExtents->SetBounds(xNewMin,yNewMin,zNewMin,xNewMax,yNewMax,zNewMax);	
	m_map.SetExtents(pExtents);	
	}
}

//¹¦ÄÜ£ºµ¯³ö¶Ô»°¿ò£¬ÏÔʾ¾­¶Èγ¶ÈÐÅÏ¢
void CGISDlg::OnShowLonLatInfo()
{
	if (!m_bHaveShowLonLatDlg)   //δµ¯³ö¶Ô»°¿ò£¬Ôòµ¯³ö¶Ô»°¿òÏÔʾ
	{
		m_bHaveShowLonLatDlg = true;

		m_pLonLatDlg->SetLonLatInfo(0,0);
		m_pLonLatDlg->ShowWindow(SW_SHOW);


	}
	else
	{
		m_bHaveShowLonLatDlg = false;
		m_pLonLatDlg->ShowWindow(SW_HIDE);
	}	
}



//¹¦ÄÜ:ɾ³ýËùÓÐͼ²ã
void CGISDlg::OnRemoveAllLayers()
{
	if (!m_bHaveAddMap)
	{
		return;
	}

	//Çå³ýº½¼£
	OnEraseTrack();

	for(int i=0;i<MAX_PLANE_NUM_ADS;i++)
	{
		//Çå³ýÎÞÈË»úµÄ±ê»æÍ¼²ã
		if (m_UAVFlyTrackLayerID_ADS[i] != -1)
		{
			//m_map.ClearLabels(m_UAVFlyTrackLayerID_ADS[i]);
			//m_map.ClearDrawing(m_UAVFlyTrackLayerID_ADS[i]);
			m_map.RemoveLayer(m_UAVFlyTrackLayerID_ADS[i]);
			m_UAVFlyTrackLayerID_ADS[i] = -1;

			m_bWithin100km_ADS[i] = false;
		}
	}

	//ÒѾ­±ê»æÁ˵¯µÀÎļþ£¬É¾³ýÏÖÓеÄÊý¾Ý
	if (m_drawPlanFlyLine != -1)
	{
		m_map.ClearDrawing(m_drawPlanFlyLine);

		m_drawPlanFlyLine = -1;
	}

	if(m_targetDrawLayerID != -1)
	{
		m_map.RemoveLayer(m_targetDrawLayerID);
		m_targetDrawLayerID = -1;
	}

	//¿ÉÊÓÓò·ÖÎöÊ±Éæ¼°µ½µÄͼ²ã
	if (m_longGroundID != 0)
	{
		ClearPointShape(m_longGroundID);
		m_longGroundID = 0;
	}

	if (m_visbleCircleLayerID > 0)
	{
		m_map.GetShapefile(m_visbleCircleLayerID).EditClear();

		m_visbleCircleLayerID = -1;
	}

	if (m_notVisibleCircleLayerID > 0)
	{
		m_map.GetShapefile(m_notVisibleCircleLayerID).EditClear();

		m_notVisibleCircleLayerID = -1;
	}

	if (m_visiRealCircleLayerID > 0)
	{
		m_map.GetShapefile(m_visiRealCircleLayerID).EditClear();

		m_visiRealCircleLayerID = -1;
	}

	if (m_notVisiRealCircleLayerID > 0)
	{
		m_map.GetShapefile(m_notVisiRealCircleLayerID).EditClear();

		m_notVisiRealCircleLayerID = -1;
	}

	if (m_RealCircleLayerID > 0)
	{
		m_map.GetShapefile(m_RealCircleLayerID).EditClear();

		m_RealCircleLayerID = -1;
	}

	for (int i=0;i<20;i++)
	{
		if (m_longContourLineID[i] > 0)
		{
			m_map.GetShapefile(m_longContourLineID[i]).EditClear();

			m_longContourLineID[i] = -1;
		}

		if (m_longContourTextID[i] != 0)
		{
			ClearPointShape(m_longContourTextID[i]);
			m_longContourTextID[i] = 0;
		}
	}

	for (int i=0;i<500;i++)
	{
		if (m_DemRegionLayerID[i] > 0)
		{
			m_map.GetShapefile(m_DemRegionLayerID[i]).EditClear();

			m_DemRegionLayerID[i] = -1;
		}
	}

	if (m_longSelectLineID > 0)
	{
		m_map.GetShapefile(m_longSelectLineID).EditClear();

		m_longSelectLineID = -1;
	}

	if (m_longLabelPlotID != 0)
	{
		ClearPointShape(m_longLabelPlotID);
		m_longLabelPlotID = 0;
	}

	if (m_longLinePointID != 0)
	{
		ClearPointShape(m_longLinePointID);
		m_longLinePointID = 0;
	}

	if (m_crashAreaLayerID > 0)
	{
		m_map.GetShapefile(m_crashAreaLayerID).EditClear();

		m_crashAreaLayerID = -1;
	}

	if (m_fightRegionLayerID > 0)
	{
		m_map.GetShapefile(m_fightRegionLayerID).EditClear();

		m_fightRegionLayerID = -1;
	}

	//Çå³ý¸ß³Ì·ÖÎöͼ²ã
	for (int i=0;i<g_iDemAltPtNum;i++)
	{
		m_map.RemoveLayer(g_lDemAltLayerID[i]);
		if (g_lDemAltDisLayerID[i] > 0)
		{
			//Çå³ý±ê»æµÄµãʸÁ¿Í¼²ã
			ClearPointShape(g_lDemAltDisLayerID[i]);
			g_lDemAltDisLayerID[i] = -1;
		}

		if (g_lDemPtNumLayerID[i] > 0)
		{
			//Çå³ý±ê»æµÄµãʸÁ¿Í¼²ã
			ClearPointShape(g_lDemPtNumLayerID[i]);
			g_lDemPtNumLayerID[i] = -1;
		}
	}

	//Çå³ý±ê¼ÇµãÏà¹ØÍ¼²ã
	for (int i=0;i<g_iMarkerPtNum;i++)
	{
		if (g_lMarkerLayerID[i] > 0)
		{
			ClearPointShape(g_lMarkerLayerID[i]);
			g_lMarkerLayerID[i] = 0;
		}
	}
	m_designLinePointNum = 0;
	//m_map.RemoveAllLayers();
	m_map.ClearDrawing(m_designLineLayerID);
	m_map.ClearDrawing(m_designLineLayerID2);
	m_map.RemoveLayer(m_designLineLayerID);
	m_map.RemoveLayer(m_designLineLayerID2);
	m_map.RemoveAllLayers();
	memset(m_pDesignLineStruct, 0, sizeof(PtStruct)*m_lineMaxPointNum);
	m_Layer->RemoveAll();
	m_map.Redraw();
	for (int i=0;i<13;i++)
	{
		m_pHaveDrawLineFlag[i] = false;
	}
	//ÉèÖõØÍ¼µÄ±³¾°É«Îª°×É«
	m_map.SetBackColor(RGB(0,0,0));

	//ÊÇ·ñÒѾ­¼ÓÔØÁ˵ØÍ¼
	//m_bHaveAddMap = false;
}



//¹¦ÄÜ:ͼ²ã¹ÜÀí
void CGISDlg::OnLayerManage()
{
	m_Layer->ShowWindow(SW_SHOW);
}


//¹¦ÄÜ£ºÉèÖÃͼ²ãµÄÏÔʾ»òÒþ²Ø
LRESULT CGISDlg::OnSetLayerStatus(WPARAM wParam, LPARAM lParam)
{
	if (lParam == 0)  //Òþ²ØÍ¼²ã
	{
		m_map.SetLayerVisible(wParam, false);
	}
	else if (lParam == 1)  //ÏÔʾͼ²ã
	{
		m_map.SetLayerVisible(wParam, true);
	}

	return 0;
}


BEGIN_EVENTSINK_MAP(CGISDlg, CBCGPDialog)
	ON_EVENT(CGISDlg, IDC_MAP1, 1, CGISDlg::MouseDownMap1, VTS_I2 VTS_I2 VTS_I4 VTS_I4)
	ON_EVENT(CGISDlg, IDC_MAP1, 2, CGISDlg::MouseUpMap1, VTS_I2 VTS_I2 VTS_I4 VTS_I4)
	ON_EVENT(CGISDlg, IDC_MAP1, 3, CGISDlg::MouseMoveMap1, VTS_I2 VTS_I2 VTS_I4 VTS_I4)
	ON_EVENT(CGISDlg, IDC_MAP1, DISPID_DBLCLICK, CGISDlg::MouseDblClickMap1, VTS_NONE)
END_EVENTSINK_MAP()


void CGISDlg::MouseDownMap1(short Button, short Shift, long x, long y)
{
	double dX = 0;
	double dY = 0;

	GLOBAL_X = x;
	GLOBAL_Y = y;

	CString str_bt;
	TRACE(_T("mapWindow clicked\n"));
	// TRACE(_T(str_bt.Format("%d",Button)));
	// Ñ¡Ôñ±ê¼Çµãʱ
	if (g_bSelectMarker && (Button == 1))
	{
		g_bSelectMarker = false;
		//TRACE(g_bSelectMarker);
		// return;
	}
	
	if (m_bHaveShowDistanceDlg && (Button == 1))
	{
		//ÏñËØ×ø±êת»»µØÀí×ø±ê
		m_map.PixelToProj(x,y, &dX, &dY);

		//ÉèÖõãµÄ¾­¶È¡¢Î³¶È
		m_pHZDistanceDlg->SetPtCoordinate(dX, dY);
	}

	/***************************************¶àµã²â¾à by Wu 2023.10.16*****************************************/
	if (m_bPolylineMeasure && (Button == 1))
	{
		if (m_bEndMeasure)
		{
			ClearPloylineMeasure();
			m_bEndMeasure = false;
		}
		//ÏñËØ×ø±êת»»µØÀí×ø±ê
		m_map.PixelToProj(x,y, &dX, &dY);

		m_numPolylineMeasurePts++;
		m_posPolylineMeasurePts[m_numPolylineMeasurePts-1][0] = dX;
		m_posPolylineMeasurePts[m_numPolylineMeasurePts-1][1] = dY;
		if (m_numPolylineMeasurePts==1) //Æðµã
		{
			AddPointShapeLayer(m_polylineMeasurePtLayerID[0], dX, dY, _T("Æðµã"), _T(""), RGB(255,0,0));//±ê×¢Æðµã
			m_bMeasureDrag = true;
			return;
		}

		//»æÖÆÏß¶Î
		if (m_polylineMeasureLineLayerID==-1)
		{
			//´´½¨Ïßͼ²ã
			CreateEmptyShapfile(m_polylineMeasureLineLayerID, 1, RGB(0,255,0));
		}
		if (m_numPolylineMeasurePts==2)
		{
			AddOnePoint2Shapfile(m_polylineMeasureLineLayerID, 1, m_posPolylineMeasurePts[0][0], m_posPolylineMeasurePts[0][1]);
		}
		AddOnePoint2Shapfile(m_polylineMeasureLineLayerID, 1, dX, dY);

		if (m_polylineMeasurePtLayerID[1]==-1)
		{
			CreateEmptyShapfile(m_polylineMeasurePtLayerID[1], 0, RGB(0,255,0));
			mapWindow::IShapeDrawingOptionsPtr  pShapeDrawingOption;
			pShapeDrawingOption.CreateInstance("MapWinGIS.ShapeDrawingOptions");	
			pShapeDrawingOption->FillColor = RGB(0,255,0);
			pShapeDrawingOption->PointSize = 12;
			pShapeDrawingOption->PutPointType(mapWindow::tkPointSymbolType::ptSymbolStandard);
			pShapeDrawingOption->PutPointShape(mapWindow::tkPointShapeType::ptShapeStar);
			(m_map.GetShapefile(m_polylineMeasurePtLayerID[1])).SetDefaultDrawingOptions(pShapeDrawingOption);
		}
		//AddOnePoint2Shapfile(m_polylineMeasurePtLayerID[1],0,dX, dY);
		//»æÖƽڵã
		mapWindow::IPointPtr pintPtr;
		pintPtr.CreateInstance("MapWinGIS.Point");	
		mapWindow::IShapePtr shapePtr;
		shapePtr.CreateInstance("MapWinGIS.Shape");
		shapePtr->Create(mapWindow::SHP_POINT);
		//¾­¶È
		pintPtr->x = dX;  
		//γ¶È
		pintPtr->y = dY;  
		long i = m_numPolylineMeasurePts-2;
		shapePtr->InsertPoint(pintPtr, &i);	
		//²åÈëµãʸÁ¿
		(m_map.GetShapefile(m_polylineMeasurePtLayerID[1])).EditInsertShape(shapePtr, &i);

		//»æÖƲâÁ¿×¢¼Ç
		if (m_polylineMeasureLabelLayerID!=-1)
		{
			m_map.ClearDrawing(m_polylineMeasureLabelLayerID);
		}
		m_polylineMeasureLabelLayerID = m_map.NewDrawing(1);
		DrawDistLabel(m_polylineMeasureLabelLayerID,m_posPolylineMeasurePts,m_numPolylineMeasurePts,1);
	}

	//ÓÒ¼ü¶àµã²âÁ¿½áÊø
	if (m_bPolylineMeasure && (Button == 2))
	{
		EndPolylineMessure();
		return;
	}
	/*******************************************************************************************************/

	/*******************************************by Wu 2023.09.14*******************************************/
	//Ñ¡ÖÐÒªËØ
	if (m_bSelectFeatureFlag && (Button == 1)) 
	{
		//ÏñËØ×ø±êת¾­Î³¶È×ø±ê
		m_map.PixelToProj(x,y, &dX, &dY);
		double pt[2] = {dX,dY};

		m_lineSelectedID = IsSelectLine(pt);
		ClearHighLightLine();
		if (g_b981APad || g_b981ADesktop)
		{
			if (m_lineSelectedID==14)  //ÔÝʱÆÁ±Î»ØÊÕº½Ïß
			{
				m_lineSelectedID = -1;
				return;
			}
		}

		if (m_lineSelectedID>0) 
		{
			m_editLineDataGroup = m_ShowedLineDataList[m_lineSelectedID];
			DrawHighLightLine(m_editLineDataGroup.linePts,m_editLineDataGroup.linePointNum);
		}
	}
	//º½Ï߱༭
	if (m_bEditLine && (Button == 1))
	{
		if (m_lineSelectedID<=0)
		{
			return;
		}
		//ÏñËØ×ø±êת¾­Î³¶È×ø±ê
		m_map.PixelToProj(x,y, &dX, &dY);
		m_iPtSel=GetPtSel(m_editLineDataGroup.pts,m_editLineDataGroup.pointNum,x,y);
		if (m_iPtSel<0) //Ñ¡Öзǽڵ㣬ÔÚÏßÉÏÐÂÔöµã
		{
			//m_editLineDataGroup = m_ShowedLineDataList[m_lineSelectedID];
			double pt[2] = {dX,dY};
			vector<double> lineX,lineY;
			TransformToVectorPoints(m_editLineDataGroup,lineX,lineY);
			int addPointPos = topologicalAnalysis.isPointInPolyLine(pt,lineX,lineY);
			if (addPointPos==0) //µã»÷µã²»ÔÚÏßÉÏ
			{
				return;
			}
			if (g_b981CDesktop)
			{
				if (m_lineSelectedID==11)
				{
					if (addPointPos>m_editLineDataGroup.linePointNum-4) return; //»ØÊÕº½Ï߯Á±Î4,5,6³¤±ß²»Èñ༭
				}
			}

			if (m_editLineDataGroup.pointNum>=127) //ÏÞÖÆ×î¶à127¸öµã
			{
				return;
			}

			//¼ÆËãÌí¼Óµã×ø±ê
			double linePt1[2] = {m_editLineDataGroup.linePts[addPointPos-1].dX,m_editLineDataGroup.linePts[addPointPos-1].dY};
			double linePt2[2] = {m_editLineDataGroup.linePts[addPointPos].dX,m_editLineDataGroup.linePts[addPointPos].dY};
			double targetPt[2] = {0.0,0.0};
			topologicalAnalysis.GetPointToLineVerticalCross(linePt1,linePt2,pt,targetPt);
			//Ìí¼Óµ½ÏßÉÏ
			AddPointInLine(addPointPos,targetPt,m_editLineDataGroup);

			if (m_distLabelLayer!=-1)
			{
				m_map.ClearDrawing(m_distLabelLayer);//Çå³ý¾àÀëºÍ·½Î»½Ç±ê»æ
			}

			//Çå³ý±ê»æµÄº½Ïß
			ClearDrawedLine(m_editLineDataGroup.lineID-1);
			//±ê»æº½Ïß
			DrawFlyLine(m_editLineDataGroup);
		}

	}

	//ÓÒ¼ü±à¼­½áÊø
	if (m_bEditLine && (Button == 2))
	{
		double lon,lat;
		//ÏñËØ×ø±êת¾­Î³¶È×ø±ê
		m_map.PixelToProj(x,y, &lon, &lat);
		int selectedPointID = GetPtSel(m_editLineDataGroup.pts,m_editLineDataGroup.pointNum,x,y);
		if (selectedPointID>=0)
		{
			if (g_b981CDesktop)
			{
				if (m_lineSelectedID==11)
				{
					if (selectedPointID>=m_editLineDataGroup.pointNum-3 || selectedPointID==0) //»ØÊÕº½Ï߯Á±Î1,4,5,6,º½µã
					{
						return;
					}
				}
			}

			ShowModifyPointDlg(selectedPointID);
			return;
		}

		ShowEditSaveDlg();
		return;
	}

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

	//´¦ÓÚº½ÏßÉè¼ÆÄ£Ê½Ê±£¬ÇÒÊó±ê¹â±ê´¦ÓÚÑ¡Ôñģʽʱ
	if (m_bLineDesign  && (Button == 1))
	{
		////if (m_map.GetCursorMode()!=5)                 //ÉèÖÃΪÊó±ê¼ýͷ״̬
		////{
		//	m_map.SetCursorMode(5);

		///*}*/
		//ÏñËØ×ø±êת¾­Î³¶È×ø±ê
		m_map.PixelToProj(x,y, &dX, &dY);

		if (m_bPtEdit )             //´¦ÓÚº½µã±à¼­Ä£Ê½Ê±
		{	
			m_iPtSel=GetPtSel(x,y);
		}
		if (m_bSetPointModel)//Öõã
		{
			if (m_designLinePointNum>=127) //ÏÞÖÆ×î¶à127¸öº½µã
			{
				return;
			}
			
			POINT   pt;
			GetCursorPos( &pt );

			//ÏñËØ×ø±êת¾­Î³¶È×ø±ê
			m_map.PixelToProj(x,y, &dX, &dY);

			//º½µã±àºÅ
			m_curDesignPoint.nPt = m_designLinePointNum+1;

			//º½µã¾­¶È
			m_curDesignPoint.dX = dX;

			//º½µãγ¶È
			m_curDesignPoint.dY = dY;

			m_pDesignLineStruct[m_designLinePointNum] = m_curDesignPoint;

			//º½µã±àºÅ¼ÆÊýÆ÷Ôö¼Ó1
			m_designLinePointNum++;

			m_bAddNewPoint = true;
		}
		 if (m_bPtDel)//ɾµã
		{
			int iSel=GetPtSel(x,y);
			int i=0;
			if (iSel!=-1)
			{ 
				for (i=iSel;i<m_designLinePointNum-1;i++)
				{
					m_pDesignLineStruct[i]=m_pDesignLineStruct[i+1];
					m_pDesignLineStruct[i].nPt=m_pDesignLineStruct[i].nPt-1;
				}

				m_designLinePointNum--;
			}
		}

		DrawLineDesign();
	}

	//к½ÏßÉè¼Æ 2016.01.05
	//µ±´¦ÓÚº½ÏßÉè¼Æ£¬²¢ÇÒÊó±ê´¦ÓÚÑ¡Ôñģʽʱ
	if (m_bHaveShowLineDesign && (Button == 1))
	{
		m_map.PixelToProj(x,y, &dX, &dY);

		if (m_bLDSetPoint)
		{
			POINT pt;
			GetCursorPos(&pt);

			//ÏñËØµã×ø±êת»¯¾­Î³¶È×ø±ê
			m_map.PixelToProj(x, y, &dX, &dY);

			//º½µã±àºÅ
			m_CurNewDesignPt.nPt = m_NowNumLineDesign + 1;

			//µ±Ç°Éè¼ÆµÄº½µãµÄ¾­¶È
			m_CurNewDesignPt.dX = dX;

			//µ±Ç°Éè¼ÆµÄº½µãµÄγ¶È
			m_CurNewDesignPt.dY = dY;

			//µ±Ç°Éè¼ÆµÄº½µãµÄ¸ß¶È
			m_CurNewDesignPt.nH = 0;

			//µ±Ç°Éè¼ÆµÄº½µãµÄËÙ¶È
			m_CurNewDesignPt.nV = 0;

			//µ±Ç°Éè¼ÆµÄº½µãµÄÈÎÎñÌØÕ÷×Ö
			m_CurNewDesignPt.ch1 = 0x02;

			//µ±Ç°Éè¼ÆµÄº½µãµÄº½Â·ÌØÕ÷×Ö
			m_CurNewDesignPt.ch2 = 0x01;

			m_pLineDesign->ShowLonLat(dX, dY);

			m_pNewDesignLineStruct[m_NowNumLineDesign] = m_CurNewDesignPt;

			m_pLineDesign->InsertPt(m_CurNewDesignPt);
			//º½µã±àºÅ¼ÆÊýÆ÷+1
			m_NowNumLineDesign++;


			//CLineDesign dlg;
			//dlg.ShowLonLat(m_curDesignPoint.dX, m_curDesignPoint.dX);
		}
	}


	//Êó±êÓÒ¼üµã»÷ʱ£¬µ¯³ö¿ì½Ý²Ëµ¥
	if (Button == 2 && !m_bLineDesign)
	{
		//ɾ³ýÒѾ­±ê»æµÄÖ±Ïß
		m_map.ClearDrawing(m_tempLayerID);
		m_map.Redraw();

		//ÏÔʾ¿ì½Ý²Ëµ¥
		CMenu   menu;

		POINT   pt;
		GetCursorPos( &pt );
		bool bSel = false;
		for (int i = 0;i<255;i++)
		{
			if (m_targets[i].id <= 0)
			{
				continue;
			}
			double pixX = 0;
			double pixY = 0;
			m_map.ProjToPixel(m_targets[i].lon,m_targets[i].lat, &pixX, &pixY);
			if (fabs(x-pixX)<5 && fabs(y-pixY)<5 )
			{
				bSel = true;
				m_targetSelID = m_targets[i].id;
				break;
			}
		}

		if (bSel)
		{
			menu.LoadMenu(IDR_MENU_TARGET);	
			//µ¯³ö¿ì½Ý²Ëµ¥
			menu.GetSubMenu( 0 )->TrackPopupMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON, pt.x,pt.y, this );
			return;
		}


		OnShowRMenu();
		/*
		//µ±´¦ÓڻطÅģʽʱ£¬ÉèÖᢵ¼Òý²Ù×÷¡¢º½Ïß×°¶©×Ӳ˵¥¶¼ÏÈ»ÒÉ«
		menu.LoadMenu(IDR_MENU2);	

		//º½Ïß1
		if (m_pHaveDrawLineFlag[0])
		{
			menu.CheckMenuItem( IDM_SHOW_LINE1, MF_BYCOMMAND | MF_CHECKED );
		}
		else
		{
			menu.CheckMenuItem( IDM_SHOW_LINE1, MF_BYCOMMAND | MF_UNCHECKED );
		}

		//º½Ïß2
		if (m_pHaveDrawLineFlag[1])
		{
			menu.CheckMenuItem( IDM_SHOW_LINE2, MF_BYCOMMAND | MF_CHECKED );
		}
		else
		{
			menu.CheckMenuItem( IDM_SHOW_LINE2, MF_BYCOMMAND | MF_UNCHECKED );
		}

		//º½Ïß3
		if (m_pHaveDrawLineFlag[2])
		{
			menu.CheckMenuItem( IDM_SHOW_LINE3, MF_BYCOMMAND | MF_CHECKED );
		}
		else
		{
			menu.CheckMenuItem( IDM_SHOW_LINE3, MF_BYCOMMAND | MF_UNCHECKED );
		}

		//º½Ïß4
		if (m_pHaveDrawLineFlag[3])
		{
			menu.CheckMenuItem( IDM_SHOW_LINE4, MF_BYCOMMAND | MF_CHECKED );
		}
		else
		{
			menu.CheckMenuItem( IDM_SHOW_LINE4, MF_BYCOMMAND | MF_UNCHECKED );
		}

		//º½Ïß5
		if (m_pHaveDrawLineFlag[4])
		{
			menu.CheckMenuItem( IDM_SHOW_LINE5, MF_BYCOMMAND | MF_CHECKED );
		}
		else
		{
			menu.CheckMenuItem( IDM_SHOW_LINE5, MF_BYCOMMAND | MF_UNCHECKED );
		}

		
		//º½Ïß6
		if (m_pHaveDrawLineFlag[5])
		{
			menu.CheckMenuItem( IDM_SHOW_LINE6, MF_BYCOMMAND | MF_CHECKED );
		}
		else
		{
			menu.CheckMenuItem( IDM_SHOW_LINE6, MF_BYCOMMAND | MF_UNCHECKED );
		}

		//º½Ïß7
		if (m_pHaveDrawLineFlag[6])
		{
			menu.CheckMenuItem( IDM_SHOW_LINE7, MF_BYCOMMAND | MF_CHECKED );
		}
		else
		{
			menu.CheckMenuItem( IDM_SHOW_LINE7, MF_BYCOMMAND | MF_UNCHECKED );
		}
		//º½Ïß8
		if (m_pHaveDrawLineFlag[7])
		{
			menu.CheckMenuItem( IDM_SHOW_LINE8, MF_BYCOMMAND | MF_CHECKED );
		}
		else
		{
			menu.CheckMenuItem( IDM_SHOW_LINE8, MF_BYCOMMAND | MF_UNCHECKED );
		}
		//º½Ïß9
		if (m_pHaveDrawLineFlag[8])
		{
			menu.CheckMenuItem( IDM_SHOW_LINE9, MF_BYCOMMAND | MF_CHECKED );
		}
		else
		{
			menu.CheckMenuItem( IDM_SHOW_LINE9, MF_BYCOMMAND | MF_UNCHECKED );
		}
		//º½Ïß10
		if (m_pHaveDrawLineFlag[9])
		{
			menu.CheckMenuItem( IDM_SHOW_LINE10, MF_BYCOMMAND | MF_CHECKED );
		}
		else
		{
			menu.CheckMenuItem( IDM_SHOW_LINE10, MF_BYCOMMAND | MF_UNCHECKED );
		}


		//º½Ïß14  »ØÊÕº½Ïß
		if (m_pHaveDrawLineFlag[13])
		{
			menu.CheckMenuItem( ID_SHOW_PD10, MF_BYCOMMAND | MF_CHECKED );
		}
		else
		{
			menu.CheckMenuItem( ID_SHOW_PD10, MF_BYCOMMAND | MF_UNCHECKED );
		}

		//º½Ïß11  Ó¦¼±º½Ïß
		if (m_pHaveDrawLineFlag[10])
		{
			menu.CheckMenuItem( ID_SHOW_HS11, MF_BYCOMMAND | MF_CHECKED );
		}
		else
		{
			menu.CheckMenuItem( ID_SHOW_HS11, MF_BYCOMMAND | MF_UNCHECKED );
		}

		//º½Ïß12  µç×ÓΧÀ¸
		if (m_pHaveDrawLineFlag[11])
		{
			menu.CheckMenuItem( ID_SHOW_TC12, MF_BYCOMMAND | MF_CHECKED );
		}
		else
		{
			menu.CheckMenuItem( ID_SHOW_TC12, MF_BYCOMMAND | MF_UNCHECKED );
		}

		if (m_bAutoMove)
		{
			menu.CheckMenuItem( IDM_AUTO_MOVE, MF_BYCOMMAND | MF_CHECKED );
		}
		else
		{
			menu.CheckMenuItem( IDM_AUTO_MOVE, MF_BYCOMMAND | MF_UNCHECKED );
		}

		if (m_guidePointMode == 1)
		{
			menu.CheckMenuItem( IDM_GUIDE_FLY1, MF_BYCOMMAND | MF_CHECKED );
		}
		else
		{
			menu.CheckMenuItem( IDM_GUIDE_FLY1, MF_BYCOMMAND | MF_UNCHECKED );
		}

		if (m_guidePointMode == 2)
		{
			menu.CheckMenuItem( IDM_GUIDE_FLY2, MF_BYCOMMAND | MF_CHECKED );
		}
		else
		{
			menu.CheckMenuItem( IDM_GUIDE_FLY2, MF_BYCOMMAND | MF_UNCHECKED );
		}

		if (m_bPlotDemArea)
		{
			menu.CheckMenuItem( ID_MENU_PLOTDEMAREA, MF_BYCOMMAND | MF_CHECKED );
		}
		else
		{
			menu.CheckMenuItem( ID_MENU_PLOTDEMAREA, MF_BYCOMMAND | MF_UNCHECKED );
		}

		if (m_bEnableShowADSB)
		{
			menu.CheckMenuItem( ID_MENU_ADSB, MF_BYCOMMAND | MF_CHECKED );
		}
		else
		{
			menu.CheckMenuItem( ID_MENU_ADSB, MF_BYCOMMAND | MF_UNCHECKED );
		}

		//µ¯³ö¿ì½Ý²Ëµ¥
		menu.GetSubMenu( 0 )->TrackPopupMenu( TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, this );
		*/
		//ÏñËØ×ø±êת¾­Î³¶È×ø±ê
		m_map.PixelToProj(x, y, &m_guidePtInfo.guidePtLon, &m_guidePtInfo.guidePtLat);


	}



	if (Button == 2 && m_bLineDesign)   //º½Ï߱༭ʱ£¬Í£Ö¹±à¼­
	{
		//ɾ³ýÒѾ­±ê»æµÄÖ±Ïߣ¨×·×ÙÏߺ;àÀë±ê×¢£©
		m_map.ClearDrawing(m_tempLayerID);
		m_map.Redraw();

		CMenu   tmenu;
		tmenu.LoadMenu(IDR_FLOATINGMENU);	
		CRect rc=CRect(0,0,x,y);
		ClientToScreen(&rc);
		//µ¯³ö¿ì½Ý²Ëµ¥
		tmenu.GetSubMenu( 0 )->TrackPopupMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON, rc.right,rc.bottom, this );
		return;

	}

	//´¦Óڵرêµã¶Ô»°¿òÑ¡µãģʽʱ£¬ÇÒÊó±ê¹â±ê´¦ÓÚÑ¡Ôñģʽ,×ó¼ü°´ÏÂ
	if (m_bSelectDropPoint && (m_map.GetCursorMode() == 3) && (Button == 1))
	{
		m_bSelectDropPoint = false;

		double _ptLon = 0.0, _ptLat = 0.0;

		//ÏñËØ×ø±êת¾­Î³¶È×ø±ê
		m_map.PixelToProj(x, y, &_ptLon, &_ptLat);

		//¸üÐÂ×ø±êµãÐÅÏ¢
		if (m_pTargetDlg && m_pTargetDlg->GetSafeHwnd())
		{
			m_pTargetDlg->ShowPointPosition(_ptLon,_ptLat);
		}
	}

	//´¦ÓÚ¿ÉÊÓÓò·ÖÎö¶Ô»°¿òÑ¡µãģʽʱ£¬ÇÒÊó±ê¹â±ê´¦ÓÚÑ¡Ôñģʽ,×ó¼ü°´ÏÂ
	if (g_bSelectDropPoint && (m_map.GetCursorMode() == 3) && (Button == 1))
	{
		g_bSelectDropPoint = false;

		double _ptLon = 0.0, _ptLat = 0.0;

		//ÏñËØ×ø±êת¾­Î³¶È×ø±ê
		m_map.PixelToProj(x, y, &_ptLon, &_ptLat);

		//¸üÐÂ×ø±êµãÐÅÏ¢,²¢Íê³ÉͨÊÓ·ÖÎö
		if (m_dlgLightRegion.GetSafeHwnd())
		{
			m_dlgLightRegion.ShowPointPosition(_ptLon,_ptLat);
			m_dlgLightRegion.LosBetweenTwoPoints();
		}
	}

	//¸ß³Ì·ÖÎöÑ¡µã
	if (g_bDemAnalysising && (Button == 1))
	{
		
		g_iDemPointNum++;

		//ÏñËØ×ø±êת¾­Î³¶È×ø±ê
		double _ptLon = 0.0, _ptLat = 0.0;
		m_map.PixelToProj(x, y, &_ptLon, &_ptLat);
		
		g_dDemPtLon[g_iDemPointNum-1] = _ptLon;
		g_dDemPtLat[g_iDemPointNum-1] = _ptLat;
		return;
		CString str;
		str.Format(_T("%d"), g_iDemPointNum);
		
		//ÏÔʾµãµÄÐòºÅ±ê×¢
		AddTextToPointShapeLayer(g_lDemPtNumLayerID[g_iDemPointNum-1], _ptLon, _ptLat, str, _T(""), RGB(255,0,0));

		if (g_iDemPointNum >= g_iDemAltPtNum)
		{
			BCGPMessageBox(_T("ÔÝʱ½öÖ§³Ö×î¶à10¸öµãµÄ¸ß³Ì·ÖÎö£¡"));

			g_bDemAnalysising = false;

			m_DlgDemAlt.DrawDemAltBetweenPts(g_dDemPtLon, g_dDemPtLat, g_iDemPointNum);

			if (m_DlgDemAlt.GetSafeHwnd())
			{
				m_DlgDemAlt.ShowWindow(TRUE);
			}
		}

	}

	//Ñ¡Ôñµ¼Òýµã
	if (m_bGuideMode && (Button == 1))
	{
		m_bGuideMode = false;
		m_map.PixelToProj(x,y,&m_guidePtInfo.guidePtLon,&m_guidePtInfo.guidePtLat);
		DrawGuidePoint(m_guidePtInfo.guideMode,m_guidePtInfo.guidePtLon,m_guidePtInfo.guidePtLat);
		switch(m_guidePointMode)
		{
		case 0:
			break;
		case 1:
			{
				m_struMapOut.cmd = MapCmd_Guide1;
				m_struMapOut.lon = m_guidePtInfo.guidePtLon;
				m_struMapOut.lat = m_guidePtInfo.guidePtLat;

				::SendMessage(GetParent()->GetSafeHwnd(),MESSAGE_B8MAP, (int)(&m_struMapOut),0);
			}
			break;
		case 2:
			{
				m_struMapOut.cmd = MapCmd_Guide2;
				m_struMapOut.lon = m_guidePtInfo.guidePtLon;
				m_struMapOut.lat = m_guidePtInfo.guidePtLat;

				::SendMessage(GetParent()->GetSafeHwnd(),MESSAGE_B8MAP, (int)(&m_struMapOut),0);
			}
			break;
		default:
			break;
		}
	}


}

void CGISDlg::MouseDblClickMap1()
{
	//½áÊø¸ß³Ì·ÖÎö
	if (g_bDemAnalysising)
	{
		g_bDemAnalysising = false;

		m_DlgDemAlt.DrawDemAltBetweenPts(g_dDemPtLon, g_dDemPtLat, g_iDemPointNum);

		if (m_DlgDemAlt.GetSafeHwnd())
		{
			m_DlgDemAlt.ShowWindow(TRUE);
		}
	}

	/*********************************by Wu 2023.09.20********************************************/
	double dX = 0;
	double dY = 0;

	//ÏñËØ×ø±êת¾­Î³¶È×ø±ê
	m_map.PixelToProj(GLOBAL_X,GLOBAL_Y, &dX, &dY);
	//Ë«»÷ɾ³ýº½µã
	if (m_bEditLine)
	{
		int ptSelected = GetPtSel(m_editLineDataGroup.pts,m_editLineDataGroup.pointNum,GLOBAL_X,GLOBAL_Y);
		if (g_b981CDesktop)
		{
			if (m_editLineDataGroup.lineID==11) //»ØÊÕº½Ï߯Á±Î1,4,5,6º½µã
			{
				if (ptSelected==0 || (ptSelected>=m_editLineDataGroup.pointNum-3))
				{
					return;
				}
			}
		}

		if (ptSelected>=0)
		{
			if (m_distLabelLayer!=-1)
			{
				m_map.ClearDrawing(m_distLabelLayer);//Çå³ý¾àÀëºÍ·½Î»½Ç±ê»æ
			}

			RemovePointInLine(ptSelected,m_editLineDataGroup);

			//Çå³ý±ê»æµÄº½Ïß
			ClearDrawedLine(m_editLineDataGroup.lineID-1);
			//±ê»æº½Ïß
			DrawFlyLine(m_editLineDataGroup);	
		}
	}

	/*********************************************************************************************/
	if (g_b981APad)  //ƽ°åģʽ˫»÷²â¾à½áÊø
	{
		if (m_bPolylineMeasure)
		{
			EndPolylineMessure();
		}
	}

}

void CGISDlg::MouseMoveMap1(short Button, short Shift, long x, long y)
{	
	if (Button == 2)
	{
		return;
	}

	//ÏÔʾ¾­Î³¶È×ø±êʱ(µØÍ¼¶¨Î»)
	if (m_bHaveShowLonLatDlg && m_pLonLatDlg ->GetAutoEditStatus())
	{
		double dX = 0;
		double dY = 0;

		m_map.PixelToProj(x,y, &dX, &dY);

		//Èí¼þ½çÃæÏÔʾ
		m_pLonLatDlg->SetLonLatInfo(dX, dY);
	}


	/*****************************************by Wu 2023.09.14*******************************************/
	//±à¼­º½Ïßʱ
	if (m_bEditLine && Button == 1)
	{
		double dX = 0;
		double dY = 0;

		//ÏñËØ×ø±êת¾­Î³¶È×ø±ê
		m_map.PixelToProj(x, y, &dX, &dY);
		if (m_iPtSel==-1)
		{
			return;
		}
		if (g_b981CDesktop)
		{
			if (m_editLineDataGroup.lineID==11)  //»ØÊÕº½Ïß1,4,5,6²»Èñ༭
			{
				if (m_iPtSel==0 || (m_iPtSel>=m_editLineDataGroup.pointNum-3))
				{
					return;
				}
			}
		}

		int n_pts = m_editLineDataGroup.pointNum;
		bool isClosedLine;
		if (m_editLineDataGroup.pts[n_pts-1].ch1==2) //·Ç±ÕºÏº½Ïß
		{
			isClosedLine = false;
		}
		else
		{
			isClosedLine = true;
		}

		m_dragFlag = true;
		m_editLineDataGroup.pts[m_iPtSel].dX = dX;
		m_editLineDataGroup.pts[m_iPtSel].dY = dY;
		m_editLineDataGroup.linePts[m_iPtSel].dX = dX;
		m_editLineDataGroup.linePts[m_iPtSel].dY = dY;
		if (m_iPtSel==0 && isClosedLine) //Ñ¡ÖÐÆðµãʱ£¬ÐèҪͬ²½ÐÞ¸ÄÏßÖÕµãµÄ×ø±ê
		{
			int endpt = m_editLineDataGroup.linePointNum - 1;
			m_editLineDataGroup.linePts[endpt].dX = dX;
			m_editLineDataGroup.linePts[endpt].dY = dY;
		}
		if (m_iPtSel==n_pts-1 && !isClosedLine) //·Ç±ÕºÏº½ÏßÖÕµã
		{
			m_editLineDataGroup.linePts[n_pts].dX = dX;
			m_editLineDataGroup.linePts[n_pts].dY = dY;
		}
		//Çå³ý±ê»æµÄº½Ïß
		ClearDrawedLine(m_editLineDataGroup.lineID-1);
		//±ê»æº½Ïß
		DrawFlyLine(m_editLineDataGroup);
		//ÍÏ×§º½µãʱÏÔʾ¾àÀëºÍ·½Î»½Ç
		if (m_distLabelLayer!=-1)
		{
			m_map.ClearDrawing(m_distLabelLayer);
		}
		m_distLabelLayer = m_map.NewDrawing(1);
		if (m_iPtSel==0)//Ñ¡ÖÐÆðµã
		{
			int endpt = m_editLineDataGroup.pointNum - 1;
			DrawDistLabelEx(m_distLabelLayer,m_editLineDataGroup.pts[m_iPtSel].dX,m_editLineDataGroup.pts[m_iPtSel].dY,m_editLineDataGroup.pts[m_iPtSel+1].dX,m_editLineDataGroup.pts[m_iPtSel+1].dY,0);
			if (isClosedLine)
			{
				DrawDistLabelEx(m_distLabelLayer,m_editLineDataGroup.pts[m_iPtSel].dX,m_editLineDataGroup.pts[m_iPtSel].dY,m_editLineDataGroup.pts[endpt].dX,m_editLineDataGroup.pts[endpt].dY,0);
			}	
		}
		else if (m_iPtSel==m_editLineDataGroup.pointNum - 1) //Ñ¡ÖÐÖÕµã
		{
			DrawDistLabelEx(m_distLabelLayer,m_editLineDataGroup.pts[m_iPtSel].dX,m_editLineDataGroup.pts[m_iPtSel].dY,m_editLineDataGroup.pts[m_iPtSel-1].dX,m_editLineDataGroup.pts[m_iPtSel-1].dY,0);
			if (isClosedLine)
			{
				DrawDistLabelEx(m_distLabelLayer,m_editLineDataGroup.pts[m_iPtSel].dX,m_editLineDataGroup.pts[m_iPtSel].dY,m_editLineDataGroup.pts[0].dX,m_editLineDataGroup.pts[0].dY,0);
			}	
		}
		else
		{
			DrawDistLabelEx(m_distLabelLayer,m_editLineDataGroup.pts[m_iPtSel].dX,m_editLineDataGroup.pts[m_iPtSel].dY,m_editLineDataGroup.pts[m_iPtSel-1].dX,m_editLineDataGroup.pts[m_iPtSel-1].dY,0);
			DrawDistLabelEx(m_distLabelLayer,m_editLineDataGroup.pts[m_iPtSel].dX,m_editLineDataGroup.pts[m_iPtSel].dY,m_editLineDataGroup.pts[m_iPtSel+1].dX,m_editLineDataGroup.pts[m_iPtSel+1].dY,0);
		}


		return;
	}
	/*****************************************************************************************************************/

	/*****************************************¶àµã²â¾à by Wu 2023.10.16************************************************/
	if (m_bPolylineMeasure && m_bMeasureDrag)
	{
		double dX = 0;
		double dY = 0;

		//ÏñËØ×ø±êת¾­Î³¶È×ø±ê
		m_map.PixelToProj(x, y, &dX, &dY);

		//ɾ³ýÒѾ­±ê»æµÄÖ±Ïß
		m_map.ClearDrawing(m_tempLayerID);
		//н¨ÁÙʱ±ê»æÍ¼²ã
		m_tempLayerID = m_map.NewDrawing(1);
		//»æÖÆÖ±Ïß
		if (m_tempLayerID!=-1)
		{
			m_map.DrawLineEx(m_tempLayerID,m_posPolylineMeasurePts[m_numPolylineMeasurePts-1][0], m_posPolylineMeasurePts[m_numPolylineMeasurePts-1][1], dX, dY, 2, RGB(0,255,0));	

			//ÏÔʾÏ߶εľàÀëºÍ·½Î»
			DrawDistLabelEx(m_tempLayerID,m_posPolylineMeasurePts[m_numPolylineMeasurePts-1][0], m_posPolylineMeasurePts[m_numPolylineMeasurePts-1][1], dX, dY);
		}	
	}

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


	//к½ÏßÉè¼ÆÊ±
	if (m_bHaveShowLineDesign)
	{
		double dX = 0;
		double dY = 0;

		m_map.PixelToProj(x,y, &dX, &dY);

		//º½ÏßÉè¼Æ¶Ô»°¿òÏÔʾ¾­Î³¶È
		//m_pLineDesign->ShowLonLat(dX, dY);
	}

	//º½ÏßÉè¼ÆÊ±
	if (m_bLineDesign)
	{
		double dX = 0;
		double dY = 0;

		//ÏñËØ×ø±êת¾­Î³¶È×ø±ê
		m_map.PixelToProj(x, y, &dX, &dY);

		if (m_bPtEdit )  //´¦ÓÚº½µã±à¼­Ä£Ê½Ê±
		{
			if (m_iPtSel==-1)
			{
				return;
			}

			m_pDesignLineStruct[m_iPtSel].dX=dX;
			m_pDesignLineStruct[m_iPtSel].dY=dY;
			DrawLineDesign();
			return;

			//ÅжÏÊó±êÊÇ·ñÑ¡Öдý±à¼­µÄº½µã
			if (BeMouseClickedLinePoint(m_curEditLinePoint, x, y))
			{
				//±à¼­º½µã
				m_pFlyLineDesign->EditPoint(dX, dY);
			}

			return;
		}

		if (m_bDesignFirstPoint)
		{
			//º½¶ÎÐÅÏ¢¸³Öµ£¬ÏÔʾº½¶ÎÐÅÏ¢£¬ÒÔ¼°º½µã¾àÀëÔ­µãµÄ¾àÀëºÍ·½Î»½Ç
			m_pLineSectDlg->InputPointCoordinate(dX, dY);

			//º½µã±àºÅ
			m_curDesignPoint.nPt = m_designLinePointNum+1;

			//º½µã¾­¶È
			m_curDesignPoint.dX = dX;

			//º½µãγ¶È
			m_curDesignPoint.dY = dY;
			
			//Ôö¼Óº½µã
			m_pFlyLineDesign->AddPoint(m_curDesignPoint);

			return;
		}

		//ÒѾ­´æÔÚÁÙʱ±ê»æÍ¼²ãʱ£¬É¾³ý¸Ãͼ²ã£¬ÖØÐ±ê×¢
		if (m_designLinePointNum>0 && m_beTemLayerDrawing)
		{
			//º½¶ÎÐÅÏ¢¸³Öµ£¬ÏÔʾº½¶ÎÐÅÏ¢£¬ÒÔ¼°º½µã¾àÀëÔ­µãµÄ¾àÀëºÍ·½Î»½Ç
			m_pLineSectDlg->InputPointCoordinate(dX, dY);

			//ɾ³ýÒѾ­±ê»æµÄÖ±Ïß
			m_map.ClearDrawing(m_tempLayerID);

			//н¨ÁÙʱ±ê»æÍ¼²ã
			m_tempLayerID = m_map.NewDrawing(1);

			//º½µã±àºÅ
			m_curDesignPoint.nPt = m_designLinePointNum+1;

			//º½µã¾­¶È
			m_curDesignPoint.dX = dX;

			//º½µãγ¶È
			m_curDesignPoint.dY = dY;

			//Ôö¼Óº½µã
			m_pFlyLineDesign->AddPoint(m_curDesignPoint);

			//»æÖÆÖ±Ïß
			if (m_tempLayerID!=-1)
			{
				m_map.DrawLineEx(m_tempLayerID,m_pDesignLineStruct[m_designLinePointNum-1].dX, m_pDesignLineStruct[m_designLinePointNum-1].dY, dX, dY, 2, RGB(0,255,0));	
			    DrawDistLabelEx(m_tempLayerID, m_pDesignLineStruct[m_designLinePointNum-1].dX, m_pDesignLineStruct[m_designLinePointNum-1].dY, dX, dY);
			}
					 
		}
	}

	//´¦ÓÚ¿ÉÊÓÓò·ÖÎö¶Ô»°¿òÑ¡µãģʽʱ£¬ÇÒÊó±ê¹â±ê´¦ÓÚÑ¡Ôñģʽ
	if (m_bSelectDropPoint && (m_map.GetCursorMode() == 3))
	{
		double _ptLon = 0.0, _ptLat = 0.0;

		//ÏñËØ×ø±êת¾­Î³¶È×ø±ê
		m_map.PixelToProj(x, y, &_ptLon, &_ptLat);

		//¸üÐÂ×ø±êµãÐÅÏ¢
		if (m_pTargetDlg && m_pTargetDlg->GetSafeHwnd())
		{
			m_pTargetDlg->ShowPointPosition(_ptLon,_ptLat);
		}
	}

	//´¦ÓÚ¿ÉÊÓÓò·ÖÎö¶Ô»°¿òÑ¡µãģʽʱ£¬ÇÒÊó±ê¹â±ê´¦ÓÚÑ¡Ôñģʽ
	if (g_bSelectDropPoint && (m_map.GetCursorMode() == 3))
	{
		double _ptLon = 0.0, _ptLat = 0.0;

		//ÏñËØ×ø±êת¾­Î³¶È×ø±ê
		m_map.PixelToProj(x, y, &_ptLon, &_ptLat);

		//¸üÐÂ×ø±êµãÐÅÏ¢
		if (m_dlgLightRegion.GetSafeHwnd())
		{
			m_dlgLightRegion.ShowPointPosition(_ptLon,_ptLat);
		}

		if (m_longSelectLineID > 0)
		{
			m_map.GetShapefile(m_longSelectLineID).EditClear();
		}

		m_gisManager->CreateEmptyLineShapfile(m_longSelectLineID,RGB(0,255,0),2);
		m_gisManager->AddOnePoint2Shapfile(m_longSelectLineID,1,m_dlgLightRegion.m_dGroundLon,m_dlgLightRegion.m_dGroundLat);
		m_gisManager->AddOnePoint2Shapfile(m_longSelectLineID,1,_ptLon,_ptLat);

		double _distance = 0.0, _angle = 0.0;
		CalculateTwoPtsDistanceAzimuth(_distance, _angle, m_dlgLightRegion.m_dGroundLon,m_dlgLightRegion.m_dGroundLat, _ptLon, _ptLat, 3);

		CString str;
		str.Format(_T("D:%.1fkm  A:%.1f¡ã"), _distance/1000, _angle);

		if (m_longLabelPlotID != 0)
		{
			ClearPointShape(m_longLabelPlotID);
			m_longLabelPlotID = 0;
		}
		//±ê×¢¾àÀëºÍ·½Î»
		AddPointShapeLayer(m_longLabelPlotID,_ptLon, _ptLat, str, _T("ºìÉ«"), RGB(255,0,0));
	}
	//¸ß³Ì·ÖÎöʱ
	if (g_bDemAnalysising && g_iDemPointNum>=1 )
	{
		double lon = 0, lat = 0;
		m_map.PixelToProj(x, y, &lon, &lat);

		double _dis = 0;
		CalculateTwoPtsDistance(_dis, g_dDemPtLon[g_iDemPointNum-1], g_dDemPtLat[g_iDemPointNum-1], lon, lat, 3);

		//¹ýÂ˵ôÓÉÓÚË«»÷½áÊøÊ±¶à³öµÄÒ»ÌõÏß¶Î
		if (_dis > 30)
		{
			m_map.RemoveLayer(g_lDemAltLayerID[g_iDemPointNum-1]);

			//´´½¨Ïßͼ²ã
			CreateEmptyShapfile(g_lDemAltLayerID[g_iDemPointNum-1], 1, RGB(255,255,255));

			//»æÖÆÏß¶Î
			AddOnePoint2Shapfile(g_lDemAltLayerID[g_iDemPointNum-1], 1, g_dDemPtLon[g_iDemPointNum-1], g_dDemPtLat[g_iDemPointNum-1]);
			AddOnePoint2Shapfile(g_lDemAltLayerID[g_iDemPointNum-1], 1, lon, lat);

			//ÏÔʾÏ߶εľàÀëºÍ·½Î»£¨»æÖƱê×¢£©
			DrawLineLabel(g_lDemAltLayerID[g_iDemPointNum-1], g_dDemPtLon[g_iDemPointNum-1], g_dDemPtLat[g_iDemPointNum-1], lon, lat);
			
		}
	}

	//Ñ¡Ôñ±ê¼Çµãʱ
	if (g_bSelectMarker)
	{
		TRACE("g_bSelectMarker = true\n");
		double _ptLon = 0.0, _ptLat = 0.0;

		//ÏñËØ×ø±êת¾­Î³¶È×ø±ê
		m_map.PixelToProj(x, y, &_ptLon, &_ptLat);

		m_dlgMarker.ShowMarkerCoordinate(_ptLon, _ptLat);
		return;
	}
}

//¹¦ÄÜ£º»ùÓÚµãʸÁ¿Í¼²ã±ê»æÄ¿±êµã
//ÊäÈ룺µãͼ²ãÃû³ÆdrawLayerID
//		µã×ø±ê£¬¾­¶Èlon, γ¶Èlat
//      µãÃû³ÆstrPtName    
//      ±ê»æÑÕÉ«strColor
//      ±ê»æ×ÖÌåÑÕÉ«ÊýÖµfontColor
void CGISDlg::AddTextToPointShapeLayer(long &drawLayerID, const double lon, const double lat, const CString strPtName, const CString strColor, unsigned long fontColor)
{
	//ÅжϵãʸÁ¿Í¼²ãÊÇ·ñÒѾ­´æÔÚ£¬´æÔÚÔòɾ³ý
	if (drawLayerID > 0)
	{
		//Çå³ý±ê»æµÄµãʸÁ¿Í¼²ã
		ClearPointShape(drawLayerID);
	}

	/////////////////////н¨µãʸÁ¿Í¼²ã±ê»æµãÄ¿±ê///////////////////////////////////
	//´´½¨µãͼ²ã
	CreateEmptyShapfile(drawLayerID, 0, RGB(0,255,0));

	/////////////////////ÍùSHPͼ²ãÖмÓÈëÄ¿±êµã±ê×¢ÐÅÏ¢///////////////////////////////

	//Label¼¯ºÏ
	CLabels labesPtr;
	labesPtr = (m_map.GetShapefile(drawLayerID)).GetLabels();

	CLabelCategory labelCategory = labesPtr.AddCategory(strColor);
	labelCategory.SetFontColor(fontColor);
	labelCategory.SetAlignment(1);
	labelCategory.SetFontBold(TRUE);
	labelCategory.SetFontName(_T("Times New Roman"));
	labelCategory.SetFontSize(12);

	//Ôö¼ÓLabels
	labesPtr.AddLabel(strPtName, lon+0.0002, lat+0.0002, 0, 0);

	//ÖØÐ»æÖÆ
	m_map.Redraw();
}

//¹¦ÄÜ£ºÏÔʾÁ½µãËùÁ¬Ï߶εľàÀëºÍ·½Î»±ê×¢£¨Label£©
// drawLayerID	   »æÖƱê×¢µÄͼ²ãID
// ptLon1, ptLat1  µÚÒ»¸öµãµÄ¾­Î³¶È
// ptLon2, ptLat2  µÚ¶þ¸öµãµÄ¾­Î³¶È
void CGISDlg::DrawLineLabel(long &drawLayerID, const double ptLon1, const double ptLat1, const double ptLon2, const double ptLat2)
{
	double _dis, _angle;
	CalculateTwoPtsDistanceAzimuth(_dis, _angle, ptLon1, ptLat1, ptLon2, ptLat2, 3);

	CString str = _T("");
	if ( _dis < 1000)
	{
		str.Format(_T("%.1fm/%.1f¡ã"), _dis, _angle);		
	} 
	else
	{
		str.Format(_T("%.2fkm/%.1f¡ã"), _dis*0.001,_angle);
	}

	//¸ù¾ÝÓëÄ¿±êÖ®¼äµÄÏà¶ÔλÖùØÏµ½øÐÐÎÄ×Ö±ê×¢
	double textLon = 0;
	double textLat = 0;

	//¼ÆËã±ê×¢µã×ø±ê
	TargetPos2LabelPos(textLon, textLat, (ptLon1 + ptLon2)/2, (ptLat1 + ptLat2)/2);

	if (_T("") != str)
	{
		//Label¼¯ºÏ
		CLabels labesPtr;
		labesPtr = (m_map.GetShapefile(drawLayerID)).GetLabels();
		
		labesPtr.SetFontColor(RGB(255,127,0));
		labesPtr.SetFrameTransparency(0);
		labesPtr.SetAlignment(1);
		labesPtr.SetFontBold(TRUE);
		labesPtr.SetFontName(_T("Times New Roman"));
		labesPtr.SetFontSize(15);
		labesPtr.put_FontSize2(15);

		labesPtr.AddLabel(str, textLon, textLat, 0, 0);
	}
	//ÖØ»æ
	m_map.Redraw();
}

//¹¦ÄÜ£ºÏÔʾÁ½µãËùÁ¬Ï߶εľàÀëºÍ·½Î»
void CGISDlg::DrawDistLabelEx(long drawLayerID, const double ptLon1, const double ptLat1, const double ptLon2, const double ptLat2,int pos)
{
	double _dis, _angle;
	CalculateTwoPtsDistanceAzimuth(_dis, _angle,  ptLon1, ptLat1, ptLon2, ptLat2, 3);

	CString str = _T("");
	if ( _dis < 1000)
	{
		str.Format(_T("%dm;%.1f¡ã"), int(_dis), _angle);		
	} 
	else
	{
		if(_dis<1000)
		{
			str.Format(_T("%.2fkm;%.1f¡ã"), _dis*0.001, _angle);	
		}
		else
		{
			str.Format(_T("%.2fkm;%.1f¡ã"), _dis*0.001,_angle);
		}
	}

	//¸ù¾ÝÓëÄ¿±êÖ®¼äµÄÏà¶ÔλÖùØÏµ½øÐÐÎÄ×Ö±ê×¢
	double textLon = 0;
	double textLat = 0;

	//¼ÆËã±ê×¢µã×ø±ê
	//TargetPos2LabelPos(textLon, textLat, (ptLon1 + ptLon2)/2, (ptLat1 + ptLat2)/2);
	switch (pos)
	{
	case -1://×ó¶Ëµã
		TargetPos2LabelPos(textLon, textLat, ptLon1, ptLat1);
		break;
	case 0://Öмä¶Ëµã
		TargetPos2LabelPos(textLon, textLat, (ptLon1 + ptLon2)/2, (ptLat1 + ptLat2)/2);
		break;
	case 1://ÓҶ˵ã
		TargetPos2LabelPos(textLon, textLat, ptLon2, ptLat2);
		break;
	}

	CLabels drawLabels = m_map.GetDrawingLabels(drawLayerID);
	//drawLabels.SetAvoidCollisions(false);
	/*
	CLabelCategory labelCategory = drawLabels.AddCategory(_T("dist"));
	labelCategory.SetFontName(_T("ºÚÌå"));
	labelCategory.SetFontSize(12);
	labelCategory.SetOffsetX(8);
	labelCategory.SetFrameVisible(true);
	labelCategory.SetFrameTransparency(180);
	*/

	drawLabels.SetFontName(_T("ºÚÌå"));
	//drawLabels.SetFontName(_T("Arial"));
	drawLabels.SetFontColor(RGB(220,220,220));
	drawLabels.SetFontSize(12);
	drawLabels.SetFontBold(true);
	drawLabels.SetOffsetX(8);
	drawLabels.SetFrameVisible(true);
	drawLabels.SetFrameOutlineWidth(0);
	drawLabels.SetFrameTransparency(150);
	drawLabels.SetFrameBackColor(RGB(50,50,50));
	drawLabels.SetFrameOutlineColor(RGB(50,50,50));
	
	//labelCategory.SetLineOrientation(mapWindow::tkLineLabelOrientation::lorParallel);

	//drawLabels.AddLabel(str,textLon,textLat,_angle-90,0);
	drawLabels.AddLabel(str,textLon,textLat,0,0);

	//ÖØ»æ
	m_map.Redraw();
}

//¹¦ÄÜ:ÏÔʾº½µãÖ®¼äµÄ¾àÀëºÍ·½Î»
void CGISDlg::DrawDistLabel(long drawLayerID,const double pts[][2], const int ptNum,int pos)
{
	double _dis, _angle;
	double dist_total = 0;
	int i = 0;
	for (i=0; i<ptNum-1; i++)
	{

		CalculateTwoPtsDistanceAzimuth(_dis, _angle, pts[i][0], pts[i][1], pts[i+1][0], pts[i+1][1], 3);

		dist_total += _dis;

		CString str = _T("");
		if(i==0)
		{
			if ( dist_total < 1000)
			{
				str.Format(_T("%dm;%.1f¡ã"), int(dist_total), _angle);		
			} 
			else
			{
				if(_dis<1000)
				{
					str.Format(_T("%.2fkm;%.1f¡ã"), dist_total*0.001, _angle);	
				}
				else
				{
					str.Format(_T("%.2fkm;%.1f¡ã"), dist_total*0.001,_angle);
				}
			}
		}
		else
		{
			if ( dist_total < 1000)
			{
				str.Format(_T("%dm(+%dm);%.1f¡ã"), int(dist_total), int(_dis), _angle);		
			} 
			else
			{
				if(_dis<1000)
				{
					str.Format(_T("%.2fkm(+%dm);%.1f¡ã"), dist_total*0.001, int(_dis), _angle);	
				}
				else
				{
					str.Format(_T("%.2fkm(+%.2fkm);%.1f¡ã"), dist_total*0.001,_dis*0.001,_angle);
				}
			}
		}

		//¸ù¾ÝÓëÄ¿±êÖ®¼äµÄÏà¶ÔλÖùØÏµ½øÐÐÎÄ×Ö±ê×¢
		double textLon = 0;
		double textLat = 0;

		//¼ÆËã±ê×¢µã×ø±ê
		switch (pos)
		{
		case -1: //×ó¶Ëµã
			TargetPos2LabelPos(textLon, textLat, pts[i][0], pts[i][1]);
			break;
		case 0: //Öмä
			TargetPos2LabelPos(textLon, textLat, (pts[i][0] + pts[i+1][0])/2, (pts[i][1] + pts[i+1][1])/2);
			break;
		case 1: //ÓҶ˵ã
			TargetPos2LabelPos(textLon, textLat, pts[i+1][0], pts[i+1][1]);
			break;
		}

		CLabels drawLabels = m_map.GetDrawingLabels(drawLayerID);
		CLabelCategory labelCategory = drawLabels.AddCategory(_T("totaldist"));
		labelCategory.SetFontName(_T("ºÚÌå"));
		labelCategory.SetFontColor(RGB(220,220,220));
		labelCategory.SetFontBold(true);
		labelCategory.SetFontSize(10);
		labelCategory.SetOffsetX(10);
		labelCategory.SetFrameTransparency(150);
		labelCategory.SetFrameVisible(true);
		labelCategory.SetFrameBackColor(RGB(50,50,50));
		labelCategory.SetFrameOutlineColor(RGB(50,50,50));

		if (pos==0)
		{
			drawLabels.AddLabel(str,textLon,textLat,_angle-90,0);
		}
		else
		{
			drawLabels.AddLabel(str,textLon,textLat,0,0);
		}

		//ÖØ»æ
		m_map.Redraw();
		//m_map.DrawLabelEx(drawLayerID,str,textLon,textLat,_angle);
	}
}

//¹¦ÄÜ:ÏÔʾº½µãÖ®¼äµÄ¾àÀëºÍ·½Î»
void CGISDlg::DrawDistLebel(long drawLayerID,const PtStruct *pts, const int ptNum)
{
	double _dis, _angle;
	double dist_total = 0;
	int i = 0;
	for (i=0; i<ptNum-1; i++)
	{

		CalculateTwoPtsDistanceAzimuth(_dis, _angle, pts[i].dX, pts[i].dY, pts[i+1].dX, pts[i+1].dY, 3);

		dist_total += _dis;

		CString str = _T("");
		if(i==0)
		{
			if ( dist_total < 1000)
			{
				str.Format(_T("%dm;%.1f¡ã"), int(dist_total), _angle);		
			} 
			else
			{
				if(_dis<1000)
				{
					str.Format(_T("%.2fkm;%.1f¡ã"), dist_total*0.001, _angle);	
				}
				else
				{
					str.Format(_T("%.2fkm;%.1f¡ã"), dist_total*0.001,_angle);
				}
			}
		}
		else
		{
			if ( dist_total < 1000)
			{
				str.Format(_T("%dm(+%dm);%.1f¡ã"), int(dist_total), int(_dis), _angle);		
			} 
			else
			{
				if(_dis<1000)
				{
					str.Format(_T("%.2fkm(+%.dm);%.1f¡ã"), dist_total*0.001, int(_dis), _angle);	
				}
				else
				{
					str.Format(_T("%.2fkm(+%.2fkm);%.1f¡ã"), dist_total*0.001,_dis*0.001,_angle);
				}
			}
		}

		//¸ù¾ÝÓëÄ¿±êÖ®¼äµÄÏà¶ÔλÖùØÏµ½øÐÐÎÄ×Ö±ê×¢
		double textLon = 0;
		double textLat = 0;

		//¼ÆËã±ê×¢µã×ø±ê
		TargetPos2LabelPos(textLon, textLat, (pts[i].dX + pts[i+1].dX)/2, (pts[i].dY + pts[i+1].dY)/2);

		CLabels drawLabels = m_map.GetDrawingLabels(drawLayerID);
		CLabelCategory labelCategory = drawLabels.AddCategory(_T("totaldist"));
		labelCategory.SetFontName(_T("ºÚÌå"));
		labelCategory.SetFontColor(RGB(220,220,220));
		labelCategory.SetFontBold(true);
		labelCategory.SetFontSize(12);
		labelCategory.SetOffsetX(10);
		labelCategory.SetFrameTransparency(150);
		labelCategory.SetFrameVisible(true);
		labelCategory.SetFrameBackColor(RGB(50,50,50));
		labelCategory.SetFrameOutlineColor(RGB(50,50,50));

		drawLabels.AddLabel(str,textLon,textLat,_angle-90,0);
		//ÖØ»æ
		m_map.Redraw();
		//m_map.DrawLabelEx(drawLayerID,str,textLon,textLat,_angle);
	}
}

//Çå³ý¶àµã²âÁ¿
void CGISDlg::ClearPloylineMeasure()
{
	m_map.RemoveLayer(m_polylineMeasureLineLayerID);
	m_map.RemoveLayer(m_polylineMeasurePtLayerID[0]);
	m_map.RemoveLayer(m_polylineMeasurePtLayerID[1]);
	m_map.ClearDrawing(m_polylineMeasureLabelLayerID);
	m_map.ClearDrawing(m_tempLayerID);

	m_polylineMeasureLineLayerID = -1;
	m_polylineMeasureLabelLayerID = -1;
	m_polylineMeasurePtLayerID[0] = -1;
	m_polylineMeasurePtLayerID[1] = -1;

	m_map.Redraw();
}

//¹¦ÄÜ£º¹Ø±ÕÏÔʾ¾­¶È¡¢Î³¶ÈµÄÈí¼þ½çÃæ
LRESULT CGISDlg::OnCloseLonLatDialog(WPARAM wParam, LPARAM lParam)
{	
	OnShowLonLatInfo();

	return 0;
}



//¹¦ÄÜ£º¹Ø±ÕÏÔʾ2µãÖ®¼äµÄ¾­Î³¶È×ø±êµÄÈí¼þ½çÃæ
LRESULT CGISDlg::OnCloseShowDistanceDialog(WPARAM wParam, LPARAM lParam)
{	
	OnSurvey();

	return 0;
}


//¹¦ÄÜ£º½øÐк½ÏßÉè¼Æ£¬µ¯³öº½ÏßÊý¾Ý¶Ô»°¿ò
void CGISDlg::OnFlyLineDesign()
{
	m_tempLayerID = -1;
	m_designLineLayerID = -1;
	m_designLineLayerID2 = -1;
	
	//return;
	//ÒѾ­¼ÓÔØµØÍ¼
	 	if (m_bHaveAddMap)
	 	{
	 		//ÒѾ­´¦ÓÚº½ÏßÉè¼Æ×´Ì¬Ê±£¬·µ»Ø
	 		if (m_bLineDesign)
	 		{
	 			return;
	 		}
	 		else
	 		{
	 			m_bLineDesign = true;
	 
	 			//Éè¼ÆµÚÒ»¸öº½µã
	 			m_bDesignFirstPoint = true;
	 		}

	 		//Çå³ýÏÖÓеĺ½ÏßÊý¾Ý
	 		m_pFlyLineDesign->ClearCurrentData();
	 
	 		//ÏÔʾº½ÏßÉè¼Æ¶Ô»°¿ò	
	 		//m_pFlyLineDesign->ShowWindow(SW_SHOW);

			
	 	
	 		//ÏÔʾÈí¼þ
	 		//m_pLineSectDlg->ShowWindow(SW_SHOW);
	 
	 		//ÉèÖÃÊó±êΪ¡°Ñ¡Ôñ¡±Ñùʽ
	 		m_map.SetCursorMode(3);
	 	}
	 	else
	 	{
	 		AfxMessageBox(_T("ÇëÏȼÓÔØµØÍ¼Êý¾Ý£¡"));
	 	}	
}


//¹¦ÄÜ£ºÉèÖÃGISµÄÏÔÊ¾ÇøÓò
void CGISDlg::SetGISWindowArea(const CRect gisArea)//´«½øÀ´µÄÇøÓòΪGIS¶Ô»°¿òµÄÆÁÄ»×ø±êÇøÓò
{	
	//ÔÚÕû¸öÈ«ÆÁÄ»ÖеÄGISÏÔÊ¾ÇøÓò
	m_rcGISArea = gisArea;
}

//¹¦ÄÜ£ºÏÔʾGIS¶Ô»°¿òÇøÓò
void ShowDlg(const CRect rc, CWnd* pParent)
{
	  //pParent->Create(IDD_DIALOG1,pParent);
	
}
//¹¦ÄÜ£º¼ÆËãÓÃÓÚ±ê»æÎÞÈË»úµÄ18¸öµã×ø±ê
void CGISDlg::CalculateUAVPolygonCoordinate(const double dX, const double dY, const double yaw)
{	
	double pixelX = 0;
	double pixelY = 0;

	m_map.ProjToPixel(dX, dY,	&pixelX, &pixelY);

	// »­·É»ú
	//²ÉÓôź½Ïò½Ç
	double sinang = sin(yaw * DEG2RAD);
	double cosang = cos(yaw * DEG2RAD);

	//ÐýתºóµÄÏñËØ×ø±ê
	double rotatePixelX = 0;
	double rotatePixelY = 0;

	//¼ÆËã¾­¹ý×ø±êÐýתºÍÆ½ÒÆºóµÄÎÞÈË»ú×ø±ê
	for(int k=0; k<m_ptNum; k++)   //¹²18¸öº½µã
	{
		rotatePixelX = pixelX + (m_ptPlane[k].x * cosang - m_ptPlane[k].y * sinang);	  //X·½ÏòÏñËØ×ø±ê
		rotatePixelY = pixelY + (m_ptPlane[k].x * sinang + m_ptPlane[k].y * cosang);	  //Y·½ÏòÏñËØ×ø±ê

		//ÏñËØ×ø±êת¾­Î³¶È×ø±ê
		m_map.PixelToProj(rotatePixelX, rotatePixelY, &m_ppUavPtArray[k][0], &m_ppUavPtArray[k][1]);
	}
}
void CGISDlg::CalculateUAVPolygonCoordinate_ADS(const double dX, const double dY, const double yaw)
{	
	double pixelX = 0;
	double pixelY = 0;

	m_map.ProjToPixel(dX, dY,	&pixelX, &pixelY);

	// »­·É»ú
	//²ÉÓôź½Ïò½Ç
	double sinang = sin(yaw * DEG2RAD);
	double cosang = cos(yaw * DEG2RAD);

	//ÐýתºóµÄÏñËØ×ø±ê
	double rotatePixelX = 0;
	double rotatePixelY = 0;

	//¼ÆËã¾­¹ý×ø±êÐýתºÍÆ½ÒÆºóµÄÎÞÈË»ú×ø±ê
	for(int k=0; k<m_ptNum; k++)   //¹²18¸öº½µã
	{
		rotatePixelX = pixelX + (m_ptPlane_ADS[k].x * cosang - m_ptPlane_ADS[k].y * sinang);	  //X·½ÏòÏñËØ×ø±ê
		rotatePixelY = pixelY + (m_ptPlane_ADS[k].x * sinang + m_ptPlane_ADS[k].y * cosang);	  //Y·½ÏòÏñËØ×ø±ê

		//ÏñËØ×ø±êת¾­Î³¶È×ø±ê
		m_map.PixelToProj(rotatePixelX, rotatePixelY, &m_ppUavPtArray_ADS[k][0], &m_ppUavPtArray_ADS[k][1]);
	}
}

//¹¦ÄÜ£º½ÓÊÕµ½º½ÏßÉè¼Æ¶Ô»°¿òÍ˳öÏûÏ¢£¬½øÐд¦Àí
LRESULT CGISDlg::OnCloseLineDesignDialog(WPARAM wParam, LPARAM lParam)
{
	//º½ÏßÉè¼Æ±êʶΪFALSE
	m_bLineDesign = false;

	//Çå³ýÓ뺽ÏßÉè¼ÆÏà¹ØµÄ±ê×¢Êý¾Ý
	RemoveDesignLineData();

	//Òþ²Øº½ÏßÉè¼ÆÊ±£¬ÏÔʾº½¶ÎÊý¾ÝµÄ¶Ô»°¿ò
	m_pLineSectDlg->ShowWindow(SW_HIDE);

	return 0;
}

//¹¦ÄÜ£ºÉ¾³ýº½ÏßÉè¼ÆµÄÊý¾Ý£¬°üÀ¨º½ÏßÊý¾ÝºÍº½Ïß±ê»æÊý¾Ý
void CGISDlg::RemoveDesignLineData()
{
	//Éè¼ÆµÄº½µã¸öÊý´óÓÚ0ʱ
	if (m_designLinePointNum > 0)
	{
		m_designLinePointNum = 0;

		//Çå³ýº½ÏßÉè¼ÆÊ±²úÉúµÄ±ê»æÐÅÏ¢
		ClearDrawingInLineDesign();
		//m_map.RedrawWindow(m_designLineLayerID2);

	}
}

//¹¦ÄÜ£ºÇå³ýº½ÏßÉè¼ÆÊ±±ê»æµÄÊý¾Ý
void CGISDlg::ClearDrawingInLineDesign()
{
	/////////////Çå³ý±ê»æÊý¾Ý/////////////

	//ɾ³ýÒѾ­±ê»æµÄÖ±Ïß
	m_map.ClearDrawing(m_tempLayerID);
	m_map.ClearDrawing(m_designLineLayerID);
	if (m_designLineLayerID2 != -1)
	{
		m_map.RemoveLayer(m_designLineLayerID2);
	}
	//m_map.ClearLabels(m_designLineLayerID);
}


void CGISDlg::MouseWheel(short zDelta)
{
	m_bSetPointModel=FALSE;


	//m_bHaveShowLineDesign = TRUE;

	//m_bLDSetPoint = FALSE;
	//m_bLineDesign=FALSE;
	m_bPtDel=FALSE;
	m_bPtEdit=FALSE;
	if (m_bHaveAddMap)
	{
		//¹öÂÖ·Å´ó¡¢ËõС
		m_map.ZoomIn(0.0005 * zDelta);
	}
}




//¹¦ÄÜ£ºÔö¼ÓÄ¿±êµã£¬ÔÚµØÍ¼ÏÔÊ¾Çø±ê»æ³öÀ´
//ÊäÈ룺Ŀ±êµãºÅnPt£¬¾­¶ÈdX£¬Î³¶ÈdY
void CGISDlg::AddTargetPoint(const int nPt, const double dX, const double dY)
{
	//ûÓмÓÔØµØÍ¼
	if (!m_bHaveAddMap)
	{
		return;
	}

	CString str;
	str.Format(_T("Target%d"), nPt);

	//×ÖÌå±ê»æÑÕÉ«
	CString strColor = _T("ÂÌÉ«");

	//»ùÓÚµãͼ²ã½øÐбê×¢
	AddPointShapeLayer(m_targetDrawLayerID, dX, dY, str, strColor, RGB(0,255,0));
}


//¹¦ÄÜ£ºÔÚʸÁ¿Í¼²ãÖж¯Ì¬±ê»æ³öÎÞÈË»ú
//ÊäÈ룺¾­¶ÈdX£¬Î³¶ÈdY,º½Ïò½Çyaw
//˵Ã÷£º´´½¨×¨ÃÅÓÃÓÚ»æÖÆÎÞÈË»úµÄʸÁ¿ÃæÍ¼²ã£¬Ã¿´ÎÏÈɾ³ýÉÏ´Î±ê»æµÄShp£¬ÔÙÖØÐ屐Ⱦ
void CGISDlg::DrawUAV(int uavid, const double dX, const double dY, const double yaw,bool control)
{
	if (uavid<0||uavid>2)
	{
		return;
	}
	//2017.03 by ZCW
	/*
	//µÚÒ»´Î±ê»æº½¼££¬Ð½¨±ê»æÍ¼²ã
	if (!m_bFirstDrawUAVTrack)
	{
		//´´½¨ÎÞÈË»ú¹ì¼£Ïß±ê»æÍ¼²ã
		CreateEmptyShapfile(m_flyTrackLayerID, 1, RGB(255,0,0));

		//´´½¨ÎÞÈË»ú»úÌå±ê»æÍ¼²ã
		CreateEmptyShapfile(m_UAVFlyTrackLayerID, 2, RGB(255,0,0));

		m_bFirstDrawUAVTrack = true;
	}
	else
	{
		//Çå³ý±ê»æÎÞÈË»úµÄ¹ì¼£
		m_map.RemoveLayer(m_UAVFlyTrackLayerID);

		//´´½¨ÎÞÈË»ú»úÌå±ê»æÍ¼²ã
		CreateEmptyShapfile(m_UAVFlyTrackLayerID, 2, RGB(255,0,0));
	}

	//Ôö¼ÓÎÞÈË»ú¹ì¼£µã
	AddOnePoint2Shapfile(m_flyTrackLayerID, 1, dX, dY);

	//¼ÆËã±ê»æÎÞÈË»úÃæÍ¼²ãµÄµãÊý×é
	CalculateUAVPolygonCoordinate(dX, dY, yaw);

	//	AddUAVPoints2Polygon(m_UAVFlyTrackLayerID);

	//»æÖÆÐµÄÎÞÈË»úshp
	for (int i=0; i<m_ptNum; i++)
	{
		AddOnePoint2Shapfile(m_UAVFlyTrackLayerID, 2, m_ppUavPtArray[i][0], m_ppUavPtArray[i][1]);
	}
	*/

	COLORREF color = RGB(255,255,0);
	if (control)
	{
		color = RGB(255,0,0);
	}

	//µÚÒ»´Î±ê»æº½¼££¬Ð½¨±ê»æÍ¼²ã
	if (!m_bFirstDrawUAVTrack[uavid])
	{
		//´´½¨ÎÞÈË»ú¹ì¼£Ïß±ê»æÍ¼²ã
		CreateEmptyShapfile(m_flyTrackLayerID[uavid], 1,color);

		//´´½¨ÎÞÈË»ú»úÌå±ê»æÍ¼²ã
		CreateEmptyShapfile(m_UAVFlyTrackLayerID[uavid], 2, color);

		m_bFirstDrawUAVTrack[uavid] = true;
	}
	//Ôö¼ÓÎÞÈË»ú¹ì¼£µã
	AddOnePoint2Shapfile(m_flyTrackLayerID[uavid], 1, dX, dY);

	//¼ÆËã±ê»æÎÞÈË»úÃæÍ¼²ãµÄµãÊý×é
	CalculateUAVPolygonCoordinate(dX, dY, yaw);

	int i = 0;

	//ɾ³ýËùÓеÄshpͼ²ã
	for (i=0; i<m_ptNum; i++)
	{
		(m_map.GetShapefile(m_UAVFlyTrackLayerID[uavid])).EditDeleteShape(i);
	}
	//(m_map.GetShapefile(m_UAVFlyTrackLayerID2)).EditClear();
	//»æÖÆÐµÄÎÞÈË»úshp
	for (i=0; i<m_ptNum; i++)
	{
		AddOnePoint2Shapfile(m_UAVFlyTrackLayerID[uavid], 2, m_ppUavPtArray[i][0], m_ppUavPtArray[i][1]);
	}

}

void CGISDlg::DrawUAV_ADS(const int uavNum, const int uavid, const double lon, const double lat, const double yaw, const bool control, const CString strPlaneName)
{
	m_bWithin100km_ADS[uavid] = control; //ÊÇ·ñÔÚ100kmÄÚ

	m_dLon_ADS[uavid] = lon;
	m_dLat_ADS[uavid] = lat;
	m_dYaw_ADS[uavid] = yaw;

	m_strPlaneName_ADS[uavid] = strPlaneName;

	m_iTotalADSnum = uavNum;
}

//¹¦ÄÜ;ˢгö±ê»æµÄº½¼£
//˵Ã÷£ºÄ¿±êµãÃû³Æ±êעλÖÃÓëÆäÄ¿±êµãλÖôæÔÚY·½ÏòµÄÆ«²î£¬µ±Êó±ê·Å´ó¡¢ËõС²Ù×÷ʱ£¬±ê×¢ÓëÄ¿±êµãλÖÃÖØÐÂÎǺÏ
void CGISDlg::OnRefreshInfo()
{

}


//¹¦ÄÜ£º´òÓ¡Êä³ö£¬½«µØÍ¼ÏÔÊ¾Çø¼°Æä±ê×¢ÐÅÏ¢Êä³öµ½bmpÎļþÖÐ
void CGISDlg::OnPrint()
{
	CRect rc;
	GetClientRect(&rc);
	//m_map.MoveWindow(0,0,rc.Width(),rc.Height(),1);


	CRect rcGISCopyArea = m_gisAreaInScreen;
	rcGISCopyArea.top += m_toolbarHeight;

	CScreenCapture capture;		

	capture.ScreenGISArea(rcGISCopyArea);	
}
void CGISDlg::OnShowCtrlMenu()
{
	/*if (!m_bLineDesign)
	{
		return;
	}

	if (m_bLineDesign) */  //º½Ï߱༭ʱ£¬Í£Ö¹±à¼­
	{
		if (m_map.GetCursorMode() != mapWindow::tkCursorMode::cmNone)
		{
			m_map.SetCursorMode(mapWindow::tkCursorMode::cmNone);
		}
		
		//TRACE(_T("º½µãÉè¼Æ\n"));
		////ÐÂÔöº½µãÊôÐԱ༭  
		//int iSel=GetPtSel(m_LBtnDownX,m_LBtnDownY);
		//if (iSel!=-1)
		//{ 
		//	double dPointX, dPointY;
		//	//ÏñËØ×ø±êת»»µØÀí×ø±ê
		//	m_map.PixelToProj(m_LBtnDownX, m_LBtnDownY, &dPointX, &dPointY);

		//	//ÉèÖõãµÄ¾­¶È¡¢Î³¶È
		//	m_DlgLinePointAttri.SetPtCoordinate(dPointX, dPointY, iSel, m_designLinePointNum, m_pDesignLineStruct);
		//}

		if (g_b981APad)
		{
			CMenu   tmenu;
			tmenu.LoadMenu(IDR_FLOATINGMENU);        
			POINT   pt;
			GetCursorPos( &pt );
			//µ¯³ö¿ì½Ý²Ëµ¥
			tmenu.GetSubMenu( 0 )->TrackPopupMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON, pt.x, pt.y, this );
		}


		return;

	}
}

void CGISDlg::OnMenuLinePtCtrlShow()
{
	//Êó±êÓÒ¼üµã»÷ʱ£¬µ¯³ö¿ì½Ý²Ëµ¥
	if (g_b981APad)
	{
		OnShowRMenu();
	}
	else
	{
		OnMapSelect();
	}
}


void CGISDlg::OnZhangCW()
{
	int i = 0;
}

BOOL CGISDlg::OnToolTipsNotify(UINT id,NMHDR* pNMHDR,LRESULT* pResult)
{
	TOOLTIPTEXT* pT = (TOOLTIPTEXT*)pNMHDR;
	UINT nID = pNMHDR->idFrom;
	switch (nID)
	{
	case IDT_BUTTON1: 
		pT->lpszText = "Ìí¼ÓʸÁ¿µØÍ¼";
			break;
	case IDT_BUTTON2: 
		pT->lpszText = "Ìí¼ÓÕ¤¸ñµØÍ¼";
			break;
	case IDT_BUTTON3: 
		pT->lpszText = "Ìí¼Óº½Ïß";
			break;
	case IDT_BUTTON4: 
		pT->lpszText = "ͼ²ã¹ÜÀí";
			break;
	case IDT_BUTTON5: 
		pT->lpszText = "ɾ³ýÈ«²¿Í¼²ã";
			break;
	case IDT_BUTTON6: 
		pT->lpszText = "µØÍ¼Ñ¡Ôñ";
			break;
	case IDT_BUTTON7: 
		pT->lpszText = "·Å´ó";
			break;
	case IDT_BUTTON8: 
		pT->lpszText = "ËõС";
			break;
	case IDT_BUTTON9: 
		pT->lpszText = "ÂþÓÎ";
			break;
	case IDT_BUTTON10: 
		pT->lpszText = "ȫͼ";
			break;
	case IDT_BUTTON11: 
		pT->lpszText = "Çå³ýº½¼£";
			break;
	case IDT_BUTTON12: 
		pT->lpszText = "µØÍ¼¶¨Î»";
			break;
	case IDT_BUTTON13: 
		pT->lpszText = "²âÁ¿";
			break;
	case IDT_BUTTON14: 
		pT->lpszText = "ÊôÐÔ";
		break;
	default:
		pT->lpszText ="";
	}
	return true;
}
//¹¦ÄÜ£ºÉ¾³ý¸ø¶¨IDºÅµÄÄ¿±êµã
void CGISDlg::DeleteTarget(const int nPt)
{
	//Åжϸø¶¨µÄÄ¿±êµãºÅÊÇ·ñºÏ·¨
	//if (nPt >= MAX_TARGET_NUM)
	//{
	//	return;
	//}

	//int i = nPt-1;

	////ɾ³ýËùÓбê×¢µÄÄ¿±êµãÐÅÏ¢
	//if (m_pTargetShapfileID[i] != 0)
	//{
	//	//ÅжϵãʸÁ¿Í¼²ãÊÇ·ñÒѾ­´æÔÚ£¬´æÔÚÔòɾ³ý
	//	ClearPointShape(m_pTargetShapfileID[i]);
	//	m_pTargetShapfileID[i] = 0;
	//}

}

//¹¦ÄÜ£ºÉ¾³ýËùÓÐÄ¿±êµã
void CGISDlg::DeleteAllTargets()
{
	//ɾ³ýËùÓбê×¢µÄÄ¿±êµãÐÅÏ¢
	//for (int i=0; i<MAX_TARGET_NUM; i++)
	//{
	//	if (m_pTargetShapfileID[i] != 0)
	//	{
	//		//ÅжϵãʸÁ¿Í¼²ãÊÇ·ñÒѾ­´æÔÚ£¬´æÔÚÔòɾ³ý
	//		ClearPointShape(m_pTargetShapfileID[i]);

	//		m_pTargetShapfileID[i] = 0;
	//	}
	//}
}


//¹¦ÄÜ£º¸ù¾ÝÄ¿±êµã×ø±êλÖüÆËãÄ¿±êµãºÅ±êעλÖÃ
//ÊäÈ룺Ŀ±êµãλÖþ­¶È¡ªtargetLon£¬Î³¶È¡ªtargetLat
//Êä³ö£ºÄ¿±êµã±êעλÖþ­¶È¡ªlabelLon£¬Î³¶È¡ªlabelLat
void CGISDlg::TargetPos2LabelPos(double &labelLon, double &labelLat, const double targetLon, const double targetLat)
{
	double textPixelX = 0;
	double textPixelY = 0;

	//µØÀí×ø±êתÏñËØ×ø±ê
	m_map.ProjToPixel(targetLon, targetLat, &textPixelX, &textPixelY);

	//y×ø±ê¼ÓÉÏÆ«²îÁ¿Öµ
	textPixelY -= m_labelWarpValue;

	//ÏñËØ×ø±êתµØÀí×ø±ê
	m_map.PixelToProj(textPixelX, textPixelY, &labelLon, &labelLat);
}


//¹¦ÄÜ£ºÔÚµØÍ¼ÏÔÊ¾Çø±ê»æÄ¿±êµã
//ÊäÈ룺Ŀ±êµãÊý¾ÝÌåtargetInfo
//	    ±ê»æÍ¼²ãIDºÅdrawLayerID
//Êä³ö£º±ê»æÍ¼²ãIDºÅdrawLayerID
void CGISDlg::DrawTarget(long &drawLayerID, const PtStruct targetInfo)
{
	//ûÓмÓÔØµØÍ¼£¬·µ»Ø
	if (!m_bHaveAddMap)
	{
		return;
	}

	//µÚÒ»´Î±ê»æÊ±£¬´´½¨ÐÂµÄ±ê»æÍ¼²ã
	if (drawLayerID == -1)
	{	
		//º½¼£±ê»æÍ¼²ã
		drawLayerID = m_map.NewDrawing(1);
	}	

	CString str = _T("");

// 	ÏÔʾº½Ïß±àºÅ
// 	if (targetInfo.lineID <= 0)    //½öÏÔʾº½µã±àºÅ
// 	{
// 

		str.Format(_T("%d"), targetInfo.nPt);
// 	}
// 	else						   //ÏÔʾº½Ïߺͺ½µã±àºÅ£¬ÒÔ¡°X-XX¡±¸ñʽ½øÐÐÏÔʾ
// 	{
// 		str.Format(_T("%d-%d"), targetInfo.lineID,targetInfo.nPt);
// 	}

	//±ê»æÄ¿±êµã
	m_map.DrawPoint(targetInfo.dX, targetInfo.dY, 10,  RGB(0,0,255));	

	/* mapwinGIS 4.9.3Öб»·ÏÆú
	//ÉèÖÃ±ê»æ×ÖÌåµÄÑÕÉ«
	m_map.LabelColor(drawLayerID, RGB(0,255,0));
	//ÉèÖÃ±ê»æ×ÖÌåµÄ×ÖºÅ
	m_map.LayerFont(drawLayerID, _T("ºÚÌå"), 20);
	*/

	/* mapwinGIS 4.9.3ÒÔÉÏд·¨ */
	CLabels labels = m_map.GetDrawingLabels(drawLayerID);
	labels.SetFrameVisible(false);
	labels.SetFontColor(RGB(0,255,0));
	labels.SetFontName(_T("ºÚÌå"));
	labels.SetFontSize(20);

	//¸ù¾ÝÓëÄ¿±êÖ®¼äµÄÏà¶ÔλÖùØÏµ½øÐÐÎÄ×Ö±ê×¢
	double textLon = 0;
	double textLat = 0;

	//¼ÆËã±ê×¢µã×ø±ê
	TargetPos2LabelPos(textLon, textLat, targetInfo.dX, targetInfo.dY);

	//±êעĿ±êµã±êÇ©Êý¾Ý
	TRACE(str);
	TRACE("\n");
	//m_map.AddLabel(drawLayerID, str, RGB(255,255,0), textLon, textLat, 1);
	m_map.DrawLabelEx(drawLayerID, str,textLon, textLat,0);


	//ÖØ»æstr
	m_map.Redraw();
}



//¹¦ÄÜ£ºÔö¼Óº½µã²Ù×÷Íê³Éºó£¬µØÍ¼ÏÔÊ¾Çø½øÐк½µã±ê×¢
LRESULT CGISDlg::OnAddLinePoint(WPARAM wParam, LPARAM lParam)
{	
	//Çå³ýº½ÏßÉè¼ÆÊ±µÄ±ê×¢ÐÅÏ¢
	ClearDrawingInLineDesign();

	m_tempLayerID = -1;

	//¼ÓÈ뺽ÏßÊý¾Ý¼¯ºÏÖÐ
	m_pDesignLineStruct[m_designLinePointNum] = m_curDesignPoint;

	//º½µã±àºÅ¼ÆÊýÆ÷Ôö¼Ó1
	//m_designLinePointNum++;

	//±ê»æ³öÉè¼ÆµÄº½µãÊý¾Ý
	DrawDesignLineData();

	//Êó±êÒÆ¶¯Ê±£¬»­Ö±Ïß
	m_beTemLayerDrawing = true;

	//ÊÇ·ñÒѾ­Ôö¼ÓÐµĺ½µã
	m_bAddNewPoint = true;

	//º½¶ÎÏÔÊ¾ÇøÊäÈëÊý¾Ý£¬±êʶÒÑÍê³ÉÒ»¸öº½¶ÎµÄÉè¼Æ
	m_pLineSectDlg->SetLineSectStatus();

	return 0;
}

//¹¦ÄÜ£º±ê»æÉè¼ÆµÄº½ÏßÊý¾Ý£¬°üÀ¨º½µã¼°Æä±ê×¢¡¢º½ÏßÊý¾Ý
void CGISDlg::DrawDesignLineData()
{

	//н¨±ê»æ²ã
	if (m_designLineLayerID2!=-1)
	{
		m_map.RemoveLayer(m_designLineLayerID2);
		m_designLineLayerID2 = -1;
	}
	
	
	m_map.ClearDrawing(m_designLineLayerID);
	m_designLineLayerID = m_map.NewDrawing(1);
	long index = m_map.GetLayerPosition(m_designLineLayerID);
	BOOL b= m_map.MoveLayerUp(index);
	int i = 0;	

	//»æÖƺ½µã¼°Æä±ê×¢
	for (i=0; i<m_designLinePointNum; i++)
	{
		DrawTarget(m_designLineLayerID, m_pDesignLineStruct[i]);

	}
	if (m_designLinePointNum>1)
	{
		CreateEmptyShapfile(m_designLineLayerID2,1,RGB(0,255,0));
		AddPoints2Shapfile(m_designLineLayerID2,1,m_pDesignLineStruct,m_designLinePointNum);
	    DrawDistLebel(m_designLineLayerID,m_pDesignLineStruct,m_designLinePointNum);
	}
	
	//»æÖƺ½µãÖ®¼äµÄÁ¬Ïß
	/*for (i=0; i<m_designLinePointNum-1; i++)
	{
		m_map.DrawLineEx(m_designLineLayerID,m_pDesignLineStruct[i].dX, m_pDesignLineStruct[i].dY,
			m_pDesignLineStruct[i+1].dX, m_pDesignLineStruct[i+1].dY, 2, RGB(0,255,0));
	}*/
}


//¹¦ÄÜ£º±à¼­º½µã£¬¼ÓÈëºó£¬µØÍ¼ÏÔÊ¾Çø½øÐк½µã±ê×¢
LRESULT CGISDlg::OnEditLinePoint(WPARAM wParam, LPARAM lParam)
{
	//¸üк½µãÊý¾Ý
	PtStruct ptEdit;
	memcpy(&ptEdit, (PtStruct *)wParam, sizeof(PtStruct));

	if (lParam == 0)   //º½µãÊý¾Ý±à¼­
	{		
		//Êó±êÒÆ¶¯Ê±£¬»­Ö±Ïß
		m_beTemLayerDrawing = true;
	}
	else if (lParam == 1)     //º½µã±à¼­Ä£Ê½
	{
		//Êó±êÒÆ¶¯Ê±£¬»­Ö±Ïß
		m_beTemLayerDrawing = false;
	}

	//º½µãÊý¾Ý¸üÐÂ
	m_pDesignLineStruct[ptEdit.nPt-1] = ptEdit;		

	//Çå³ýº½ÏßÉè¼ÆÊ±µÄ±ê×¢ÐÅÏ¢
	ClearDrawingInLineDesign();

	//±ê»æ³öÉè¼ÆµÄº½µãÊý¾Ý
	DrawDesignLineData();

	//µ±Ç°´ý±à¼­µÄº½µãÊý¾Ý
	memcpy(&m_curEditLinePoint, &ptEdit, sizeof(PtStruct));

	return 0;
}



//¹¦ÄÜ£ºÉ¾³ýº½µã£¬¼ÓÈëºó£¬µØÍ¼ÏÔÊ¾Çø½øÐк½µã±ê×¢
LRESULT CGISDlg::OnDeleteLinePoint(WPARAM wParam, LPARAM lParam)
{
	//ɾ³ýµãµÄµãºÅ
	int deletePtID = (int)wParam;

	if ((deletePtID > (m_designLinePointNum-1)) || (deletePtID<0))
	{
		return 0;
	}

	//¸ù¾Ýɾ³ýµãµÄµãºÅ£¬¸üк½µãÊý¾Ý¼¯ºÏ
	for (int i=deletePtID; i<m_designLinePointNum-1; i++)
	{
		m_pDesignLineStruct[i] = m_pDesignLineStruct[i+1];
		m_pDesignLineStruct[i].nPt --;
	}

	//×ܵĺ½µã¸öÊý¼õÈ¥1
	m_designLinePointNum --;

	//Çå³ýº½ÏßÉè¼ÆÊ±µÄ±ê×¢ÐÅÏ¢
	ClearDrawingInLineDesign();

	//±ê»æ³öÉè¼ÆµÄº½µãÊý¾Ý
	DrawDesignLineData();

	//Êó±êÒÆ¶¯Ê±£¬»­Ö±Ïß
	m_beTemLayerDrawing = true;

	return 0;
}



//¹¦ÄÜ£º±£´æº½Ïߣ¬¼ÓÈëºó£¬µØÍ¼ÏÔÊ¾Çø½øÐк½µã±ê×¢
LRESULT CGISDlg::OnSaveLinePoints(WPARAM wParam, LPARAM lParam)
{
	//º½ÏßÉè¼Æ±êʶΪFALSE
	m_bLineDesign = false;

	//Çå³ýÓ뺽ÏßÉè¼ÆÏà¹ØµÄ±ê×¢Êý¾Ý
	RemoveDesignLineData();

	//Òþ²Øº½ÏßÉè¼ÆÊ±£¬ÏÔʾº½¶ÎÊý¾ÝµÄ¶Ô»°¿ò
	m_pLineSectDlg->ShowWindow(SW_HIDE);

	return 0;
}




//¹¦ÄÜ£º´´½¨¿ÕµÄshpfileͼ²ã
//ÊäÈ룺ʸÁ¿Í¼²ãÀàÐÍshpType£¨0Ϊ¡ªµãͼ²ã£»1ΪÏßͼ²ã£»2ÎªÃæÍ¼²ã£©
//ÊäÈ룺»æÖÆÑÕÉ«drawColor
//Êä³ö£ºÊ¸Á¿Í¼²ãIDºÅshpLayerID£¬
void CGISDlg::CreateEmptyShapfile(long &shpLayerID, const int shpType, const unsigned long drawColor)
{
	long fieldIndex = 0;

	//Ä¿±ê±ê»æSHPͼ²ã
	mapWindow::IShapefilePtr targetPtShape;
	targetPtShape.CreateInstance("MapWinGIS.Shapefile");		

	//´´½¨¿ÕµÄͼ²ã
	if (shpType == 0)   //µãͼ²ã
	{
		targetPtShape->CreateNewWithShapeID(_T(""), mapWindow::SHP_POINT);
	}
	else if (shpType == 1)   //Ïßͼ²ã
	{
		targetPtShape->CreateNewWithShapeID(_T(""), mapWindow::SHP_POLYLINE);
	}
	else if (shpType == 2)   //ÃæÍ¼²ã
	{
		targetPtShape->CreateNewWithShapeID(_T(""), mapWindow::SHP_POLYGON);
	}
	else
	{
		shpLayerID = -1; 
		return;
	}

	//Ôö¼Ófield±íµ¥1
	mapWindow::IFieldPtr fieldPtr1;
	fieldPtr1.CreateInstance("MapWinGIS.Field");	

	fieldPtr1->Key = (_bstr_t)("X");
	fieldPtr1->Type = mapWindow::DOUBLE_FIELD;
	targetPtShape->EditInsertField(fieldPtr1, &fieldIndex, NULL);

	//Ôö¼Ófield±íµ¥2
	mapWindow::IFieldPtr fieldPtr2;
	fieldPtr2.CreateInstance("MapWinGIS.Field");	

	fieldPtr2->Key = (_bstr_t)("Y");
	fieldPtr2->Type = mapWindow::DOUBLE_FIELD;
	targetPtShape->EditInsertField(fieldPtr2, &fieldIndex, NULL);

	//Ä¿±ê±ê»æÍ¼²ã¼ÓÈëµØÍ¼ÖÐ
	shpLayerID = m_map.AddLayer(targetPtShape, true);

	mapWindow::IShapeDrawingOptionsPtr  pShapeDrawingOption;
	pShapeDrawingOption.CreateInstance("MapWinGIS.ShapeDrawingOptions");	

	if (shpType == 0)   //µãͼ²ã
	{
		pShapeDrawingOption->FillColor = drawColor;
		pShapeDrawingOption->PointSize = 20;
		//pShapeDrawingOption->SetDefaultPointSymbol(mapWindow::tkDefaultPointSymbol::dpsDiamond);
		//pShapeDrawingOption->PutFillColor(drawColor);
		//pShapeDrawingOption->PutPointSize(18);
		pShapeDrawingOption->PutPointType(mapWindow::tkPointSymbolType::ptSymbolStandard);
		pShapeDrawingOption->PutPointShape(mapWindow::tkPointShapeType::ptShapeStar);
		
		//m_map.SetShapeLayerPointType(shpLayerID, mapWindow::ptDiamond);
		//m_map.SetShapeLayerStippleColor(shpLayerID, drawColor);
	}
	else if (shpType == 1)   //Ïßͼ²ã
	{
		pShapeDrawingOption->LineColor = drawColor;
		pShapeDrawingOption->LineWidth = 2;
	}
	else if (shpType == 2)   //ÃæÍ¼²ã
	{
		pShapeDrawingOption->FillColor = drawColor;
	}

	(m_map.GetShapefile(shpLayerID)).SetDefaultDrawingOptions(pShapeDrawingOption);
}


//¹¦ÄÜ£ºÏòshpfileµãͼ²ãÖÐÔö¼Óº½µãÊý¾Ý
//ÊäÈ룺ʸÁ¿Í¼²ãIDºÅshpLayerID
//      º½µãÊý¾Ý¼¯ºÏpts£¬º½µã¸öÊýptNum
void CGISDlg::AddPoints2PointShapfile(const long shpLayerID, const PtStruct *pts, const int ptNum)
{
	for (long i=0; i<ptNum; i++)
	{
		mapWindow::IPointPtr pintPtr;
		pintPtr.CreateInstance("MapWinGIS.Point");	

		mapWindow::IShapePtr shapePtr;
		shapePtr.CreateInstance("MapWinGIS.Shape");

		shapePtr->Create(mapWindow::SHP_POINT);


		//¾­¶È
		pintPtr->x = pts[i].dX;  

		//γ¶È
		pintPtr->y = pts[i].dY;  

		shapePtr->InsertPoint(pintPtr, &i);	


		//²åÈëÃæÊ¸Á¿
		(m_map.GetShapefile(shpLayerID)).EditInsertShape(shapePtr, &i);		
	}
}


//¹¦ÄÜ£ºÏòshpfileÏßͼ²ãÖÐÔö¼Óº½µãÊý¾Ý
//ÊäÈ룺ʸÁ¿Í¼²ãIDºÅshpLayerID
//      º½µãÊý¾Ý¼¯ºÏpts£¬º½µã¸öÊýptNum
void CGISDlg::AddPoints2LineShapfile(const long shpLayerID, const PtStruct *pts, const int ptNum)
{
	mapWindow::IShapePtr shapePtr;
	shapePtr.CreateInstance("MapWinGIS.Shape");

	//´´½¨ÏßʸÁ¿shapfile
	shapePtr->Create(mapWindow::SHP_POLYLINE);

	long i = 0;

	for (i=0; i<ptNum; i++)
	{
		mapWindow::IPointPtr pintPtr;
		pintPtr.CreateInstance("MapWinGIS.Point");	

		//¾­¶È
		pintPtr->x = pts[i].dX;  

		//γ¶È
		pintPtr->y = pts[i].dY;  

		shapePtr->InsertPoint(pintPtr, &i);	
	}

	//²åÈëÏßͼ²ãʸÁ¿
	(m_map.GetShapefile(shpLayerID)).EditInsertShape(shapePtr, &i);		
}


//¹¦ÄÜ£ºÏòshpfileͼ²ãÖÐÔö¼Óº½µãÊý¾Ý
//ÊäÈ룺ʸÁ¿Í¼²ãIDºÅshpLayerID£¬Ê¸Á¿Í¼²ãÀàÐÍshpType£¨0Ϊ¡ªµãͼ²ã£»1ΪÏßͼ²ã£»2ÎªÃæÍ¼²ã£©
//      º½µãÊý¾Ý¼¯ºÏpts£¬º½µã¸öÊýptNum
void CGISDlg::AddPoints2Shapfile(const long shpLayerID, const int shpType, const PtStruct *pts, const int ptNum)
{
	long i = 0;

	//Ïòµãͼ²ãÖмÓÈ뺽µãÊý¾Ý
	if (shpType == 0)                        //µãͼ²ã
	{
		for (i=0; i<ptNum; i++)
		{
			mapWindow::IPointPtr pintPtr;
			pintPtr.CreateInstance("MapWinGIS.Point");	

			mapWindow::IShapePtr shapePtr;
			shapePtr.CreateInstance("MapWinGIS.Shape");

			shapePtr->Create(mapWindow::SHP_POINT);

			//¾­¶È
			pintPtr->x = pts[i].dX;  

			//γ¶È
			pintPtr->y = pts[i].dY;  

			shapePtr->InsertPoint(pintPtr, &i);	

			//²åÈëÃæÊ¸Á¿
			(m_map.GetShapefile(shpLayerID)).EditInsertShape(shapePtr, &i);		
		}
	}
	else if ((shpType == 1) || (shpType == 2))  //Ïßͼ²ãºÍÃæÍ¼²ã
	{
		mapWindow::IShapePtr shapePtr;
		shapePtr.CreateInstance("MapWinGIS.Shape");

		//´´½¨shp
		if (shpType == 1)    //ÏßʸÁ¿
		{
			shapePtr->Create(mapWindow::SHP_POLYLINE);
		}
		else				 //ÃæÊ¸Á¿
		{
			shapePtr->Create(mapWindow::SHP_POLYGON);
		}

		for (i=0; i<ptNum; i++)
		{
			mapWindow::IPointPtr pintPtr;
			pintPtr.CreateInstance("MapWinGIS.Point");	

			//¾­¶È
			pintPtr->x = pts[i].dX;  

			//γ¶È
			pintPtr->y = pts[i].dY;  

			shapePtr->InsertPoint(pintPtr, &i);	
		}

		//²åÈëÃæÊ¸Á¿
		(m_map.GetShapefile(shpLayerID)).EditInsertShape(shapePtr, &i);		
	}	
}


//¹¦ÄÜ£º»ùÓÚshpfileÃæÍ¼²ã±ê»æ·½·¨»æÖÆUAV
void CGISDlg::AddUAVPoints2Polygon(const long shpLayerID)
{
	//´´½¨ÃæÍ¼²ã
	mapWindow::IShapePtr shapePtr;
	shapePtr.CreateInstance("MapWinGIS.Shape");
	shapePtr->Create(mapWindow::SHP_POLYGON);

	long shpNum = 0;

	for (int i=0; i<18; i++)
	{
		mapWindow::IPointPtr pintPtr;
		pintPtr.CreateInstance("MapWinGIS.Point");	

		//¾­¶È
		pintPtr->x = m_ppUavPtArray[i][0];  

		//γ¶È
		pintPtr->y = m_ppUavPtArray[i][1];  

		//Ïòµ±Ç°shpÖвåÈëÒ»¸öº½µãÊý¾Ý
		shapePtr->InsertPoint(pintPtr, &shpNum);
	}

	shpNum = 0;

	(m_map.GetShapefile(shpLayerID)).EditClear();

	//½«shpfileÎļþÖвåÈëshpÎļþ
	(m_map.GetShapefile(shpLayerID)).EditInsertShape(shapePtr, &shpNum);

}


//¹¦ÄÜ£ºÏòshpfileͼ²ãÖÐÔö¼Ó1¸öº½µãÊý¾Ý
//ÊäÈ룺ʸÁ¿Í¼²ãIDºÅshpLayerID£¬shpÀàÐÍshpType
//      º½µãÊý¾Ý£¬¾­¶È¡ªdX; γ¶È¡ªdY
void CGISDlg::AddOnePoint2Shapfile(const long shpLayerID, const int shpType, const double dX, const double dY)
{
	mapWindow::IPointPtr pintPtr;
	pintPtr.CreateInstance("MapWinGIS.Point");	

	//¾­¶È
	pintPtr->x = dX;  

	//γ¶È
	pintPtr->y = dY;  

	//shpfileÎļþÖеÄshpͼ²ã¸öÊý
	long shpNum = (m_map.GetShapefile(shpLayerID)).GetNumShapes();

	//ÅжÏÊÇ·ñÒѾ­´æÔÚ¸Ãshpͼ²ã£¬²»´æÔÚ£¬´´½¨ÐµÄshpͼ²ã
	if (shpNum == 0)
	{
		mapWindow::IShapePtr shapePtr;
		shapePtr.CreateInstance("MapWinGIS.Shape");

		if (shpType == 0)		//µãͼ²ã
		{
			shapePtr->Create(mapWindow::SHP_POINT);
		}
		else if (shpType == 1)  //Ïßͼ²ã
		{
			shapePtr->Create(mapWindow::SHP_POLYLINE);
		}
		else if (shpType == 2)  //ÃæÍ¼²ã
		{
			shapePtr->Create(mapWindow::SHP_POLYGON);
		}

		//Ïòµ±Ç°shpÖвåÈëÒ»¸öº½µãÊý¾Ý
		shapePtr->InsertPoint(pintPtr, &shpNum);

		//½«shpfileÎļþÖвåÈëshpÎļþ
		(m_map.GetShapefile(shpLayerID)).EditInsertShape(shapePtr, &shpNum);		
	}
	else
	{
		//»ñµÃµ±Ç°µÄshp
		CShape shape = (m_map.GetShapefile(shpLayerID)).GetShape(shpNum-1);

		//µ±Ç°µÄº½µã¸öÊý
		long curLinePts = shape.GetNumPoints();

		//Ïòµ±Ç°shpÖвåÈëÒ»¸öº½µãÊý¾Ý
		shape.InsertPoint(pintPtr, &curLinePts);
	}
}



//¹¦ÄÜ£ºÔÚµØÍ¼ÏÔÊ¾Çø±ê»æ³ö×°¶©µÄ·ÉÐк½ÏßÊý¾Ý
//ÊäÈ룺º½ÏßÊý¾ÝÌ弯ºÏlinePtArray£¬º½Ïߵĺ½µã¸öÊýptNum
//˵Ã÷£ºµØÍ¼ÏÔʾÆ÷ÒѾ­±ê»æÁ˸ú½Ïߣ¬ÔòÇå³ý±ê»æ£¬ÖØÐ屐Ⱦº½Ïß
void CGISDlg::DrawBindingLine(const PtStruct *linePtArray, const int ptNum)
{
	if (ptNum == 0 )
	{
		return;				
	}

	//º½ÏßÊý¾Ý¼¯ºÏ
	DrawLineDataStruct lineDataArr;

	//º½µãÊý¾ÝÌåת±ê»æµÄº½ÏßÊý¾Ý¼¯ºÏ
	m_lineManage.LinePoint2DrawLinePoints(lineDataArr, linePtArray, ptNum);

	//Çå³ý±ê»æµÄº½Ïß
	ClearDrawedLine(lineDataArr.lineID-1);

	//¿½±´Êý¾Ýµ½º½Ïß¼¯ºÏÖÐ
	m_pFlyLines[lineDataArr.lineID-1] = lineDataArr;

	//µØÍ¼±ê»æ³öº½Ïß
   //DrawFlyLine(m_pFlyLines[lineDataArr.lineID-1]);
   DrawFlyLine(lineDataArr);
	
}

//¹¦ÄÜ£º±ê»æ·ÉÐк½Ïß
//ÊäÈ룺º½ÏßÊý¾ÝlineData
void CGISDlg::DrawFlyLine(const DrawLineDataStruct lineData)
{
	//fieldË÷ÒýÖµ
	long fieldIndex = 0;

	//º½ÏßË÷ÒýºÅ
	int lineID = lineData.lineID-1;

	//ûÓÐÄ¿±ê±ê»æSHPͼ²ã£¬´´½¨¸Ãͼ²ã
	if (!m_pHaveDrawLineFlag[lineID])
	{		
		//´´½¨µãͼ²ã
		CreateEmptyShapfile(m_ppPlanLineShpLayerIDArr[lineID][0], 0, /*RGB(0,255,0)*/LineClr[lineID]);

		//´´½¨Ïßͼ²ã
		CreateEmptyShapfile(m_ppPlanLineShpLayerIDArr[lineID][1], 1, /*RGB(0,255,0)*/LineClr[lineID]);

		//´´½¨Ïßͼ²ã³É¹¦
		m_pHaveDrawLineFlag[lineID] = true;
	}

	//Ïòµãͼ²ã¼ÓÈ뺽µãÊý¾Ý
	AddPoints2PointShapfile(m_ppPlanLineShpLayerIDArr[lineID][0], lineData.pts, lineData.pointNum);


	//ÏòÏßͼ²ã¼ÓÈ뺽µãÊý¾Ý
	AddPoints2LineShapfile(m_ppPlanLineShpLayerIDArr[lineID][1], lineData.linePts, lineData.linePointNum);

	/////////////////////ÍùSHPͼ²ãÖмÓÈëÄ¿±êµã±ê×¢ÐÅÏ¢///////////////////////////////

	//Label¼¯ºÏ
	CLabels labesPtr;
	labesPtr = (m_map.GetShapefile(m_ppPlanLineShpLayerIDArr[lineID][0])).GetLabels();

	//CLabelCategory labelCategory = labesPtr.AddCategory(_T("ºìÉ«"));
	//labelCategory.SetFontColor(/*RGB(255,0,0)*/LineClr[lineID]);
	//labelCategory.SetAlignment(1);
	//labelCategory.SetFontBold(TRUE);
	//labelCategory.SetFontName(LPCTSTR("ºÚÌå"));
	//labelCategory.SetFontSize(12);
	//labesPtr.SetAvoidCollisions(FALSE);
	labesPtr.SetFontColor(/*RGB(255,0,0)*/LineClr[lineID]);
	labesPtr.SetAlignment(1);
	labesPtr.SetFontBold(true);
	labesPtr.SetFontName(LPCTSTR("ºÚÌå"));
	labesPtr.SetFontSize(16);
	labesPtr.put_FontSize2(16);
	labesPtr.SetFrameVisible(false);
	labesPtr.SetAvoidCollisions(FALSE); 


	CString strText = _T("");

	//±ê»æº½µãµÄÃû³Æ
	for (long i=0; i<lineData.pointNum; i++)
	{
		//±ê×¢ÐÅÏ¢
		if ( 14 ==lineData.lineID)
		{
			strText.Format(_T("×ÔÖ÷׎µã") /*lineData.lineID, */ /*lineData.pts[i].nPt*/);
		}
		else
		{
            strText.Format(_T("%d-%d"), lineData.lineID,  lineData.pts[i].nPt);
		}
		
		//Ôö¼ÓLabels
		labesPtr.AddLabel((LPCTSTR)strText, lineData.pts[i].dX, lineData.pts[i].dY, 0, 0);
	}	
	/////////////////////ÍùSHPͼ²ãÖмÓÈëÄ¿±êµã±ê×¢ÐÅÏ¢///////////////////////////////

	//ÖØÐ»æÖÆ
	m_map.Redraw();
}



//¹¦ÄÜ£º¸ù¾ÝµØÍ¼¿Ø¼þµÄÏÔʾ·Ö±æÂÊÒÆ¶¯µØÍ¼¿Ø¼þ
//˵Ã÷£º¸ù¾ÝÏÔʾ·Ö±æÂʺÍÉè¼Æ·Ö±æÂÊÖ®¼äµÄ¼¸ºÎ¹ØÏµ
//ÊäÈë£ºÖÆ¶¨ÏÔʾµÄÇøÓòmoveToArea
void CGISDlg::MoveGISShowWindow(const CRect moveToArea)
{
	CRect gisRect;

	//X·½Ïò·Ö±æÂÊ
	double cx = 1.0*moveToArea.Width()/m_rcDesignGISWindow.Width();

	//Y·½Ïò·Ö±æÂÊ
	double cy = 1.0*moveToArea.Height()/m_rcDesignGISWindow.Height();

	gisRect.left = static_cast<int>(m_rcDesignGISWindow.left*cx);
	gisRect.top = static_cast<int>(m_rcDesignGISWindow.top*cy);

	gisRect.right = moveToArea.right;
	gisRect.bottom = moveToArea.bottom;

	//µØÍ¼ÏÔÊ¾Çø¿í¶È¡¢¸ß¶Èµ¹Êý
	m_onePerWidth = 1.0/gisRect.Width();
	m_onePerHeight = 1.0/gisRect.Height();

	//µØÍ¼ÏÔÊ¾Çø¿í¶È¡¢¸ß¶È
	m_mapAreaHalfWidth = 0.5*gisRect.Width();
	m_mapAreaHalfHeight = 0.5*gisRect.Height();

	//µØÍ¼¿Ø¼þÒÆ¶¯µ½¸ø¶¨ÇøÓò
	GetDlgItem(IDC_MAP1)->MoveWindow(gisRect, TRUE);
}


void CGISDlg::OnMouseMove(UINT nFlags, CPoint point) 
{	
	CBCGPDialog::OnMouseMove(nFlags, point);
}



//¹¦ÄÜ£º´´½¨¸¡¶¯¹¤¾ßÀ¸
void CGISDlg::CreateFloatToolBar()
{
	CBitmap bm;  

	UINT Resource[14]={IDB_BITMAP_ADD_SHPFILE, IDB_BITMAP_ADD_IMGFILE, IDB_BITMAP_ADD_FLYLINE, 
		IDB_BITMAP_LAYER_MANAGE, IDB_BITMAP_DELETE_LAYER,
		IDB_BITMAP_SELECT, IDB_BITMAP_ZOOMIN, IDB_BITMAP_ZOOMOUT,
		IDB_BITMAP_MOVE, IDB_BITMAP_FULLSCREEN, IDB_BITMAP_RULER,
		IDB_BITMAP_XY, IDB_BITMAP_SURVEY,  
		IDB_BITMAP10/*IDB_BITMAP_PRINT*/};          //λͼIDÊý×é  


	m_ImageList.Create(24, 24, ILC_COLOR24|ILC_MASK, 0, 0);                  //´´½¨Image List  
	CRect rcToolBar;
	
/*
	rcToolBar.top = m_rcGISArea.top;
	rcToolBar.left = m_rcGISArea.right-24;
	rcToolBar.bottom = m_rcGISArea.bottom;
	rcToolBar.right = m_rcGISArea.right;*/
	//m_ToolBar.Create(TBSTYLE_FLAT | CCS_TOP | WS_VISIBLE | /*WS_BORDER |*/ CCS_ADJUSTABLE | TBSTYLE_TOOLTIPS, rcToolBar, this, IDR_TOOLBAR1);                    //´´½¨Toolbar Control  
	m_ToolBar.Create(TBSTYLE_FLAT | CCS_TOP | WS_VISIBLE | /*WS_BORDER |*/ TBSTYLE_TOOLTIPS, rcToolBar, this, IDR_TOOLBAR1);                    //´´½¨Toolbar Control  
	m_ToolBar.SetBitmapSize(CSize(24, 24));  

	int buttonItems = 14;

	int i;  
	for(i=0; i<buttonItems; i++)  
	{  
		bm.LoadBitmap(Resource[i]);  
		m_ImageList.Add(&bm, (CBitmap *)NULL);  
		bm.Detach();  
	}  

	m_ToolBar.SetImageList(&m_ImageList);  

	TBBUTTON Buttons[14];														  	 //¶¨ÒåTBBUTTON½á¹¹ÌåÊý×é  
	CString str;  

	for(i=0; i<buttonItems; i++)  
	{  
		str.LoadString(IDT_BUTTON1+i);                                                //IDS_FILEÊÇÔÚString TableÖÐÌí¼ÓµÄString  
		//	   Buttons[i].iString = m_ToolBar.AddStrings(str);  
		Buttons[i].iString = NULL;  

		Buttons[i].dwData=0;  
		Buttons[i].fsState=TBSTATE_ENABLED;  
		Buttons[i].fsStyle=TBSTYLE_BUTTON;  
		Buttons[i].iBitmap=i;  
		Buttons[i].idCommand = IDT_BUTTON1+i;		//°´Å¥ÃüÁîÏìÓ¦  

		
	}  
	m_ToolBar.EnableToolTips(true);//Ìí¼Ó¹¤¾ßÌõÉϰ´Å¥Ìáʾ¹¦ÄÜ

	m_ToolBar.AddButtons(buttonItems, Buttons);  
	m_ToolBar.AutoSize();  

	//m_ToolBar.ShowWindow(SW_HIDE);  
	RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST, 0);

}


BOOL CGISDlg::OnToolTipText(UINT,NMHDR* pNMHDR,LRESULT*   pResult)  
{     
	ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);         //   UNICODEÏûÏ¢     
	TOOLTIPTEXTA*   pTTTA = (TOOLTIPTEXTA*)pNMHDR;     TOOLTIPTEXTW*   pTTTW = (TOOLTIPTEXTW*)pNMHDR;     //TCHAR   szFullText[512];     
	CString strTipText;     
	UINT   nID = pNMHDR->idFrom;         

	if(pNMHDR->code == TTN_NEEDTEXTA  &&  (pTTTA->uFlags & TTF_IDISHWND) ||  pNMHDR->code == TTN_NEEDTEXTW  &&  (pTTTW->uFlags & TTF_IDISHWND))    
	{//   idFromΪ¹¤¾ßÌõµÄHWND                          
		nID = ::GetDlgCtrlID((HWND)nID);     
	}  

	if(nID != 0)   //²»Îª·Ö¸ô·û    
	{            //AfxLoadString(nID,   szFullText);            //strTipText=szFullText;            
		strTipText.LoadString(nID);            
		strTipText = strTipText.Mid(strTipText.Find('\n',0)+1);           

#ifndef  _UNICODE            
		if(pNMHDR->code == TTN_NEEDTEXTA)            
		{                  
			lstrcpyn(pTTTA->szText,strTipText,sizeof(pTTTA->szText));            
		}            
		else            
		{                   
			_mbstowcsz(pTTTW->szText,   strTipText,   sizeof(pTTTW->szText));           
		}   
#else            
		if(pNMHDR->code == TTN_NEEDTEXTA)            
		{                   
			_wcstombsz(pTTTA->szText,strTipText,sizeof(pTTTA->szText));            
		}            
		else            
		{                   
			lstrcpyn(pTTTW->szText,strTipText,sizeof(pTTTW->szText));            
		}   
#endif                     
		*pResult   =   0;              //ʹ¹¤¾ßÌõÌáʾ´°¿ÚÔÚ×îÉÏÃæ      

		::SetWindowPos(pNMHDR->hwndFrom,HWND_TOP,0,0,0,0, SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);   

		return   TRUE;     
	}      
	return   TRUE;   
}   



//¹¦ÄÜ£ºÉèÖõØÃæÕ¾Î»ÖÃ
//ÊäÈ룺¾­¶ÈdX£¬Î³¶ÈdY£¬¸ß¶Èalt
void CGISDlg::SetGCSPosition(const double dX, const double dY, const double alt)
{
	//µØÃæÕ¾Î»ÖÃ
	g_gcsLon = dX;   //¾­¶È
	g_gcsLat = dY;   //γ¶È
	g_gcsAlt = alt;   //¸ß¶È

	CString str = _T("GCS");

	CString strColor = _T("ºìÉ«");

	//»ùÓÚµãͼ²ã½øÐбê×¢
	AddPointShapeLayer(m_gcsPtShpLayerID, dX, dY, str, strColor, RGB(255,0,0));
}

//¹¦ÄÜ£ºµ¼Òý·½Ê½Ò»£¬ÏòÖ÷³ÌÐò·¢Ë͵¼Òýµã×ø±ê
void CGISDlg::OnGuideMode1()
{	
	//ÅжϵØÍ¼ÊÇ·ñÒѾ­¼ÓÔØ£¬Ã»ÓмÓÔØ·µ»Ø
	if ( !m_bHaveAddMap )  //ûÓмÓÔØµØÍ¼?
	{
		AfxMessageBox( _T( "ÇëÏȼÓÔØµØÍ¼£¡" ) );
		return;
	}

	m_guidePtInfo.guideMode = 1;

	m_guidePointMode = 1;

	m_bGuideMode = true; //µ¼Òý·ÉÐÐÄ£Ê½ÎªÕæ

	//2023.4.3 JackLiu
	/*
	DrawGuidePoint(1, m_guidePtInfo.guidePtLon, m_guidePtInfo.guidePtLat);
	m_struMapOut.cmd=MapCmd_Guide1;
	m_struMapOut.lon = m_guidePtInfo.guidePtLon;
	m_struMapOut.lat = m_guidePtInfo.guidePtLat;

	::SendMessage(GetParent()->GetSafeHwnd(),MESSAGE_B8MAP, (int)(&m_struMapOut),0);*/

	//::PostMessage(HWND_BROADCAST, WM_SEND_GUIDEPOINT_INFO , WPARAM(&m_guidePtInfo) , 1);
	//::PostMessage(m_MsgHwnd, m_MsgID, WPARAM(&m_guidePtInfo)   , 1);
}


//¹¦ÄÜ£ºµ¼Òý·½Ê½¶þ£¬ÏòÖ÷³ÌÐò·¢Ë͵¼Òýµã×ø±ê
void CGISDlg::OnGuideMode2()
{
	//ÅжϵØÍ¼ÊÇ·ñÒѾ­¼ÓÔØ£¬Ã»ÓмÓÔØ·µ»Ø
	if ( !m_bHaveAddMap )  //ûÓмÓÔØµØÍ¼?
	{
		AfxMessageBox( _T( "ÇëÏȼÓÔØµØÍ¼£¡" ) );
		return;
	}

	m_guidePtInfo.guideMode = 2;

	m_guidePointMode = 2;

	m_bGuideMode = true; //µ¼Òý·ÉÐÐÄ£Ê½ÎªÕæ

	//2023.4.3 JackLiu

	/*DrawGuidePoint(2,m_guidePtInfo.guidePtLon, m_guidePtInfo.guidePtLat);
	m_struMapOut.cmd=MapCmd_Guide2;
	m_struMapOut.lon = m_guidePtInfo.guidePtLon;
	m_struMapOut.lat = m_guidePtInfo.guidePtLat;

	::SendMessage(GetParent()->GetSafeHwnd(),MESSAGE_B8MAP, (int)(&m_struMapOut),0);*/

	//::PostMessage(m_MsgHwnd, m_MsgID, WPARAM(&m_guidePtInfo) , 2);

	//::PostMessage(HWND_BROADCAST, WM_SEND_GUIDEPOINT_INFO , WPARAM(&m_guidePtInfo) , 2);
}

//¹¦ÄÜ£ºÏÔʾ1ºÅº½Ïß
void CGISDlg::OnShowLine1()
{
	SetFlyLineShowStatus(1);
}	

//¹¦ÄÜ£ºÏÔʾ2ºÅº½Ïß
void CGISDlg::OnShowLine2()
{
	SetFlyLineShowStatus(2);
}	

//¹¦ÄÜ£ºÏÔʾ3ºÅº½Ïß
void CGISDlg::OnShowLine3()
{
	SetFlyLineShowStatus(3);
}	

//¹¦ÄÜ£ºÏÔʾ4ºÅº½Ïß
void CGISDlg::OnShowLine4()
{
	SetFlyLineShowStatus(4);
}	

//¹¦ÄÜ£ºÏÔʾ5ºÅº½Ïß
void CGISDlg::OnShowLine5()
{
	SetFlyLineShowStatus(5);
}
//¹¦ÄÜ£ºÏÔʾ6ºÅº½Ïß
void CGISDlg::OnShowLine6()
{
	SetFlyLineShowStatus(6);
}
//¹¦ÄÜ£ºÏÔʾ7ºÅº½Ïß
void CGISDlg::OnShowLine7()
{
	SetFlyLineShowStatus(7);
}
//¹¦ÄÜ£ºÏÔʾ8ºÅº½Ïß
void CGISDlg::OnShowLine8()
{
	SetFlyLineShowStatus(8);
}
//¹¦ÄÜ£ºÏÔʾ9ºÅº½Ïß
void CGISDlg::OnShowLine9()
{
	SetFlyLineShowStatus(9);
}

//¹¦ÄÜ£ºÏÔʾ10ºÅº½Ïß
void CGISDlg::OnShowLine10()
{
	SetFlyLineShowStatus(10);
}

//¹¦ÄÜ£ºÏÔʾ¿ÕͶ
void CGISDlg::OnShowLine14()
{
	SetFlyLineShowStatus(14);
}

//¹¦ÄÜ£ºÇå³ýÒѾ­±ê»æµÄº½Ïß
//ÊäÈ룺º½Ïß±àºÅlineID£¬´Ó0¿ªÊ¼¼ÆÊý
void CGISDlg::ClearDrawedLine(const int lineID)
{
	if (m_pHaveDrawLineFlag[lineID])
	{
		//Çå³ý±ê»æµÄµãʸÁ¿Í¼²ã
		ClearPointShape(m_ppPlanLineShpLayerIDArr[lineID][0]);

		//Çå³ýÒѾ­±ê»æµÄº½Ïß
		m_map.RemoveLayer(m_ppPlanLineShpLayerIDArr[lineID][1]);

		m_pHaveDrawLineFlag[lineID] = false;
	}
}

//¹¦ÄÜ£º´¦Àí¿ì½Ý²Ëµ¥Ó뺽ÏßÏÔʾÏà¹ØµÄ²Ù×÷
//      1)º½ÏßÒѾ­±ê×¢£¬Çå³ýÏÔʾ
//      2)º½Ïßδ±ê×¢£¬½øÐÐÏÔʾ
//ÊäÈ룺º½Ïß±àºÅlineID
void CGISDlg::SetFlyLineShowStatus(const int lineID)
{
	int lineIndex = lineID - 1;

	//ÒѾ­±ê»æ£¬Çå³ýº½Ïß
	if (m_pHaveDrawLineFlag[lineIndex])
	{
		//Çå³ý±ê»æµÄº½Ïß
		ClearDrawedLine(lineIndex);

		//Ë¢ÐÂ
		m_map.Redraw();

		//±êʶÖÃfalse
		m_pHaveDrawLineFlag[lineIndex] = false;
	}
	else
	{
		
		TCHAR filter[500]=_T("º½ÏßÎļþ(*.txt)\0*.txt\0£©");
		
		CFileDialog LineRouteDlg(TRUE, NULL, NULL, OFN_HIDEREADONLY, filter, NULL);
		//LineRouteDlg.m_ofn.lpstrInitialDir = strRouteFileDir;
		LineRouteDlg.m_ofn.lpstrFilter="txt(*.txt)\0*.txt"; 
		LineRouteDlg.m_ofn.lpstrTitle = "Ñ¡ÔñÏÔʾ×îÐÂÉú³ÉµÄº½Ïß";
		if (LineRouteDlg.DoModal() == IDOK)  //Óû§µ¥»÷OK°´Å¥ÖÐÖ¹¶Ô»°¿òµÄ·µ»ØÖµ
		{
			CString str = LineRouteDlg.GetPathName();   //»ñÈ¡Îļþ·¾¶Ãû
			//OnShowGivenLine(GetFlyLineName(lineID));
			OnShowGivenLine(str);
		}
		
	}
}

void CGISDlg::OnUpdateLineDisplay1( CCmdUI *pCmdUI )
{
	pCmdUI->SetCheck(m_pHaveDrawLineFlag[0]);                                //µ±1ºÅº½ÏßÑ¡Öк󣬴òÉϼǺÅ
}

void CGISDlg::OnUpdateLineDisplay2( CCmdUI *pCmdUI )
{
	pCmdUI->SetCheck(m_pHaveDrawLineFlag[1]);
}

void CGISDlg::OnUpdateLineDisplay3( CCmdUI *pCmdUI )
{
	pCmdUI->SetCheck(m_pHaveDrawLineFlag[2]);
}

void CGISDlg::OnUpdateLineDisplay4( CCmdUI *pCmdUI )
{
	pCmdUI->SetCheck(m_pHaveDrawLineFlag[3]);
}

void CGISDlg::OnUpdateLineDisplay5( CCmdUI *pCmdUI )
{
	pCmdUI->SetCheck(m_pHaveDrawLineFlag[4]);
}

void CGISDlg::OnUpdateShowLine6(CCmdUI *pCmdUI)
{
	pCmdUI->SetCheck(m_pHaveDrawLineFlag[5]);
}

void CGISDlg::OnUpdateShowLine7(CCmdUI *pCmdUI)
{
	pCmdUI->SetCheck(m_pHaveDrawLineFlag[6]);
}


void CGISDlg::OnUpdateShowLine8(CCmdUI *pCmdUI)
{
	pCmdUI->SetCheck(m_pHaveDrawLineFlag[7]);
}

void CGISDlg::OnUpdateShowLine9(CCmdUI *pCmdUI)
{
	pCmdUI->SetCheck(m_pHaveDrawLineFlag[8]);
}

void CGISDlg::OnUpdateShowLine10(CCmdUI *pCmdUI)
{
	pCmdUI->SetCheck(m_pHaveDrawLineFlag[9]);
}

void CGISDlg::OnUpdateShowLine14(CCmdUI *pCmdUI)
{
	pCmdUI->SetCheck(m_pHaveDrawLineFlag[13]);
}

//¹¦ÄÜ£ºÏÔʾº½Ïß
//ÊäÈ룺º½ÏßÎļþÃû³ÆstrLineFileName
void CGISDlg::OnShowGivenLine(const CString strLineFileName)
{
	//ÅжϵØÍ¼ÊÇ·ñÒѾ­¼ÓÔØ£¬Ã»ÓмÓÔØ·µ»Ø
	if ( !m_bHaveAddMap )  //ûÓмÓÔØµØÍ¼?
	{
		BCGPMessageBox( _T( "ÇëÏȼÓÔØµØÍ¼£¡" ) );
		return;
	}
	if (_T("") == strLineFileName)
	{
		return;
	}

	//ÅжÏÎļþÊÇ·ñ´æÔÚ
	if (!SearchDirectory(strLineFileName))
	{
		BCGPMessageBox( _T( "º½Â·Îļþ²»´æÔÚ£¡" ) );
		return;
	}

	//º½ÏßÊý¾Ý¼¯ºÏ
	DrawLineDataStruct lineDataGroup;

	//³õʼ»¯
	memset(&lineDataGroup, 0, sizeof(DrawLineDataStruct));

	//º½ÏßÎļþ¶ÁÈ¡³É¹¦
	if (m_lineManage.ReadLineDataFromFile(lineDataGroup, strLineFileName))
	{
		//ÅжϺ½ÏߺÅÊÇ·ñÕýÈ·£¨lineIDȡֵ1-8,10-11,13£©£¨add by jackwong 2018.08.01£©
		if(lineDataGroup.lineID<1 || /*(*/lineDataGroup.lineID>14 /*&& lineDataGroup.lineID<10)*/ /*|| lineDataGroup.lineID==14 *//*|| lineDataGroup.lineID>13*/)
		{
			BCGPMessageBox("º½ÏߺŲ»ÕýÈ·£¡");
			return;
		}
		/*******************by Wu 2023.09.14****************************/
		m_ShowedLineDataList[lineDataGroup.lineID] = lineDataGroup;

		if (lineDataGroup.lineID==11) //»ØÊÕº½Ïß  ´æ´¢±¸·ÝÊý¾ÝÓÃÓڱ༭
		{
			//³õʼ»¯
			//memset(&backLineDataGroup, 0, sizeof(DrawLineDataStruct));
			backLineDataGroup = lineDataGroup;

			//ΣÏÕµØÐεã¼ì²â
			ClearDangerousTerrainPoints();
			double height = backLineDataGroup.linePts[0].nH;
			double pts[128][2];
			for (int i=0;i<backLineDataGroup.linePointNum;i++)
			{
				pts[i][0] = backLineDataGroup.linePts[i].dX;
				pts[i][1] = backLineDataGroup.linePts[i].dY;
			}
			DrawDangerousTerrainPoints(pts,backLineDataGroup.linePointNum,height);
		}
		/**********************************************************************************/

		//Çå³ý±ê»æµÄº½Ïß
		ClearDrawedLine(lineDataGroup.lineID-1);

		//±ê»æº½Ïß
     	DrawFlyLine(lineDataGroup);	
	}
}

//¹¦ÄÜ£º±ê»æµ¼ÒýµãλÖÃ
//ÊäÈ룺µ¼ÒýµãÀàÐÍguideMode£¨1Ϊµ¼Òý·ÉÐÐ1,2Ϊµ¼Òý·ÉÐÐ2£©£¬¾­¶ÈdX£¬Î³¶ÈdY
void CGISDlg::DrawGuidePoint(const BYTE guideMode, const double dX, const double dY)
{
	CString str = _T("");

	if (guideMode == 1)    //µ¼Òýµã1
	{ 
		str = _T("GuidePoint1");
	}
	else if (guideMode == 2)    //µ¼Òýµã2
	{
		str = _T("GuidePoint2");
	}

	CString strColor = _T("ºìÉ«");

	//»ùÓÚµãͼ²ã½øÐбê×¢
	AddPointShapeLayer(m_guidePtShpLayerID, dX, dY, str, strColor, RGB(255,0,0));
}


//¹¦ÄÜ£º»ùÓÚµãʸÁ¿Í¼²ã±ê»æÄ¿±êµã
//ÊäÈ룺µãͼ²ãÃû³ÆdrawLayerID
//		µã×ø±ê£¬¾­¶ÈdX, γ¶ÈdY
//      µãÃû³ÆstrPtName    
//      ±ê»æÑÕÉ«strColor
//      ±ê»æ×ÖÌåÑÕÉ«ÊýÖµfontColor
void CGISDlg::AddPointShapeLayer(long &drawLayerID, const double dX, const double dY, const CString strPtName, const CString strColor, unsigned long fontColor)
{
	//ÅжϵãʸÁ¿Í¼²ãÊÇ·ñÒѾ­´æÔÚ£¬´æÔÚÔòɾ³ý
	if (drawLayerID != -1)
	{
		//Çå³ý±ê»æµÄµãʸÁ¿Í¼²ã
		ClearPointShape(drawLayerID);
	}

	///////////////////////////////////н¨µãʸÁ¿Í¼²ã±ê»æµãÄ¿±ê///////////////////////////////////
	//´´½¨µãͼ²ã
	//CreateEmptyShapfile(drawLayerID, 0, RGB(0,255,0));
	CreateEmptyShapfile(drawLayerID, 0, fontColor);

	PtStruct pointDataArr[1];
	pointDataArr[0].dX = dX;
	pointDataArr[0].dY = dY;

	//Ïòµãͼ²ã¼ÓÈ뺽µãÊý¾Ý
	AddPoints2PointShapfile(drawLayerID, pointDataArr, 1);

	/////////////////////ÍùSHPͼ²ãÖмÓÈëÄ¿±êµã±ê×¢ÐÅÏ¢///////////////////////////////

	//Label¼¯ºÏ
	CLabels labesPtr;
	CShapefile shp = m_map.GetShapefile(drawLayerID);
	labesPtr = (m_map.GetShapefile(drawLayerID)).GetLabels();

	labesPtr.SetFontColor(fontColor);
	labesPtr.SetAlignment(1);
	labesPtr.SetFontBold(TRUE);
	labesPtr.SetFontName(_T("Times New Roman"));
	labesPtr.SetFontSize(11);
	labesPtr.put_FontSize2(11);
	labesPtr.SetFrameVisible(false);

/*
	CLabelCategory labelCategory = labesPtr.AddCategory(strColor);
	labelCategory.SetFontColor(fontColor);
	labelCategory.SetAlignment(1);
	labelCategory.SetFontBold(TRUE);
	labelCategory.SetFontName(_T("Times New Roman"));
	labelCategory.SetFontSize(11);
	labelCategory.SetFrameVisible(false);*/

	//Ôö¼ÓLabels
	labesPtr.AddLabel((LPCTSTR)strPtName, dX, dY, 0, 0);

	/////////////////////ÍùSHPͼ²ãÖмÓÈëÄ¿±êµã±ê×¢ÐÅÏ¢///////////////////////////////

	//ÖØÐ»æÖÆ
	m_map.Redraw();
}


//¹¦ÄÜ£ºÇå³ýµãͼ²ã±ê×¢ÐÅÏ¢
//ÊäÈ룺µãͼ²ãIDºÅlayerID
void CGISDlg::ClearPointShape(long layerID)
{
	if (layerID == -1)
	{
		return;
	}
	CLabels labesPtr;
	CShapefile sf = m_map.GetShapefile(layerID);
	if (sf)
	{
		labesPtr = sf.GetLabels();
		//Çå³ý±ê×¢ÐÅÏ¢
		labesPtr.RemoveCategory(0);
		labesPtr.Clear();		

		//Çå³ýÒѾ­±ê»æµÄº½µã
		m_map.RemoveLayer(layerID);
	}
	//labesPtr = (m_map.GetShapefile(layerID)).GetLabels();

	
}

LRESULT CGISDlg::OnCheckFlyLineShowStatus(WPARAM wParam, LPARAM lParam)
{
	//º½Ïß±àºÅ
	int lineIndex = wParam-1;

	if (m_pHaveDrawLineFlag[lineIndex])
	{
		//Çå³ý±ê»æµÄº½Ïß
		ClearDrawedLine(lineIndex);

		//Ë¢ÐÂ
		m_map.Redraw();

		//±êʶÖÃfalse
		m_pHaveDrawLineFlag[lineIndex] = false;
	}

	return 0;

}

// ¹¦ÄÜ£ºÉèÖ÷¢Ë͵¼Òý·½Ê½ÏûÏ¢·¢Ë;ä±ú¼°ÏûÏ¢ºÅ
void CGISDlg::SetMsgInfo(const HWND hwnd, const UINT msgID)
{
	m_MsgHwnd = hwnd;
	m_MsgID  = msgID;
}

// ¹¦ÄÜ£ºÉèÖú½Ïß×°¶©ÏûÏ¢·¢Ë;ä±ú¼°ÏûÏ¢ºÅ
void CGISDlg::SetLoadLineMsgInfo(const HWND hwnd, const UINT msgID)
{
	m_MsgHwnd = hwnd;
	m_LineLoadMsgID  = msgID;
}

//¹¦ÄÜ£ºÅжÏÊó±êÊÇ·ñÑ¡Öк½µã
//ÊäÈ룺º½µãÊý¾Ýcurpoint£¬Êó±êµã»÷ÏñËØ×ø±êxºÍy
//·µ»ØÖµ£ºtrue¡ª¡ªÊó±êÑ¡Öк½µã
//        false¡ª¡ªÊó±êδѡÖк½µã
bool CGISDlg::BeMouseClickedLinePoint(const PtStruct curpoint, const long x, const long y)
{
	CRect rc;

	double ptPixelX = 0;
	double ptPixelY = 0;

	//ÏñËØ×ø±êת»»µØÀí×ø±ê
	m_map.ProjToPixel(curpoint.dX, curpoint.dY, &ptPixelX, &ptPixelY);

	rc.left	= static_cast<long>(ptPixelX - 20);
	rc.top	= static_cast<long>(ptPixelY - 20);
	rc.right = static_cast<long>(ptPixelX + 20);
	rc.bottom = static_cast<long>(ptPixelY + 20);

	CPoint xy;
	xy.x = x;
	xy.y = y;

	if(rc.PtInRect(xy))
	{
		return true;
	}

	return false;
}

void CGISDlg::MouseUpMap1(short Button, short Shift, long x, long y) 
{
	m_iPtSel=-1;

}

//¹¦ÄÜ£ºÊÇ·ñ½øÐÐ×Ô¶¯ÂþÓÎ
void CGISDlg::OnAutoMove()
{
	if (m_bAutoMove)
	{
		m_bAutoMove = false;
	}
	else
	{
		m_bAutoMove = true;
	}


}

void CGISDlg::OnDesignLine()             //º½ÏßÉè¼Æ
{

	if (m_bHaveAddMap)
	{
		//ÒѾ­´¦ÓÚº½ÏßÉè¼Æ×´Ì¬Ê±£¬·µ»Ø
		if (m_bLineDesign)
		{
			return;
		}
		else
		{
			m_bLineDesign = true;

			// 			//Éè¼ÆµÚÒ»¸öº½µã
			// 			m_bDesignFirstPoint = true;
		}

		// 		//Çå³ýÏÖÓеĺ½ÏßÊý¾Ý
		// 		m_pFlyLineDesign->ClearCurrentData();
		// 		
		// 		//ÏÔʾº½ÏßÉè¼Æ¶Ô»°¿ò	
		// 		m_pFlyLineDesign->ShowWindow(SW_SHOW);
		// 		
		// 		//ÏÔʾÈí¼þ
		// 		m_pLineSectDlg->ShowWindow(SW_SHOW);
		// 		
		// 		//ÉèÖÃÊó±êΪ¡°Ñ¡Ôñ¡±Ñùʽ
		// 		m_map.SetCursorMode(3);
	}
	else
	{
		BCGPMessageBox(_T("ÇëÏȼÓÔØµØÍ¼Êý¾Ý£¡"));
	}	


	if(m_bLineDesign  ==  false)
	{

		m_bLineDesign=true;        //º½ÏßÉè¼ÆÄ£Ê½Æô¶¯
	}

}

void CGISDlg::OnData()
{
	AfxMessageBox("this is test!!!");
}



void CGISDlg::OnUpdateAutoMov( CCmdUI *pCmdUI )
{
	pCmdUI->SetCheck(m_bAutoMove);
}


//¹¦ÄÜ£º±ê»æ»ØÊÕµãλÖÃ
//ÊäÈ룺µ¼ÒýµãÀàÐÍcallbackMode£¨1Ϊ»ØÊÕµã1£»2Ϊ»ØÊÕµã2£©£¬¾­¶ÈdX£¬Î³¶ÈdY
void CGISDlg::DrawCallBackPoint(const BYTE callbackMode, const double dX, const double dY)
{
	//ûÓмÓÔØµØÍ¼
	if (!m_bHaveAddMap)
	{
		return;
	}

	if ((callbackMode>255) || (callbackMode<1))
	{
		return;
	}

	CString str;
	str.Format(_T("CallbackPoint%d"), callbackMode);

	//×ÖÌå±ê»æÑÕÉ«
	CString strColor = _T("ÂÌÉ«");

	//»ùÓÚµãͼ²ã½øÐбê×¢
	AddPointShapeLayer(m_pCallBackShapfileID[callbackMode-1], dX, dY, str, strColor, RGB(0,255,0));
}

//¹¦ÄÜ£ºÈ¡ÏûµØÍ¼Çø±ê»æµÄµ¼Òýµã
void CGISDlg::OnRemoveGuidePtDraw()
{
	//ÅжϵãʸÁ¿Í¼²ãÊÇ·ñÒѾ­´æÔÚ£¬´æÔÚÔòɾ³ý
	if (m_guidePtShpLayerID != -1)
	{
		//Çå³ý±ê»æµÄµãʸÁ¿Í¼²ã
		ClearPointShape(m_guidePtShpLayerID);

		m_guidePtShpLayerID = -1;
	}

	//µ¼Òýµãģʽ
	m_guidePointMode = 0;

	m_bGuideMode = false ;

	//ÏÔʾ¿ì½Ý²Ëµ¥
	CMenu menu;
	menu.LoadMenuA(IDR_MENU2);
	menu.CheckMenuItem(IDM_GUIDE_FLY1,MF_BYCOMMAND|MF_UNCHECKED);
	menu.CheckMenuItem(IDM_GUIDE_FLY2,MF_BYCOMMAND|MF_UNCHECKED);
	m_map.Redraw();
}

void CGISDlg::OnUpdateGuideMode1( CCmdUI *pCmdUI )
{
	if (m_guidePointMode == 1)
	{
		pCmdUI->SetCheck(1);
	}
	else
	{
		pCmdUI->SetCheck(0);
	}
}


void CGISDlg::OnUpdateGuideMode2( CCmdUI *pCmdUI )
{
	if (m_guidePointMode == 2)
	{
		pCmdUI->SetCheck(1);
	}
	else
	{
		pCmdUI->SetCheck(0);
	}
}

void CGISDlg::OnAddpoint()         //ÉèÖÃΪÖõ㹤×÷״̬
{
	// TODO: Add your command handler code here
	m_map.SetCursorMode(mapWindow::tkCursorMode::cmNone);
	//m_map.SetCursorMode(5);
	m_bSetPointModel=TRUE;
	m_bLineDesign=TRUE;
	m_bPtDel=FALSE;
	m_bPtEdit=FALSE;

	m_bDesignFirstPoint = false;

	//Éè¼Æº½Ïßʱ£¬Çå³ýÒÑÏÔʾµÄº½Ïß
	/*
	if(m_bLineDesign)
	{
		for(int i=0;i<sizeof(m_pHaveDrawLineFlag) / sizeof(m_pHaveDrawLineFlag[0]);i++)
		{
			if(m_pHaveDrawLineFlag[i])
			{
				m_map.RemoveLayer(m_ppPlanLineShpLayerIDArr[i][1]);
				m_map.RemoveLayer(m_ppPlanLineShpLayerIDArr[i][0]);
			}
		}
	}
	*/
	
}

void CGISDlg::OnEnddesign()     //½áÊø±à¼­
{
	// TODO: Add your command handler code here

	if (m_designLinePointNum < 3 && m_designLinePointNum>0)
	{
		BCGPMessageBox("º½µãÊý²»µÃÉÙÓÚ3!!!");
		return;
	}
	
		//m_bEndSetPoint=TRUE;
		m_bSetPointModel=FALSE;
		m_bLineDesign=FALSE;
		m_bPtDel=FALSE;
		m_bPtEdit=FALSE;
		
        m_map.SetCursorMode(mapWindow::tkCursorMode::cmNone);

       ///////Save the Designed Line
		if (m_designLinePointNum <= 0)
		{
			return;
		}

		//º½ÏßÎļþ·¾¶
		CString strFlyLineName = _T("");

		//º½Ïß±àºÅ
		int designLineID = 0;

		//º½Â·ÌØÕ÷×Ö
		int lineProperty = 0;

		//º½Ï߸߶È
		double lineHeight = 1500.0;

		//±ÕºÏ±êÖ¾
		int designLineCE = 0;

		//µ¯³öº½ÏßÑ¡Ôñ¶Ô»°¿ò
		CSetSaveLineID dlg;

		if (dlg.DoModal() == IDOK)
		{
			//º½Â·ÎļþÃû
			strFlyLineName = dlg.m_strFlyLineName;

			//º½Ïß±àºÅ
			designLineID = dlg.m_designLineID;

			//º½Â·ÌØÕ÷×Ö
			lineProperty = dlg.m_lineProperty;

			//º½Ï߸߶È
			lineHeight = dlg.m_LineHgt;

			//±ÕºÏ±êÖ¾
			if(dlg.m_bClosedLine==0) designLineCE+=2;
		}
		else
		{	
			//δ±£´æÊ±£¬Ò²ÐèÇå³ýÒÑ»æÖƵĺ½ÏߵĺÍÊý¾Ý£¨add by jackwong 2018.08.01£©
			memset(m_pDesignLineStruct, 0, sizeof(PtStruct)*m_lineMaxPointNum);  //³õʼ»¯Ð½¨Ò»Ìõº½Ïß
			m_designLinePointNum = 0;	
			ClearDrawingInLineDesign();

			return ;
		}

		CString strRouteFileDir = GetSoftwareCurrentDirectory() + _T("\\Route");

		TCHAR s[10000];
		s[0]=0;
		CFileDialog dlgSave(FALSE, _T(".txt"), _T("*.txt"));
		dlgSave.m_ofn.lpstrTitle=_T("±£´æº½ÏßÎļþ");
		dlgSave.m_ofn.lpstrFile=s;
		dlgSave.m_ofn.nMaxFile=sizeof(s)/sizeof(TCHAR);

		TCHAR filter[500]=_T("º½ÏßÎļþ(*.txt)\0*.txt\0");
		dlgSave.m_ofn.lpstrFilter=filter;
		dlgSave.m_ofn.Flags|=OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY|OFN_CREATEPROMPT;
		dlgSave.m_ofn.lpstrInitialDir = strRouteFileDir;
		if (IDOK == dlgSave.DoModal())
		{
			strFlyLineName = dlgSave.GetPathName();	


		////д³öº½ÏßÊý¾Ý
		FILE   *fp = fopen(strFlyLineName, "w" );
		if ( fp == NULL )
		{
			BCGPMessageBox("º½ÏßÎļþ´ò¿ªÊ§°Ü£¡£¡£¡");
		}
		else
		{
			PtStruct pt;
			memset(&pt, 0, sizeof(PtStruct));

			//Ô­µãÊý¾ÝдÈë
			fprintf(fp, "%d, %d, %lf, %lf, %.2lf, %d, %02X, %02X\n", designLineID, 0, g_gcsLon, g_gcsLat, 0.0, 0, 0, 3);

			//±éÀúº½µã¼¯ºÏÊý¾Ý
			for ( int i = 0; i < m_designLinePointNum; i++ )
			{
				pt = m_pDesignLineStruct[i];

				//½«³ý×îºóÒ»¸öµãµÄÊý¾ÝдÈëÎļþ
				if ( i < (m_designLinePointNum-1))
				{
					fprintf(fp, "%d, %d, %lf, %lf, %.2lf, %d, %02X, %02X\n", designLineID, pt.nPt, pt.dX, pt.dY, lineHeight, pt.nV, pt.ch1, 3);
				}
				else//½«×îºóÒ»¸öµãµÄº½¶ÎÌØÕ÷Êý¾ÝдÈëÎļþ
				{
					fprintf(fp, "%d, %d, %lf, %lf, %.2lf, %d, %02X, %02X\n", designLineID, pt.nPt, pt.dX, pt.dY, lineHeight, pt.nV, designLineCE/*pt.ch1*/, lineProperty);
				}
			}

			fclose( fp );   

			//µ¯³ö±£´æ³É¹¦¶Ô»°¿ò
			BCGPMessageBox(_T("º½ÏßÎļþ±£´æ³É¹¦£¡"));

          }
		}

		memset(m_pDesignLineStruct, 0, sizeof(PtStruct)*m_lineMaxPointNum);  //³õʼ»¯Ð½¨Ò»Ìõº½Ïß
		m_designLinePointNum = 0;	
		
		
		ClearDrawingInLineDesign();
        int lineIndex =designLineID - 1;
		
		if (m_pHaveDrawLineFlag[lineIndex])
		{
			//Çå³ý±ê»æµÄº½Ïß
			ClearDrawedLine(lineIndex);
			OnShowGivenLine(strFlyLineName/*GetFlyLineName(designLineID)*/);
			//OnShowGivenLine(GetFlyLineName(designLineID));
		}
		else
		{
			OnShowGivenLine(strFlyLineName/*GetFlyLineName(designLineID)*/);
		}
		//º½µã¸öÊýΪ0
}

void CGISDlg::OnClearpoint()         //Çå³ýËùÓÐ±ê»æ
{
	//m_map.SetCursorMode(5);
	m_map.SetCursorMode(mapWindow::tkCursorMode::cmNone);
	m_bPtEdit=FALSE;                //±à¼­
	m_bPtDel=FALSE;                 //ɾµã
	m_bSetPointModel=FALSE;
	m_bLineDesign=TRUE;
	m_bLDSetPoint = FALSE;
	RemoveDesignLineData();
}

void CGISDlg::OnEditProper()    //ÊôÐÔ
{
	// TODO: ÔÚ´ËÌí¼ÓÃüÁî´¦Àí³ÌÐò´úÂë
	/*m_map.SetCursorMode(5);
	m_bSetPointModel=FALSE;
	m_bLineDesign=TRUE;
	m_bPtDel=FALSE;
	m_bPtEdit=TRUE;*/
}


void CGISDlg::OnEditpoint()    //±à¼­
{
	// TODO: ÔÚ´ËÌí¼ÓÃüÁî´¦Àí³ÌÐò´úÂë
	//m_map.SetCursorMode(5);
	m_map.SetCursorMode(mapWindow::tkCursorMode::cmNone);
	m_bSetPointModel=FALSE;
	m_bLineDesign=TRUE;
	m_bPtDel=FALSE;
	m_bPtEdit=TRUE;
}


int CGISDlg::GetPtSel(int x,int y)//»ñÈ¡Êó±êѡȡµÄµãºÅ
{
	int i=0;
	double px=0;
	double py=0;

	int dis=10.0;

	for (i=0;i<m_designLinePointNum;i++)
	{
		//µØÀí×ø±êת»»ÏñËØ×ø±ê
		m_map.ProjToPixel(m_pDesignLineStruct[i].dX,m_pDesignLineStruct[i].dY, &px, &py);
		if (fabs(px-x)<dis&&fabs(py-y)<dis)
		{
			return i;
		}
	}
	return -1;
}

//ÖØÔØ by Wu 2023.09.14
int CGISDlg::GetPtSel(PtStruct* m_pLinePtStruct,int m_PointNum,int x,int y)
{
	int i=0;
	double px=0;
	double py=0;

	int dis=10.0;

	for (i=0;i<m_PointNum;i++)
	{
		//µØÀí×ø±êת»»ÏñËØ×ø±ê
		m_map.ProjToPixel(m_pLinePtStruct[i].dX,m_pLinePtStruct[i].dY, &px, &py);
		if (fabs(px-x)<dis&&fabs(py-y)<dis)
		{
			return i;
		}
	}
	return -1;
}

void CGISDlg::OnDelpoint()      //ɾµã
{
	// TODO: ÔÚ´ËÌí¼ÓÃüÁî´¦Àí³ÌÐò´úÂë
	
    //m_map.SetCursorMode(5);
	m_map.SetCursorMode(mapWindow::tkCursorMode::cmNone);
	m_bSetPointModel=FALSE;
	m_bLineDesign=TRUE;
	m_bPtDel=TRUE;
	m_bPtEdit=FALSE;
	m_bDesignFirstPoint=true;
}

void CGISDlg::DrawLineDesign()
{
	//Çå³ýº½ÏßÉè¼ÆÊ±µÄ±ê×¢ÐÅÏ¢
	ClearDrawingInLineDesign();
	//±ê»æ³öÉè¼ÆµÄº½µãÊý¾Ý
	DrawDesignLineData();
}

// ¹¦ÄÜ£º±à¼­»ØÊÕº½Ïß  ------by Wu  2023.09.14
void CGISDlg::OnEditLine()
{
	m_map.SetCursorMode(mapWindow::tkCursorMode::cmNone);
	if (m_lineSelectedID > 0 && m_bSelectFeatureFlag)  //»ØÊÕº½ÏßÊÇ·ñÏÔʾ
	{
		m_bEditLine = true;

		ClearHighLightLine();
	}
	m_bSelectFeatureFlag = false;
}

//void CGISDlg::OnBindline1()
//{
//	::PostMessage(m_MsgHwnd,m_LineLoadMsgID,1,0);            //·¢Ë͸øÖ÷³ÌÐò×°¶©º½Ïß1
//}
void CGISDlg::OnBindline2()                                  //·¢Ë͸øÖ÷³ÌÐò×°¶©º½Ïß2
{
	// TODO: ÔÚ´ËÌí¼ÓÃüÁî´¦Àí³ÌÐò´úÂë

	m_struMapOut.cmd=MapCmd_BindLine;
	m_struMapOut.ID=2;
	::SendMessage(GetParent()->GetSafeHwnd(),MESSAGE_B8MAP,(int)(&m_struMapOut),0);
	//::PostMessage(m_MsgHwnd,m_LineLoadMsgID,2,0);  
}

void CGISDlg::OnLoadMyline1()                                //·¢Ë͸øÖ÷³ÌÐò×°¶©º½Ïß1
{
	// TODO: ÔÚ´ËÌí¼ÓÃüÁî´¦Àí³ÌÐò´úÂë
	m_struMapOut.cmd=MapCmd_BindLine;
	m_struMapOut.ID=1;
	::SendMessage(GetParent()->GetSafeHwnd(),MESSAGE_B8MAP,(int)(&m_struMapOut),0);
	//::PostMessage(m_MsgHwnd,m_LineLoadMsgID,1,0);  
}

void CGISDlg::OnBindline3()                                  //·¢Ë͸øÖ÷³ÌÐò×°¶©º½Ïß3
{
	// TODO: ÔÚ´ËÌí¼ÓÃüÁî´¦Àí³ÌÐò´úÂë
	m_struMapOut.cmd=MapCmd_BindLine;
	m_struMapOut.ID=3;
	::SendMessage(GetParent()->GetSafeHwnd(),MESSAGE_B8MAP,(int)(&m_struMapOut),0);
	//::PostMessage(m_MsgHwnd,m_LineLoadMsgID,3,0); 
}

void CGISDlg::OnBindline4()                                  //·¢Ë͸øÖ÷³ÌÐò×°¶©º½Ïß4
{
	// TODO: ÔÚ´ËÌí¼ÓÃüÁî´¦Àí³ÌÐò´úÂë
	m_struMapOut.cmd=MapCmd_BindLine;
	m_struMapOut.ID=4;
	::SendMessage(GetParent()->GetSafeHwnd(),MESSAGE_B8MAP,(int)(&m_struMapOut),0);
    //::PostMessage(m_MsgHwnd,m_LineLoadMsgID,4,0); 
}

void CGISDlg::OnBindline5()                                  //·¢Ë͸øÖ÷³ÌÐò×°¶©º½Ïß5
{
	// TODO: ÔÚ´ËÌí¼ÓÃüÁî´¦Àí³ÌÐò´úÂë
	m_struMapOut.cmd=MapCmd_BindLine;
	m_struMapOut.ID=5;
	::SendMessage(GetParent()->GetSafeHwnd(),MESSAGE_B8MAP,(int)(&m_struMapOut),0);
	//::PostMessage(m_MsgHwnd,m_LineLoadMsgID,5,0); 
}

void CGISDlg::OnBindline6()                  //·¢Ë͸øÖ÷³ÌÐò×°¶©º½Ïß6
{
	// TODO: ÔÚ´ËÌí¼ÓÃüÁî´¦Àí³ÌÐò´úÂë
	m_struMapOut.cmd=MapCmd_BindLine;
	m_struMapOut.ID=6;
	::SendMessage(GetParent()->GetSafeHwnd(),MESSAGE_B8MAP,(int)(&m_struMapOut),0);
}

void CGISDlg::OnBindline7()                          //·¢Ë͸øÖ÷³ÌÐò×°¶©º½Ïß7
{
	// TODO: ÔÚ´ËÌí¼ÓÃüÁî´¦Àí³ÌÐò´úÂë
	m_struMapOut.cmd=MapCmd_BindLine;
	m_struMapOut.ID=7;
	::SendMessage(GetParent()->GetSafeHwnd(),MESSAGE_B8MAP,(int)(&m_struMapOut),0);
}

void CGISDlg::OnBindline8()                           //·¢Ë͸øÖ÷³ÌÐò×°¶©º½Ïß8
{
	// TODO: ÔÚ´ËÌí¼ÓÃüÁî´¦Àí³ÌÐò´úÂë
	m_struMapOut.cmd=MapCmd_BindLine;
	m_struMapOut.ID=8;
	::SendMessage(GetParent()->GetSafeHwnd(),MESSAGE_B8MAP,(int)(&m_struMapOut),0);
}

void CGISDlg::OnBindline9()
{
	// TODO: ÔÚ´ËÌí¼ÓÃüÁî´¦Àí³ÌÐò´úÂë
	m_struMapOut.cmd=MapCmd_BindLine;
	m_struMapOut.ID=9;
	::SendMessage(GetParent()->GetSafeHwnd(),MESSAGE_B8MAP,(int)(&m_struMapOut),0);
}

void CGISDlg::OnBindline10()
{
	// TODO: ÔÚ´ËÌí¼ÓÃüÁî´¦Àí³ÌÐò´úÂë
	m_struMapOut.cmd=MapCmd_BindLine;
	m_struMapOut.ID=10;
	::SendMessage(GetParent()->GetSafeHwnd(),MESSAGE_B8MAP,(int)(&m_struMapOut),0);
}



void CGISDlg::OnLayermng()                                   //ͼ²ã¹ÜÀí
{
	// TODO: ÔÚ´ËÌí¼ÓÃüÁî´¦Àí³ÌÐò´úÂë
	m_Layer->ShowWindow(SW_SHOW);

}


void CGISDlg::OnAddgtarget()
{
	// TODO: ÔÚ´ËÌí¼ÓÃüÁî´¦Àí³ÌÐò´úÂë
}




//void CGISDlg::OnMouseHWheel(UINT nFlags, short zDelta, CPoint pt)
//{
//	// ´Ë¹¦ÄÜÒªÇó Windows Vista »ò¸ü¸ß°æ±¾¡£
//	// _WIN32_WINNT ·ûºÅ±ØÐë >= 0x0600¡£
//	// TODO: ÔÚ´ËÌí¼ÓÏûÏ¢´¦Àí³ÌÐò´úÂëºÍ/»òµ÷ÓÃĬÈÏÖµ
//
//	CBCGPDialog::OnMouseHWheel(nFlags, zDelta, pt);
//}

void CGISDlg::SetRouteLine(int iLine ,PTLIST *pList)
{

	CString sRouteDir = GetSoftwareCurrentDirectory();
	//2015.11.24
	CString	str;
	str.Format("%d", iLine);
	CString m_sRoute = sRouteDir + _T( "\\route" ) + str + _T( ".txt" );

	//2015.10.24	Ìí¼Ó¶ÁÈ¡º½ÏßÎļþ
// 	if (!SearchDirectory(m_sRoute))
// 	{
// 		str = m_sRoute + "º½Ïß²»´æÔÚ";
// 		MessageBox(str, "µØÍ¼");
// 	}
// 
// 	DrawLineDataStruct	CXLineGroup;
// 	m_lineManage.ReadLineDataFromFile(CXLineGroup,m_sRoute);


// 	DrawLineDataStruct	CXLineGroup;
// 	if (m_lineManage.ReadLineDataFromFile(CXLineGroup,m_sRoute))
// 	{
// 		int idNum = m_lineManage.line->GetCount();
// 		//int idNum = CXLineGroup.linePointNum;
// 		POSITION ps = m_lineManage.line->GetHeadPosition();
// 		for (int i = 0; i < idNum; i++)
// 		{
// 			PtStruct pt = m_lineManage.line->GetNext(ps);
// 			pList->AddTail(pt);
// 		}
// 
// 
// 	}
// 	else
// 	{
// 		MessageBox("º½Â·Îļþ´íÎó£¡","µØÍ¼");
// 		pList->RemoveAll();
// 	}

}


//2016.02.19
// LRESULT CGISDlg::DRAW_ZK(WPARAM wParam, LPARAM lParam)
// {
// 	if (!m_bHaveAddMap)
// 	{
// 		return FALSE;
// 	}
// 	tagDRAWZK DrZk = m_DRAWZK;
// 
// 	CString str="";
// 
// 	str.Format("º½ÏߺÅ:%02d	´ý·É¾à:%d	Æ«º½½Ç:%.2f	¸ß¶È¸ø¶¨:%.2f	·É»ú¾àÀë:%.2f	³¡¸ß:%.2f\n\
// 			   º½µãºÅ:%02d	²àÆ«¾à:%d	º½Ïò¸ø¶¨:%.2f	¿ÕËÙ¸ø¶¨:%.2f		·É»ú·½Î»:%.2f", 
// 			   DrZk.ID_Line, DrZk.Dis_DF, DrZk.Yaw_Offset, DrZk.Heg_GD, DrZk.Dis_Air, DrZk.Heg_GRD,\
// 			   DrZk.ID_Pt, DrZk.Dis_Offset, DrZk.Yaw_GD, DrZk.AirSpeed_GD, DrZk.Azi_Air);
// 
// 
// 	//GetDlgItem( IDC_STATIC_MAPSHOW )->EnableWindow( TRUE );
// 	//GetDlgItem(IDC_STATIC_MAPSHOW)->SetWindowText(str);
// 
// 	return 0;
// }

void CGISDlg::OnNlinedesign()
{
	// TODO: ÔÚ´ËÌí¼ÓÃüÁî´¦Àí³ÌÐò´úÂë

	m_bLDSetPoint = TRUE;

	m_pLineDesign = new CLineDesign();
	m_pLineDesign->Create(IDD_DLG_LINEDESIGN,this);
	m_pLineDesign->ShowWindow(TRUE);

	if (!m_bHaveShowLineDesign)
	{
		m_bHaveShowLineDesign = true;
		//m_pLineDesign->ShowLonLat(0, 0);
		m_pLineDesign->ShowWindow(SW_SHOW);
	} 
	else
	{
		m_bHaveShowLineDesign = false;
		m_pLineDesign->ShowWindow(SW_HIDE);
	}

}


void CGISDlg::OnUpdateNlinedesign(CCmdUI *pCmdUI)
{
	// TODO: ÔÚ´ËÌí¼ÓÃüÁî¸üÐÂÓû§½çÃæ´¦Àí³ÌÐò´úÂë
}


BOOL CGISDlg::ReadLine(int iLine,PTLIST *pList)
{
	if (pList==NULL)
	{
		return FALSE;
	}
	else
	{
		pList->RemoveAll();
	}

	if (iLine<1||iLine>14)			//2015.10.12
	{
		return FALSE;
	}
	CString str;
	CString sLineName=GetFlyLineName(iLine);
	if (!SearchDirectory(sLineName))
	{
		str=sLineName+" º½Ïß²»´æÔÚ";
		MessageBox(str,"µØÍ¼");
		return FALSE;
	}

	CLineManage tpLine;

	if (tpLine.OpenFlyLineFile(sLineName,iLine,true))
	{
		int idNum=tpLine.line.GetCount();
		POSITION ps=tpLine.line.GetHeadPosition();
		for (int i=0;i<idNum;i++)
		{
			PtStruct pt=tpLine.line.GetNext(ps);
			pList->AddTail(pt);
		}
		return TRUE;
	}
	else
	{
		MessageBox("º½Â·Îļþ´íÎó!","µØÍ¼");
		pList->RemoveAll();
		return FALSE;
	}
}

//ÏÔʾ»ØÊÕº½Ïߣ¨14£©
void CGISDlg::OnShowBackLine()
{
	// TODO: ÔÚ´ËÌí¼ÓÃüÁî´¦Àí³ÌÐò´úÂë
	if (g_b981ADesktop || g_b981APad)
	{
		SetFlyLineShowStatus(14);
	}
	if (g_b981CDesktop)
	{
		SetFlyLineShowStatus(11);
	}
}


void CGISDlg::OnUpdateShowBackLine(CCmdUI *pCmdUI)
{
	// TODO: ÔÚ´ËÌí¼ÓÃüÁî¸üÐÂÓû§½çÃæ´¦Àí³ÌÐò´úÂë
	if (g_b981ADesktop || g_b981APad)
	{
		pCmdUI->SetCheck(m_pHaveDrawLineFlag[13]); 
	}
	if (g_b981CDesktop)
	{
		pCmdUI->SetCheck(m_pHaveDrawLineFlag[10]); 
	}
}


void CGISDlg::OnShowHs11()
{
	// TODO: ÔÚ´ËÌí¼ÓÃüÁî´¦Àí³ÌÐò´úÂë
	if (g_b981ADesktop || g_b981APad)
	{
		SetFlyLineShowStatus(11);
	}
	if (g_b981CDesktop)
	{
		SetFlyLineShowStatus(7);
	}
}

//Ó¦¼±º½Ïß 11
void CGISDlg::OnUpdateShowHs11(CCmdUI *pCmdUI)
{
	// TODO: ÔÚ´ËÌí¼ÓÃüÁî¸üÐÂÓû§½çÃæ´¦Àí³ÌÐò´úÂë
	if (g_b981ADesktop || g_b981APad)
	{
		pCmdUI->SetCheck(m_pHaveDrawLineFlag[10]);
	}

	if (g_b981CDesktop)
	{
		pCmdUI->SetCheck(m_pHaveDrawLineFlag[6]);
	}
	
}


void CGISDlg::OnBindHs11()
{
	m_struMapOut.cmd=MapCmd_BindLine;
	if (g_b981ADesktop || g_b981APad)
	{
		m_struMapOut.ID=11;
	}
	if (g_b981CDesktop)
	{
		m_struMapOut.ID=7;
	}
	::SendMessage(GetParent()->GetSafeHwnd(),MESSAGE_B8MAP,(int)(&m_struMapOut),0);
}

//µç×ÓΧÀ¸ 12
void CGISDlg::OnShowTc12()
{
	if (g_b981ADesktop || g_b981APad)
	{
		SetFlyLineShowStatus(12);
	}
	if (g_b981CDesktop)
	{
		SetFlyLineShowStatus(6);
	}
	
}


void CGISDlg::OnBindTc12()
{
	m_struMapOut.cmd=MapCmd_BindLine;
	if (g_b981ADesktop || g_b981APad)
	{
		m_struMapOut.ID=12;
	}
	if (g_b981CDesktop)
	{
		m_struMapOut.ID=6;
	}
	::SendMessage(GetParent()->GetSafeHwnd(),MESSAGE_B8MAP,(int)(&m_struMapOut),0);
}


void CGISDlg::OnUpdateShowTc12(CCmdUI *pCmdUI)
{
	if (g_b981ADesktop || g_b981APad)
	{
		pCmdUI->SetCheck(m_pHaveDrawLineFlag[11]);
	}
	if (g_b981CDesktop)
	{
		pCmdUI->SetCheck(m_pHaveDrawLineFlag[5]);
	}
}

void CGISDlg::OnSize(UINT nType, int cx, int cy)
{
	CBCGPDialog::OnSize(nType, cx, cy);

	// TODO: ÔÚ´Ë´¦Ìí¼ÓÏûÏ¢´¦Àí³ÌÐò´úÂë
	if (m_map.GetSafeHwnd())
	{
		CRect rc;
		GetClientRect(&rc);
		rc.top += 35;
		m_map.MoveWindow(rc);
		//RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST, 0);
	}
	
}

void CGISDlg::OnBindBackLine()
{
	m_struMapOut.cmd=MapCmd_BindLine;
	if (g_b981ADesktop || g_b981APad)
	{
		m_struMapOut.ID=14;
	}
	if (g_b981CDesktop)
	{
		m_struMapOut.ID=11;
	}
	::SendMessage(GetParent()->GetSafeHwnd(),MESSAGE_B8MAP,(int)(&m_struMapOut),0);
}

void CGISDlg::UpdateDataInfo(int index,const char* key,double value)
{
	switch (index)
	{
	case 0:
		m_infoData.lineID = value;
		break;
	case 1:
		m_infoData.ptID = value;
		break;
	case 2:
		m_infoData.disDF = value;
		break;
	case 3:
		m_infoData.disCP = value;
		break;
	case 4:
		m_infoData.headingGD = value;
		break;
	case 5:
		m_infoData.anglePH = value;
		break;
	case 6:
		m_infoData.heightGD = value;
		break;
	case 7:
		m_infoData.heightPC = value;
		break;
	case 8:
		m_infoData.speedGD = value;
		break;
	case 9:
		m_infoData.heightCG = value;
		break;
	case 10:
		m_infoData.dis = value;
		break;
	case 11:
		m_infoData.heading = value;
		break;
	default:
		break;
	}
	DrawCanvas();
}

//±ê»æµØÍ¼²ÎÊý
void CGISDlg::DrawCanvas()
{				
	COLORREF color = RGB(50,235,50);
	//COLORREF colorback= RGB(0,0,0);//ºÚµ×
	CRect rec;
	m_map.GetClientRect(&rec);

	const long leftEdge = rec.left;
	const long topEdge = rec.top + 20;
	const int horizonInter = 11;
	const int verticalInter = rec.Height() / 19;

	CLabels labesPtr;
	if(m_canvasLayerID != -1)
	{	
		labesPtr = m_map.GetDrawingLabels(m_canvasLayerID);
		labesPtr.Clear();
		CString str = "";
		
		str.Format(_T("%-s%-d"),_T("º½ÏßÐòºÅ:"),m_infoData.lineID);		
		labesPtr.AddLabel(str, leftEdge + horizonInter, topEdge + verticalInter * 1, 0, 0);
		str.Format(_T("%-s%-d"),_T("º½µãÐòºÅ:"),m_infoData.ptID);		
		labesPtr.AddLabel(str, leftEdge + horizonInter, topEdge + verticalInter * 2, 0, 0);
		
		str.Format(_T("%-s%-d"),_T("´ý·É¾àÀë:"),m_infoData.disDF);		
		labesPtr.AddLabel(str, leftEdge + horizonInter, topEdge + verticalInter * 4, 0, 0);
		str.Format(_T("%-s%-.1lf"),_T("²àÆ«¾àÀë:"),m_infoData.disCP);		
		labesPtr.AddLabel(str, leftEdge + horizonInter, topEdge + verticalInter * 5, 0, 0);

		str.Format(_T("%-s%-.1lf"),_T("º½Ïò¸ø¶¨:"),m_infoData.headingGD);
		labesPtr.AddLabel(str, rec.left + horizonInter/* - 11*/, topEdge + verticalInter * 7, 0, 0);
		str.Format(_T("%-s%-.1lf"),_T("Æ«º½½Ç¶È:"),m_infoData.anglePH);
		labesPtr.AddLabel(str, rec.left + horizonInter/* - 11*/, topEdge + verticalInter * 8, 0, 0);
			
		str.Format(_T("%-s%-.1lf"),_T("¸ß¶ÈÆ«²î:"),m_infoData.heightPC);
		labesPtr.AddLabel(str, rec.left + horizonInter, topEdge + verticalInter * 10, 0, 0);
		str.Format(_T("%-s%-.1lf"),_T("¸ß¶È¸ø¶¨:"),m_infoData.heightGD);
		labesPtr.AddLabel(str, rec.left + horizonInter, topEdge + verticalInter * 11, 0, 0);
		
		str.Format(_T("%-s%-.1lf"),_T("¿ÕËÙ¸ø¶¨:"),m_infoData.speedGD);
		labesPtr.AddLabel(str, rec.left + horizonInter, topEdge + verticalInter * 13, 0, 0);
		str.Format(_T("%-s%-.1lf"),_T("·ÉÐг¡¸ß:"),m_infoData.heightCG);
		labesPtr.AddLabel(str, rec.left + horizonInter, topEdge + verticalInter * 14, 0, 0);
		
		str.Format(_T("%-s%-.1lf"),_T("·É»ú¾àÀë:"),m_infoData.dis);
		labesPtr.AddLabel(str, rec.left + horizonInter, topEdge + verticalInter * 16, 0, 0);
		str.Format(_T("%-s%-.1lf"),_T("·É»ú·½Î»:"),m_infoData.heading);
		labesPtr.AddLabel(str, rec.left + horizonInter /*- 5*/, topEdge + verticalInter * 17, 0, 0);
	}
	else
	{
		m_canvasLayerID = m_map.NewDrawing(0);
		labesPtr = m_map.GetDrawingLabels(m_canvasLayerID);
		CLabelCategory left = labesPtr.AddCategory(_T(""));
		left.SetFontColor(color);
		left.SetAlignment(2);//0£º¾ÓÖУ»1 ÓÒ¶ÔÆë£¬2±íʾ×ó¶ÔÆë
		left.SetOffsetX(0);
		left.SetOffsetY(0);
		left.SetFontBold(true);
		left.SetFontName(LPCTSTR("ºÚÌå"));
		left.SetFontSize(13);
		left.SetFrameBackColor(RGB(0,0,0));
		left.SetFrameVisible(TRUE);
		left.SetFrameTransparency(0);

		CLabelCategory right = labesPtr.AddCategory(_T(""));
		right.SetFontColor(color);
		right.SetAlignment(2);//0£ºÓÒ£»1 ¾ÓÖУ¬2±íʾ×ó¶ÔÆë
		right.SetOffsetX(0);
		right.SetOffsetY(0);
		right.SetFontBold(true);
		right.SetFontName(LPCTSTR("ºÚÌå"));
		right.SetFontSize(13);
		right.SetFrameBackColor(RGB(0,0,0));
		right.SetFrameVisible(TRUE);
		right.SetFrameTransparency(0);
	}  
	//m_map.Redraw();
}

void CGISDlg::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*/)
{
	if(shapeID == -1)
		return;

	CLabels labesPtr;
	labesPtr = (m_map.GetShapefile(shapeID)).GetLabels();

	CLabelCategory labelCategory = labesPtr.AddCategory(_T(""));
	labelCategory.SetFontColor(fontColor);
	labelCategory.SetAlignment(1);
	labelCategory.SetOffsetX(XOffset);
	labelCategory.SetOffsetY(YOffset);
	labelCategory.SetFontBold(TRUE);
	labelCategory.SetFontName(LPCTSTR("ËÎÌå"));
	labelCategory.SetFontSize(fontSize);
	labelCategory.SetFrameBackColor(frameBackColor);
	labelCategory.SetFrameVisible(TRUE);
}


void CGISDlg::OnMove(int x, int y)
{
	CBCGPDialog::OnMove(x, y);

	// TODO: ÔÚ´Ë´¦Ìí¼ÓÏûÏ¢´¦Àí³ÌÐò´úÂë
	CRect rc;
	GetClientRect(&rc);
	ClientToScreen(&rc);
	/*if (m_pUavSelDlg1->GetSafeHwnd())
	{
	m_pUavSelDlg1->MoveWindow(rc.left,rc.top+10,50,50);
	}
	if (m_pUavSelDlg2->GetSafeHwnd())
	{
	m_pUavSelDlg2->MoveWindow(rc.left+rc.Width()/2-100,rc.top+10,50,50);
	}
	if (m_pUavSelDlg3->GetSafeHwnd())
	{
	m_pUavSelDlg3->MoveWindow(rc.left+rc.Width()-100,rc.top+10,50,50);
	}*/
	
}


BOOL CGISDlg::OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
	// TODO: ÔÚ´ËÌí¼ÓרÓôúÂëºÍ/»òµ÷ÓûùÀà
	return CBCGPDialog::OnWndMsg(message, wParam, lParam, pResult);
}

//Çл»·É»ú
afx_msg LRESULT CGISDlg::OnSelUav(WPARAM wParam, LPARAM lParam)
{

	return 0;
}

//Ìí¼ÓµØ±êµã
void CGISDlg::OnAddTarget()
{
	// TODO: ÔÚ´ËÌí¼ÓÃüÁî´¦Àí³ÌÐò´úÂë
	/*if (m_pTargetDlg->GetSafeHwnd())
	{
		ReadTargetIni(false);
		m_pTargetDlg->ShowWindow(SW_SHOW);
	}*/

	m_dlgMarker.ShowWindow(TRUE);
}

void CGISDlg::ReadTargetIni(bool bDraw)
{
	CString m_MapPath;   //ĬÈÏ´ò¿ªµØÍ¼Â·¾¶
	char lonBuf[255];
	char latBuf[255];
	CString fileName = GetSoftwareCurrentDirectory() + "\\target.ini";
	CString strTarget ;
	for (int i = 1; i < 255 ; i++)
	{
		if (m_pTargetDlg)
		{
			m_pTargetDlg->SetExistFlag(i,false);
		}
		strTarget.Format("%d",i);
		BOOL blon = GetPrivateProfileString(strTarget,"lon",0,lonBuf,20,fileName);
		BOOL blat = GetPrivateProfileString(strTarget,"lat",0,latBuf,20,fileName);
		if (blon&&blat)
		{
			double lon = atof(lonBuf);
			double lat = atof(latBuf);

			if (fabs(lon)>180.0||fabs(lat)>90.0)//Êý¾Ý·Ç·¨£¬Çå³ý
			{
				WritePrivateProfileString(strTarget,"lon",NULL, fileName);
				WritePrivateProfileString(strTarget,"lat",NULL, fileName);
				WritePrivateProfileString(strTarget,"alt",NULL, fileName);
				continue;
			} 

			m_targets[i-1].id = i;
			m_targets[i-1].lon = lon;
			m_targets[i-1].lat = lat;

			if (bDraw)
			{
				AddTargetPoint(i,lon,lat);
			}
			if (m_pTargetDlg)
			{
				m_pTargetDlg->SetExistFlag(i,true);
			}
		}
		else
		{
			m_targets[i-1].id = -1;
		}
		
	}
}

afx_msg LRESULT CGISDlg::OnDrawTarget(WPARAM wParam, LPARAM lParam)
{
	if (m_pTargetDlg->GetSafeHwnd())
	{
		int id = 0;
		double lon = 0.0;
		double lat = 0.0;
		double alt = 0.0;
		m_pTargetDlg->GetTargetLLA(id,lon,lat,alt);
		if (id>0&&id<255)
		{
			m_targets[id-1].id = id;
			m_targets[id-1].lon = lon;
			m_targets[id-1].lat = lat;
		}
		
		AddTargetPoint(id,lon,lat);

	}
	return 0;
}


void CGISDlg::OnShowWindow(BOOL bShow, UINT nStatus)
{
	CBCGPDialog::OnShowWindow(bShow, nStatus);

	// TODO: ÔÚ´Ë´¦Ìí¼ÓÏûÏ¢´¦Àí³ÌÐò´úÂë
	if(bShow)
	{
		HCURSOR hCur = LoadCursor(NULL,IDC_ARROW);
		::SetCursor(hCur);
		CString dir = "";
		CString fileName = GetSoftwareCurrentDirectory() + "\\map.ini";
		::GetPrivateProfileString("map", "layer","",dir.GetBuffer(256),256, fileName); 
		dir.ReleaseBuffer(256);
		if(!m_bHaveAddMap)
		{
			CFileFind fd;
			if (fd.FindFile(dir))
			{
				Openlocalfile(dir);
			}
			fd.Close();
		}
	}
	
	
	//ReadTargetIni(true);
}

//ɾ³ýÑ¡ÖеÄÄ¿±êµã£¨ÒòΪ²»ÄÜÈ·¶¨Í¼²ãÖеĵ㣬ËùÒÔ²ÉÓÃÈ«²¿É¾³ýÔÙ»æÖÆ·½·¨£©
void CGISDlg::OnTargetDelete()
{
	// TODO: ÔÚ´ËÌí¼ÓÃüÁî´¦Àí³ÌÐò´úÂë
	CString strID = "";
	strID.Format("%d",m_targetSelID);
	
	CString fileName = GetSoftwareCurrentDirectory() + "\\target.ini";
	WritePrivateProfileString(strID,"lon",NULL, fileName);
	WritePrivateProfileString(strID,"lat",NULL, fileName);
	WritePrivateProfileString(strID,"alt",NULL, fileName);


	m_map.GetShapefile(m_targetDrawLayerID).EditClear();
	m_map.GetShapefile(m_targetDrawLayerID).GetLabels().Clear();
	ReadTargetIni(true);
	m_map.Redraw();
	m_targetSelID = 0;
}

//ÔÚµØÍ¼ÉÏÑ¡µã
afx_msg LRESULT CGISDlg::OnSendSelectTarget(WPARAM wParam, LPARAM lParam)
{
	m_bSelectDropPoint = true;

	//ÉèÖÃÊó±êΪ¡°Ñ¡Ôñ¡±Ñùʽ
	m_map.SetCursorMode(3);

	return 0;
}

//ÏÔʾ±ê×¢µã
afx_msg LRESULT CGISDlg::OnShowPointInMap(WPARAM wParam, LPARAM lParam)
{
	if (!m_bHaveAddMap)
	{
		return 0;
	}

	if (0 == m_longGroundID)
	{
		//»ùÓÚµãͼ²ã½øÐбê×¢
		AddPointShapeLayer(m_longGroundID, m_dlgLightRegion.m_dGroundLon, m_dlgLightRegion.m_dGroundLat, _T("GCS(LOS)"), _T("ºìÉ«"), RGB(255,0,0));
	}
	else
	{
		ClearPointShape(m_longGroundID);

		m_longGroundID = 0;
	}

	return 0;
}

//ÏÔʾ¿ÉÊÓÇøÓò
afx_msg LRESULT CGISDlg::OnShowPointVisible(WPARAM wParam, LPARAM lParam)
{
	if (m_visbleCircleLayerID < 0)
	{
		m_gisManager->CreateEmptyAreaShapfile(m_visbleCircleLayerID,RGB(0,255,0),RGB(0,255,0),40); //ÂÌÉ«
	}

	for (int i=0;i<360;i++)
	{
		m_gisManager->AddOnePoint2Shapfile(m_visbleCircleLayerID,2,g_structPointVisible[i].lon,g_structPointVisible[i].lat);
	}

	//ÇøÓòÃæ»ýΪÁãʱ£¬Çå³ý¸ÃÇøÓòÏÔʾ
	if (0 == m_map.GetShapefile(m_visbleCircleLayerID).GetShape(0).GetArea())
	{
		m_map.GetShapefile(m_visbleCircleLayerID).EditClear();
	}

	m_map.Redraw();

	/*structPoint *_structPoint = (structPoint*)wParam;

	m_gisManager->AddOnePoint2Shapfile(m_visbleCircleLayerID,2,_structPoint->lon,_structPoint->lat);*/

	return 0;
}

//ÏÔʾ²»¿ÉÊÓÇøÓò
afx_msg LRESULT CGISDlg::OnShowPointNotVisible(WPARAM wParam, LPARAM lParam)
{
	if (m_notVisibleCircleLayerID < 0)
	{
		m_gisManager->CreateEmptyAreaShapfile(m_notVisibleCircleLayerID,RGB(255,0,0),RGB(255,0,0),40); //ºìÉ«
	}

	for (int i=0;i<722;i++)
	{
		m_gisManager->AddOnePoint2Shapfile(m_notVisibleCircleLayerID,2,g_structPointNotVisible[i].lon,g_structPointNotVisible[i].lat);
	}

	//ÇøÓòÃæ»ýΪÁãʱ£¬Çå³ý¸ÃÇøÓòÏÔʾ
	if (0 == m_map.GetShapefile(m_notVisibleCircleLayerID).GetShape(0).GetArea())
	{
		m_map.GetShapefile(m_notVisibleCircleLayerID).EditClear();
	}

	m_map.Redraw();

	/*structPoint *_structPoint = (structPoint*)wParam;

	m_gisManager->AddOnePoint2Shapfile(m_notVisibleCircleLayerID,2,_structPoint->lon,_structPoint->lat);*/

	return 0;
}

//Çå³ý¿ÉÊÓÇøÓòÓë²»¿ÉÊÓÇøÓò»æÖÆÍ¼²ã
afx_msg LRESULT CGISDlg::OnSendClearShape(WPARAM wParam, LPARAM lParam)
{
	if (m_visbleCircleLayerID > 0)
	{
		m_map.GetShapefile(m_visbleCircleLayerID).EditClear();
	}

	if (m_notVisibleCircleLayerID > 0)
	{
		m_map.GetShapefile(m_notVisibleCircleLayerID).EditClear();
	}

	m_map.Redraw();

	return 0;
}

//ʵʱÏÔʾ¿ÉÊÓÇøÓò
afx_msg LRESULT CGISDlg::OnShowAreaVisible(WPARAM wParam, LPARAM lParam)
{
	if (m_visiRealCircleLayerID < 0)
	{
		m_gisManager->CreateEmptyAreaShapfile(m_visiRealCircleLayerID,RGB(0,255,0),RGB(0,255,0),40); //ÂÌÉ«
	}

	for (int i=0;i <= int(wParam);i++)
	{
		m_gisManager->AddOnePoint2Shapfile(m_visiRealCircleLayerID,2,g_structPointVisiReal[i].lon,g_structPointVisiReal[i].lat);
	}

	//ÇøÓòÃæ»ýΪÁãʱ£¬Çå³ý¸ÃÇøÓòÏÔʾ
	if (0 == m_map.GetShapefile(m_visiRealCircleLayerID).GetShape(0).GetArea())
	{
		m_map.GetShapefile(m_visiRealCircleLayerID).EditClear();
	}

	/*double _uavlon,_uavlat;
	CalculatePtCoordinate(_uavlon, _uavlat, m_dlgLightRegion.m_dRealTime_GCSlon, m_dlgLightRegion.m_dRealTime_GCSlat, m_dlgLightRegion.m_dRealTime_AngToGCS, m_dlgLightRegion.m_dRealTime_DisToGCS, 3);

	if (m_RealCircleLayerID < 0)
	{
		m_gisManager->CreateEmptyAreaShapfile(m_RealCircleLayerID,RGB(0,0,255),RGB(0,0,255),40);
	}

	double ptLon, ptLat;
	for (int i = 0; i<=360;i++)
	{
		CalculatePtCoordinate(ptLon, ptLat, _uavlon, _uavlat, i, 2800, 3);

		m_gisManager->AddOnePoint2Shapfile(m_RealCircleLayerID,2,ptLon, ptLat);
	}*/

	m_map.Redraw();

	return 0;
}

//ʵʱÏÔʾ²»¿ÉÊÓÇøÓò
afx_msg LRESULT CGISDlg::OnShowAreaNotVisible(WPARAM wParam, LPARAM lParam)
{
	if (m_notVisiRealCircleLayerID < 0)
	{
		m_gisManager->CreateEmptyAreaShapfile(m_notVisiRealCircleLayerID,RGB(255,0,0),RGB(255,0,0),40); //ºìÉ«
	}

	for (int i=0;i <= int(wParam);i++)
	{
		m_gisManager->AddOnePoint2Shapfile(m_notVisiRealCircleLayerID,2,g_structPointNotVisiReal[i].lon,g_structPointNotVisiReal[i].lat);
	}

	//ÇøÓòÃæ»ýΪÁãʱ£¬Çå³ý¸ÃÇøÓòÏÔʾ
	if (0 == m_map.GetShapefile(m_notVisiRealCircleLayerID).GetShape(0).GetArea())
	{
		m_map.GetShapefile(m_notVisiRealCircleLayerID).EditClear();
	}

	m_map.Redraw();

	return 0;
}

//Çå³ýÊµÊ±ÇøÓò
afx_msg LRESULT CGISDlg::OnShowClearArea(WPARAM wParam, LPARAM lParam)
{
	if (m_visiRealCircleLayerID > 0)
	{
		m_map.GetShapefile(m_visiRealCircleLayerID).EditClear();
	}

	if (m_notVisiRealCircleLayerID > 0)
	{
		m_map.GetShapefile(m_notVisiRealCircleLayerID).EditClear();
	}

	/*if (m_RealCircleLayerID > 0)
	{
		m_map.GetShapefile(m_RealCircleLayerID).EditClear();
	}*/

	m_map.Redraw();

	return 0;
}

//ɾ³ýͨÊӵȸßÏßͼ²ã
afx_msg LRESULT CGISDlg::OnDelLineLayer(WPARAM wParam, LPARAM lParam)
{
	for (int i=0;i<20;i++)
	{
		if (m_longContourLineID[i] > 0)
		{
			m_map.GetShapefile(m_longContourLineID[i]).EditClear();
		}

		m_gisManager->CreateEmptyLineShapfile(m_longContourLineID[i],RGB(0,255,0),1.5); //ÂÌÉ«

		if (m_longContourTextID[i] != 0)
		{
			ClearPointShape(m_longContourTextID[i]);
			m_longContourTextID[i] = 0;
		}
	}

	m_map.Redraw();

	return 0;
}

//Ìí¼Óµãµ½Í¨ÊӵȸßÏßͼ²ã
afx_msg LRESULT CGISDlg::OnAddLineLayer(WPARAM wParam, LPARAM lParam)
{
	structPoint *_structPoint = (structPoint*)wParam;

	m_gisManager->AddOnePoint2Shapfile(m_longContourLineID[(int)lParam],1,_structPoint->lon,_structPoint->lat);

	//±ê»æ¸ß¶È
	if (m_longContourTextID[(int)lParam] == 0)
	{
		//±ê×¢
		CString str;
		str.Format(_T("%dm"), (int)lParam * 500);

		//´´½¨µãͼ²ã
		CreateEmptyShapfile(m_longContourTextID[(int)lParam], 0, RGB(255,0,0)); //ºìÉ«

		//Label¼¯ºÏ
		CLabels labesPtr;
		labesPtr = (m_map.GetShapefile(m_longContourTextID[(int)lParam])).GetLabels();

		CLabelCategory labelCategory = labesPtr.AddCategory(_T("ºìÉ«"));
		labelCategory.SetFontColor(RGB(255,0,0));
		labelCategory.SetAlignment(1);
		labelCategory.SetFontBold(TRUE);
		labelCategory.SetFontName(_T("ËÎÌå"));
		labelCategory.SetFontSize(11);

		labesPtr.AddLabel(str, _structPoint->lon, _structPoint->lat + 0.0005, 0, 0);
	}

	m_map.Redraw();

	return 0;
}

//¿ÉÊÓÓò·ÖÎöµ½GIS¶Ô»°¿òµÄÏûÏ¢ÏìÓ¦º¯Êý
afx_msg LRESULT CGISDlg::OnSendRegionToGis(WPARAM wParam, LPARAM lParam)
{
	if (1 == (int)wParam)
	{
		g_bSelectDropPoint = true;

		//ÉèÖÃÊó±êΪ¡°Ñ¡Ôñ¡±Ñùʽ
		m_map.SetCursorMode(3);
	}
	else if (2 == (int)wParam)
	{
		if (m_longSelectLineID > 0)
		{
			m_map.GetShapefile(m_longSelectLineID).EditClear();
		}

		if (m_longLabelPlotID != 0)
		{
			ClearPointShape(m_longLabelPlotID);
			m_longLabelPlotID = 0;
		}

		m_map.Redraw();
	}
	else if (3 == (int)wParam)
	{
		structPoint *_structPoint = (structPoint*)lParam;

		if (m_longSelectLineID > 0)
		{
			m_map.GetShapefile(m_longSelectLineID).EditClear();
		}

		m_gisManager->CreateEmptyLineShapfile(m_longSelectLineID,RGB(0,255,0),2);
		m_gisManager->AddOnePoint2Shapfile(m_longSelectLineID,1,m_dlgLightRegion.m_dGroundLon,m_dlgLightRegion.m_dGroundLat);
		m_gisManager->AddOnePoint2Shapfile(m_longSelectLineID,1,_structPoint->lon,_structPoint->lat);

		double _distance = 0.0, _angle = 0.0;
		CalculateTwoPtsDistanceAzimuth(_distance, _angle, m_dlgLightRegion.m_dGroundLon,m_dlgLightRegion.m_dGroundLat,_structPoint->lon,_structPoint->lat, 3);

		CString str;
		str.Format(_T("D:%.1fkm  A:%.1f¡ã"), _distance/1000, _angle);

		if (m_longLabelPlotID != 0)
		{
			ClearPointShape(m_longLabelPlotID);
			m_longLabelPlotID = 0;
		}
		//±ê×¢¾àÀëºÍ·½Î»
		AddPointShapeLayer(m_longLabelPlotID,_structPoint->lon,_structPoint->lat, str, _T("ºìÉ«"), RGB(255,0,0));
	}

	return 0;
}

//±ê»æº½ÏßÉϵĵã
afx_msg LRESULT CGISDlg::OnDrawLinePoint(WPARAM wParam, LPARAM lParam)
{
	if (m_longLinePointID > 0)
	{
		ClearPointShape(m_longLinePointID);

		m_longLinePointID = 0;
	}

	if (1 == (int)lParam)
	{
		structPoint *_structPoint = (structPoint*)wParam;

		//»ùÓÚµãͼ²ã½øÐбê×¢
		AddPointShapeLayer(m_longLinePointID, _structPoint->lon, _structPoint->lat, _T("Pt"), _T("ºìÉ«"), RGB(255,0,0));
	}

	return 0;
}

//ÏÔʾʵʱÅöײ¼ì²âÇøÓò
afx_msg LRESULT CGISDlg::OnShowCrashArea(WPARAM wParam, LPARAM lParam)
{
	if (1 == (int)wParam)
	{
		if (m_crashAreaLayerID > 0)
		{
			m_map.GetShapefile(m_crashAreaLayerID).EditClear();
		}

		m_gisManager->CreateEmptyAreaShapfile(m_crashAreaLayerID,RGB(0,255,0),RGB(0,255,0),40); //ÂÌÉ«

		for (int i=0;i < 360;i++)
		{
			m_gisManager->AddOnePoint2Shapfile(m_crashAreaLayerID,2,g_structPointCrashReal[i].lon,g_structPointCrashReal[i].lat);
		}

		//ÇøÓòÃæ»ýΪÁãʱ£¬Çå³ý¸ÃÇøÓòÏÔʾ
		if (0 == m_map.GetShapefile(m_crashAreaLayerID).GetShape(0).GetArea())
		{
			m_map.GetShapefile(m_crashAreaLayerID).EditClear();
		}

		m_map.Redraw();
	}
	else if (0 == (int)wParam)
	{
		if (m_crashAreaLayerID > 0)
		{
			m_map.GetShapefile(m_crashAreaLayerID).EditClear();
		}

		m_map.Redraw();
	}

	return 0;
}

//»æÖÆ×÷Ó÷¶Î§
afx_msg LRESULT CGISDlg::OnSendDrawFight(WPARAM wParam, LPARAM lParam)
{
	if (m_fightRegionLayerID > 0)
	{
		m_map.GetShapefile(m_fightRegionLayerID).EditClear();

		m_map.Redraw();
	}

	if (0 == (int)lParam)
	{
		return 0;
	}

	m_gisManager->CreateEmptyAreaShapfile(m_fightRegionLayerID,RGB(0,255,0),RGB(0,255,0),20);

	structPoint *_structPoint = (structPoint*)wParam;

	double ptLon,ptLat;
	for (int i=0;i<=360;i++)
	{
		CalculatePtCoordinate(ptLon, ptLat, _structPoint->lon, _structPoint->lat, i, (int)lParam, 3);

		m_gisManager->AddOnePoint2Shapfile(m_fightRegionLayerID,2,ptLon, ptLat);
	}

	m_map.Redraw();

	return 0;
}

//»æÖƸ߳ÌÇøÓò
afx_msg LRESULT CGISDlg::OnSendDrawDemRegion(WPARAM wParam, LPARAM lParam)
{
	if (m_DemRegionLayerID[(int)lParam] > 0)
	{
		m_map.GetShapefile(m_DemRegionLayerID[(int)lParam]).EditClear();

		m_DemRegionLayerID[(int)lParam] = -1;

		m_map.Redraw();
	}
	else
	{
		m_gisManager->CreateEmptyAreaShapfile(m_DemRegionLayerID[(int)lParam],RGB(0,0,255),RGB(0,0,255),20);

		structPoint *_structPoint = (structPoint*)wParam;

		m_gisManager->AddOnePoint2Shapfile(m_DemRegionLayerID[(int)lParam],2,_structPoint->lon, _structPoint->lat);
		m_gisManager->AddOnePoint2Shapfile(m_DemRegionLayerID[(int)lParam],2,_structPoint->lon + 1, _structPoint->lat);
		m_gisManager->AddOnePoint2Shapfile(m_DemRegionLayerID[(int)lParam],2,_structPoint->lon + 1, _structPoint->lat+1);
		m_gisManager->AddOnePoint2Shapfile(m_DemRegionLayerID[(int)lParam],2,_structPoint->lon, _structPoint->lat+1);
		m_gisManager->AddOnePoint2Shapfile(m_DemRegionLayerID[(int)lParam],2,_structPoint->lon, _structPoint->lat);

		m_map.Redraw();
	}

	return 0;
}

//ÔÚÏßµØÍ¼¶¨Î»
afx_msg LRESULT CGISDlg::OnZoomToLocation(WPARAM wParam, LPARAM lParam)
{
	//double lon = (double)wParam/1000000;
	//double lat = (double)lParam/1000000;
	double* lon = (double*)wParam;
	double* lat = (double*)lParam;
	ZoomToLocation(*lon,*lat);
	return 0;
}

// ÓÒ¼ü²Ëµ¥-¸ß³Ì·ÖÎö-¸ß³Ì·ÖÎö
void CGISDlg::OnMenuLightRegion()
{
	/*if (m_dlgLightRegion.GetSafeHwnd())
	{
		m_dlgLightRegion.ShowWindow(TRUE);
	}*/
	if(!m_bHaveAddMap){
		AfxMessageBox( _T( "ÇëÏȼÓÔØµØÍ¼£¡"));
		return;
	}
	g_bDemAnalysising = true;
	g_iDemPointNum = 0;
}

//¹Ø±Õ¸ß³Ì·ÖÎö¶Ô»°¿òʱ
afx_msg LRESULT CGISDlg::OnSendCloseDemAlt(WPARAM wParam, LPARAM lParam)
{
	//Çå³ý¸ß³Ì·ÖÎöͼ²ã
	for (int i=0;i<g_iDemAltPtNum;i++)
	{
		m_map.RemoveLayer(g_lDemAltLayerID[i]);
		if (g_lDemAltDisLayerID[i] > 0)
		{
			//Çå³ý±ê»æµÄµãʸÁ¿Í¼²ã
			ClearPointShape(g_lDemAltDisLayerID[i]);
			g_lDemAltDisLayerID[i] = -1;
		}

		if (g_lDemPtNumLayerID[i] > 0)
		{
			//Çå³ý±ê»æµÄµãʸÁ¿Í¼²ã
			ClearPointShape(g_lDemPtNumLayerID[i]);
			g_lDemPtNumLayerID[i] = -1;
		}
	}

	return 0;
}

//º½µãÇÐÈë
void CGISDlg::OnMenuEntryPoint()
{
	m_struMapOut.cmd = MapCmd_EntryPoint;
	::SendMessage(GetParent()->GetSafeHwnd(),MESSAGE_B8MAP,(int)(&m_struMapOut),0);
}

//±ê»æ¸ß³ÌÇøÓò
void CGISDlg::OnMenuPlotdemArea()
{
	if (m_dlgLightRegion.GetSafeHwnd())
	{
		m_dlgLightRegion.OnBnClickedButtonGetDemRegion();
	}

	m_bPlotDemArea = !m_bPlotDemArea;
}

//¹¦ÄÜ£º¸Ä±äCursorMode
afx_msg LRESULT CGISDlg::OnSetMapCursorMode(WPARAM wParam, LPARAM lParam)
{
	m_map.SetCursorMode((long)wParam);
	return 0;
}

//¹¦ÄÜ£ºÏÔʾ»òÒþ²Ø±ê¼Çµã
afx_msg LRESULT CGISDlg::OnDrawMarker(WPARAM wParam, LPARAM lParam)
{
	if (int(lParam) == 1) //Òþ²Ø±ê¼Çµã
	{
		if (g_lMarkerLayerID[(int)wParam] >= 0)
		{
			ClearPointShape(g_lMarkerLayerID[(int)wParam]);
			g_lMarkerLayerID[(int)wParam] = -1;
		}

		g_bMarkerPlot[(int)wParam] = false;
	}
	else //ÏÔʾ±ê¼Çµã
	{
		if (g_lMarkerLayerID[(int)wParam] >= 0)
		{
			ClearPointShape(g_lMarkerLayerID[(int)wParam]);
			g_lMarkerLayerID[(int)wParam] = -1;
		}

		//»ùÓÚµãͼ²ã½øÐбê×¢
		AddPointShapeLayer(g_lMarkerLayerID[(int)wParam], g_iMarkerLon[(int)wParam], g_iMarkerLat[(int)wParam], g_iMarkerName[(int)wParam], _T(""), RGB(255,0,0));

		g_bMarkerPlot[(int)wParam] = true;
	}

	return 0;
}

//Çå³ýµØÃæÕ¾±ê»æ
void CGISDlg::OnMenuClearGCS()
{
	if (m_gcsPtShpLayerID != -1)
	{
		ClearPointShape(m_gcsPtShpLayerID);
		m_gcsPtShpLayerID = -1;
	}
}

//ÊÇ·ñÏÔʾADS·É»úÐÅÏ¢
void CGISDlg::OnMenuADSB()
{
	m_bEnableShowADSB = !m_bEnableShowADSB;
}

//»æÖÆÎÞÈË»ú
LRESULT CGISDlg::OnTimerDrawUAV(WPARAM wParam, LPARAM lParam)
{
	//δ¼ÓÔØµØÍ¼£¬·µ»Ø
	if (!m_bHaveAddMap)
	{
		return 0;
	}

	if (!m_bEnableShowADSB)
	{
		//Çå³ýËùÓÐADS·É»úµÄ±ê»æÍ¼²ã
		for(int i=0;i<MAX_PLANE_NUM_ADS;i++)
		{
			if (m_UAVFlyTrackLayerID_ADS[i] != -1)
			{
				//m_map.ClearLabels(m_UAVFlyTrackLayerID_ADS[i]);
				//m_map.ClearDrawing(m_UAVFlyTrackLayerID_ADS[i]);
				m_map.RemoveLayer(m_UAVFlyTrackLayerID_ADS[i]);
				m_UAVFlyTrackLayerID_ADS[i] = -1;
			}
		}

		return 0;
	}

	if (m_iTotalADSnum <= 0)
	{
		return 0;
	}

	if (m_iCurrentADSid < (m_iTotalADSnum - 1))
	{
		m_iCurrentADSid++;
	}
	else
	{
		m_iCurrentADSid = 0;
	}

	static int _ADSidRecord = 0;

	_ADSidRecord = m_iCurrentADSid;

	//whileÑ­»·£¬Ö±ÖÁij¸öADS·É»ú±ê»æ×´Ì¬ÎªÒª±ê»æ£¬½áÊøÑ­»·
	while (m_bWithin100km_ADS[m_iCurrentADSid] == false)
	{
		//Çå³ýADS·É»ú»úÌå±ê»æ
		if (m_UAVFlyTrackLayerID_ADS[m_iCurrentADSid] != -1)
		{
			//m_map.ClearLabels(m_UAVFlyTrackLayerID_ADS[i]);
			//m_map.ClearDrawing(m_UAVFlyTrackLayerID_ADS[i]);
			m_map.RemoveLayer(m_UAVFlyTrackLayerID_ADS[m_iCurrentADSid]);
			m_UAVFlyTrackLayerID_ADS[m_iCurrentADSid] = -1;
		}

		TRACE("Remove: %d/%d\n", m_iCurrentADSid, _ADSidRecord);

		if (m_iCurrentADSid < (m_iTotalADSnum - 1))
		{
			m_iCurrentADSid++;
		}
		else
		{
			m_iCurrentADSid = 0;
		}

		//ÈôÔÙ´ÎÑ­»·µ½×ÔÉíʱ£¬½áÊøÑ­»·
		if (m_iCurrentADSid == _ADSidRecord)
		{
			TRACE("return");
			return 0;
		}
	}

	TRACE("ID: %d/%d\n", m_iCurrentADSid, m_iTotalADSnum);

	if (m_UAVFlyTrackLayerID_ADS[m_iCurrentADSid] != -1) //ÒѾ­±ê»æÁË»úÌå
	{
		//m_map.ClearLabels(m_UAVFlyTrackLayerID_ADS[i]);
		//m_map.ClearDrawing(m_UAVFlyTrackLayerID_ADS[i]);
		m_map.RemoveLayer(m_UAVFlyTrackLayerID_ADS[m_iCurrentADSid]);
		m_UAVFlyTrackLayerID_ADS[m_iCurrentADSid] = -1;
	}

	//´´½¨ÎÞÈË»ú»úÌå±ê»æÍ¼²ã
	CreateEmptyShapfile(m_UAVFlyTrackLayerID_ADS[m_iCurrentADSid], 2, RGB(0,255,0));

	//¼ÆËã±ê»æÎÞÈË»úÃæÍ¼²ãµÄµãÊý×é
	CalculateUAVPolygonCoordinate_ADS(m_dLon_ADS[m_iCurrentADSid], m_dLat_ADS[m_iCurrentADSid], m_dYaw_ADS[m_iCurrentADSid]);
	
	//»æÖÆÐµÄÎÞÈË»úshp
	for (int i=0; i<m_ptNum; i++)
	{
		AddOnePoint2Shapfile(m_UAVFlyTrackLayerID_ADS[m_iCurrentADSid], 2, m_ppUavPtArray_ADS[i][0], m_ppUavPtArray_ADS[i][1]);
	}

	//Label¼¯ºÏ
	CLabels labesPtr;
	labesPtr = (m_map.GetShapefile(m_UAVFlyTrackLayerID_ADS[m_iCurrentADSid])).GetLabels();

	//ÉèÖñêע̫½üʱÊÇ·ñ×Ô¶¯Òþ²Ø
	labesPtr.SetAvoidCollisions(FALSE);

	CLabelCategory labelCategory = labesPtr.AddCategory(m_strColor_ADS[m_iCurrentADSid]);
	labelCategory.SetFontColor(m_fontColor_ADS[m_iCurrentADSid]);
	labelCategory.SetAlignment(1);
	//labelCategory.SetFontBold(TRUE);
	labelCategory.SetFontName(LPCTSTR("΢ÈíÑźÚ"));
	labelCategory.SetFontSize(8);

	//Ôö¼ÓLabels
	labesPtr.AddLabel((LPCTSTR)m_strPlaneName_ADS[m_iCurrentADSid], m_dLon_ADS[m_iCurrentADSid], m_dLat_ADS[m_iCurrentADSid], 0, 0);

	//ÖØ»æ
	m_map.Redraw();
}


/*************************************by wu 2023.10.10**********************************************/
//¹¦ÄÜ£º±ê×¢¿ÕͶµã
LRESULT CGISDlg::OnDrawKTPoint(WPARAM wParam, LPARAM lParam)
{
	//ûÓмÓÔØµØÍ¼£¬·µ»Ø
	if (!m_bHaveAddMap)
	{
		return 0;
	}

	double* lon = (double*) wParam;
	double* lat = (double*) lParam;

	CString strLon,strLat;
	strLon.Format(_T("%.7f"),*lon);
	strLat.Format(_T("%.7f"),*lat);

	AddPointShapeLayer(m_KTPtShpLayerID, *lon, *lat, (strLon+", "+strLat), _T(""), RGB(255,0,0));

	return 0;
}

//¹¦ÄÜ£ºÇå³ý¿ÕͶµã
LRESULT CGISDlg::OnClearKTPoint(WPARAM wParam, LPARAM lParam)
{
	ClearPointShape(m_KTPtShpLayerID);
	m_KTPtShpLayerID = -1;

	return 0;
}

//¹¦ÄÜ£ºÏÔʾ¿ÕͶº½Ïß
LRESULT CGISDlg::OnShowKTLine(WPARAM wParam, LPARAM lParam)
{
	CString path = (char*)wParam;
	OnShowGivenLine(path);

	return 0;
}

//¹¦ÄÜ£ºÏÔʾ/¹Ø±Õ¿ÕͶº½Ïß
LRESULT CGISDlg::OnShowKTLine6(WPARAM wParam, LPARAM lParam)
{
	OnShowLine6();

	return 0;
}

//¹¦ÄÜ£º×°¶©¿ÕͶº½Ïß
LRESULT CGISDlg::OnBindKTLine(WPARAM wParam, LPARAM lParam)                                  //·¢Ë͸øÖ÷³ÌÐò×°¶©º½Ïß2
{
	// TODO: ÔÚ´ËÌí¼ÓÃüÁî´¦Àí³ÌÐò´úÂë

	m_struMapOut.cmd=MapCmd_BindLine;
	m_struMapOut.ID=6;
	::SendMessage(GetParent()->GetSafeHwnd(),MESSAGE_B8MAP,(int)(&m_struMapOut),0);
	//::PostMessage(m_MsgHwnd,m_LineLoadMsgID,2,0);  
	return 0;
}

//¹¦ÄÜ£º×°¶©Ó¦¼±µã
LRESULT CGISDlg::OnBindEPPoint(WPARAM wParam, LPARAM lParam)                                  //·¢Ë͸øÖ÷³ÌÐò×°¶©º½Ïß2
{
	// TODO: ÔÚ´ËÌí¼ÓÃüÁî´¦Àí³ÌÐò´úÂë

	m_struMapOut.cmd=MapCmd_BindLine;
	m_struMapOut.ID=15;
	::SendMessage(GetParent()->GetSafeHwnd(),MESSAGE_B8MAP,(int)(&m_struMapOut),0);
	//::PostMessage(m_MsgHwnd,m_LineLoadMsgID,2,0);  
	return 0;
}

/* ¹¦ÄÜ£º»ñÈ¡ÓзçÏյĵØÐεã
 * ²ÎÊý£ºalt[in] ¸ß¶ÈãÐÖµ
 *		vec_alt[out] ³¬³öãÐÖµµÄ¸ß¶ÈÖµ
		vec_lon[out] ¾­¶È
		vec_lat[out] γ¶È
*/
void CGISDlg::GetDangerousTerrainPoints(double pts[][2],int pointNum,long alt,vector<double>& vec_alt,vector<double>& vec_lon,vector<double>& vec_lat)
{
	//»ñÈ¡µØÐÎÕ¤¸ñÊý
	mapWindow::IGridHeaderPtr gridHeaderPtr = m_mapElevation.m_grid->GetHeader();
	int n_gridrow = gridHeaderPtr->NumberRows;
	int n_gridcol = gridHeaderPtr->NumberCols;

	//½«¾­Î³¶È×ø±êת»¯ÎªÕ¤¸ñÐÐÁкÅ
	vector<int> pts_row,pts_col;
	TransformToXY(pts,pointNum,pts_row,pts_col);
	//ÏßÕ¤¸ñ»¯
	VectorToRaster vectorToRaster;
	set<vector<int> > resultSet = vectorToRaster.GetRasterLineEx(pts_row,pts_col,n_gridrow-1,n_gridcol-1,1);

	double lat,lon;
	//ÌáȡΣÏÕµã
	for (auto it = resultSet.begin();it!=resultSet.end();it++)
	{
		vector<int> pt = *it;
		int altValue = m_mapElevation.m_grid->GetValue(pt.at(1),pt.at(0));
		if (altValue>=alt) //ΣÏյ㱣´æ
		{
			vec_alt.push_back(altValue);
			//ת»¯Îª¾­Î³¶È
			m_mapElevation.m_grid->CellToProj(pt.at(1),pt.at(0),&lon,&lat);
			vec_lon.push_back(lon);
			vec_lat.push_back(lat);
			//int i = 0;
		}
	}
}

//±ê»æÎ£ÏÕµØÐεã
int CGISDlg::DrawDangerousTerrainPoints(double pts[][2],int pointNum,long alt)
{
	/*
	double lon[] = {119.711715,119.738307,119.738553,119.711715};
	double lat[] = {32.201856,32.239036,32.178465,32.141285};
	double pts[6][2];
	long shpPointLayerID = -1;
	long shpLineLayerID = -1;
	//vector<double> vec_lon,vec_lat;
	for(int i=0;i<4;i++)
	{
		pts[i][0] = lon[i];
		pts[i][1] = lat[i];
	}
	*/

	if(!m_mapElevation.m_isAdd)
	{
		//BCGPMessageBox("δÌí¼Ó¸ß³ÌÐÅÏ¢£¬ÎÞ·¨Åжϵ±Ç°»ØÊÕº½ÏßÊÇ·ñ°²È«!");                       
		return 0;
	}

	vector<double> vec_alt;
	vector<double> vec_lon;
	vector<double> vec_lat;
	GetDangerousTerrainPoints(pts,pointNum,alt,vec_alt, vec_lon, vec_lat);

	if (vec_alt.size()==0)
	{
		return -1;
	}

	//н¨ÁÙʱ±ê»æÍ¼²ã
	if (m_tempTerrainPointsLayerID==-1)
	{
		m_tempTerrainPointsLayerID = m_map.NewDrawing(1);
	}
	//m_map.SetShapePointType(m_tempLayerID,0,mapWindow::tkPointType::ptTriangleUp);
	m_map.SetShapeLayerPointType(m_tempTerrainPointsLayerID,mapWindow::tkPointType::ptTriangleUp);
	CLabels labels = m_map.GetDrawingLabels(m_tempTerrainPointsLayerID);
	//labels.SetAutoOffset(true);
	labels.SetFontColor(RGB(0,255,0));
	labels.SetFontSize(8);
	labels.SetFontBold(true);
	labels.SetOffsetY(-10);

	for (int i=0;i<vec_lon.size();i++)
	{
		/*
		std::stringstream stream;
		stream << std::setprecision(2) << vec_alt.at(i);
		std::string alt = stream.str();
		labels.AddLabel(alt.c_str(),vec_lon.at(i),vec_lat.at(i),0,0);
		*/
		m_map.DrawPointEx(m_tempTerrainPointsLayerID,vec_lon.at(i),vec_lat.at(i),8,RGB(255,0,0));
		//m_map.DrawCircleEx(m_tempLayerID,vec_lon.at(i),vec_lat.at(i),3,RGB(255,0,0),true);
	}
	m_map.Redraw();

	return 1;
}

//Çå³ýΣÏÕµØÐεã
void CGISDlg::ClearDangerousTerrainPoints()
{
	if (m_tempTerrainPointsLayerID!=-1)
	{
		m_map.ClearDrawing(m_tempTerrainPointsLayerID);
		m_tempTerrainPointsLayerID = -1;
		m_map.Redraw();
	}
}

// »æÖÆÁÙʱÏß
void CGISDlg::DrawTempLine(double m_Pts[][2],int pointNum)
{
	//int pointNum = 6;
	PtStruct pts[128];
	PtStruct linePts[128];
	for(int i=0;i<pointNum;i++)
	{
		pts[i].dX = m_Pts[i][0];
		pts[i].dY = m_Pts[i][1];

		linePts[i].dX = m_Pts[i][0];
		linePts[i].dY = m_Pts[i][1];
	}
	linePts[pointNum].dX = m_Pts[0][0];
	linePts[pointNum].dY = m_Pts[0][1];

	//Ä¿±ê±ê»æSHPͼ²ã
	if(m_tempshpPointLayerID == -1)
	{
		CreateEmptyShapfile(m_tempshpPointLayerID,0,LineClr[10]);
	}
	AddPoints2PointShapfile(m_tempshpPointLayerID,pts,pointNum);
	
	//Ä¿±ê±ê»æSHPͼ²ã
	if(m_tempshpLineLayerID == -1)
	{
		CreateEmptyShapfile(m_tempshpLineLayerID,1,LineClr[10]);
	}
	AddPoints2LineShapfile(m_tempshpLineLayerID,linePts,pointNum+1);

	//Label¼¯ºÏ
	CLabels labesPtr;
	labesPtr = m_map.GetShapefile(m_tempshpLineLayerID).GetLabels();

	CLabelCategory labelCategory = labesPtr.AddCategory(_T("ºìÉ«"));
	labelCategory.SetFontColor(/*RGB(255,0,0)*/LineClr[10]);
	labelCategory.SetAlignment(1);
	labelCategory.SetFontBold(TRUE);
	labelCategory.SetFontName(LPCTSTR("ºÚÌå"));
	labelCategory.SetFontSize(12);
	labesPtr.SetAvoidCollisions(FALSE);

	CString strText = _T("");
	//±ê»æº½µãµÄÃû³Æ
	for (long i=0; i<pointNum; i++)
	{
		//±ê×¢ÐÅÏ¢
		//strText.Format(_T("%d-%d"), lineData.lineID,  lineData.pts[i].nPt);
		strText.Format(_T("%d"), i+1);
		//Ôö¼ÓLabels
		labesPtr.AddLabel((LPCTSTR)strText, pts[i].dX, pts[i].dY, 0, 0);
	}	

	m_map.Redraw();
}

//»æÖÆÑ¡ÖиßÁÁͼ²ã
void CGISDlg::DrawHighLightLine(const PtStruct *pts, const int ptNum)
{
	if (m_highLightLineLayerID==-1)
	{
		//Ä¿±ê±ê»æSHPͼ²ã
		mapWindow::IShapefilePtr targetPtShape;
		targetPtShape.CreateInstance("MapWinGIS.Shapefile");	

		targetPtShape->CreateNewWithShapeID(_T(""), mapWindow::SHP_POLYLINE);
		//Ä¿±ê±ê»æÍ¼²ã¼ÓÈëµØÍ¼ÖÐ
		m_highLightLineLayerID = m_map.AddLayer(targetPtShape, true);

		mapWindow::IShapeDrawingOptionsPtr  pShapeDrawingOption;
		pShapeDrawingOption.CreateInstance("MapWinGIS.ShapeDrawingOptions");

		pShapeDrawingOption->LineColor = RGB(242,155,41);
		pShapeDrawingOption->LineWidth = 2;

		(m_map.GetShapefile(m_highLightLineLayerID)).SetDefaultDrawingOptions(pShapeDrawingOption);
	}

	AddPoints2LineShapfile(m_highLightLineLayerID,pts,ptNum);

	m_map.Redraw();
}

//Çå³ýÁÙʱÏß
void CGISDlg::ClearTempLine()
{
	if (m_tempshpPointLayerID!=-1)
	{
		m_map.RemoveLayer(m_tempshpPointLayerID);
		m_tempshpPointLayerID = -1;
		m_map.GetShapefile(m_tempshpPointLayerID).Close();
	}

	if(m_tempshpLineLayerID!=-1)
	{
		m_map.RemoveLayer(m_tempshpLineLayerID);
		m_tempshpLineLayerID = -1;
		m_map.GetShapefile(m_tempshpLineLayerID).Close();
	}
}

//Çå³ý¸ßÁÁÏß
void CGISDlg::ClearHighLightLine()
{
	if (m_highLightLineLayerID!=-1)
	{
		m_map.RemoveLayer(m_highLightLineLayerID);
		m_highLightLineLayerID = -1;
		m_map.GetShapefile(m_highLightLineLayerID).Close();
	}
}

//ת»¯ÎªGrid×ø±ê
void CGISDlg::TransformToXY(double pts[][2],int pointNum,vector<int>& ptsRow,vector<int>& ptsCol)
{
	mapWindow::IGridHeaderPtr gridHeaderPtr = m_mapElevation.m_grid->GetHeader();
	int n_gridrow = gridHeaderPtr->NumberRows;
	int n_gridcol = gridHeaderPtr->NumberCols;

	long col1[1],col2[1],col3[1],col4[1];
	long row1[1],row2[1],row3[1],row4[1];
	long col,row;
	for (int i=0;i<pointNum;i++)
	{
		m_mapElevation.m_grid->ProjToCell(pts[i][0],pts[i][1],&col,&row);
		ptsRow.push_back(row);
		ptsCol.push_back(col);
		i;
	}
	
}

//ÌáÈ¡×ø±êµã¼¯
void CGISDlg::TransformToVectorPoints(DrawLineDataStruct lineDataGroup,vector<double>& lineX,vector<double>& lineY)
{
	
	for (int i=0;i<lineDataGroup.linePointNum;i++)
	{
		lineX.push_back(lineDataGroup.linePts[i].dX);
		lineY.push_back(lineDataGroup.linePts[i].dY);
	}
}

//¼ô¶ÏÏß
void CGISDlg::AddPointInLine(int ptPos,double* pt,DrawLineDataStruct& editLineDataGroup)
{
	// ÐÞ¸ÄÏ߶νṹ
	int lineNum = editLineDataGroup.linePointNum;
	editLineDataGroup.linePointNum = editLineDataGroup.linePointNum + 1; 
	for (int i=lineNum;i>ptPos;i--)  //ÍùºóÒÆ¶¯Êý×éһλ
	{
		editLineDataGroup.linePts[i] = editLineDataGroup.linePts[i-1];
		editLineDataGroup.linePts[i].nPt = editLineDataGroup.linePts[i].nPt + 1; //Ð޸ĺ½µãºÅ
	}
	//Ð޸IJåÈëµãÊý¾Ý
	editLineDataGroup.linePts[ptPos].dX = pt[0];
	editLineDataGroup.linePts[ptPos].dY = pt[1];
	editLineDataGroup.linePts[ptPos].nPt = ptPos+1; //Ð޸ĺ½µãºÅ
	//ÖØÐÂÐÞ¶©Î²µãº½µãºÅ
	editLineDataGroup.linePts[editLineDataGroup.linePointNum-1].nPt = 1;
	//¸´ÖÆÆäËûÊôÐÔÐÅÏ¢
	editLineDataGroup.linePts[ptPos].nL = editLineDataGroup.lineID;
	editLineDataGroup.linePts[ptPos].nH = editLineDataGroup.linePts[ptPos-1].nH;

	//Ð޸ĵ㼯½á¹¹
	int ptNum = editLineDataGroup.pointNum;
	editLineDataGroup.pointNum = editLineDataGroup.pointNum + 1;
	for (int j=ptNum;j>ptPos;j--)  //ÒÆ¶¯µã¼¯Êý×é
	{
		editLineDataGroup.pts[j] = editLineDataGroup.pts[j-1];
		editLineDataGroup.pts[j].nPt = editLineDataGroup.pts[j].nPt + 1; //Ð޸ĺ½µãºÅ
	}
	//Ð޸IJåÈëµãÊý¾Ý
	editLineDataGroup.pts[ptPos].dX = pt[0];
	editLineDataGroup.pts[ptPos].dY = pt[1];
	editLineDataGroup.pts[ptPos].nPt = ptPos + 1; //Ð޸ĺ½µãºÅ
	//¸´ÖÆÆäËûÊôÐÔÐÅÏ¢
	editLineDataGroup.pts[ptPos].nL = editLineDataGroup.lineID;
	editLineDataGroup.pts[ptPos].nH = editLineDataGroup.pts[ptPos-1].nH;
}

//Êý×éÖÐɾ³ýµã
bool CGISDlg::RemovePointInLine(int ptPos,DrawLineDataStruct& backLineDataGroup)
{
	if (backLineDataGroup.pointNum<=2) //Ö±Ïß²»ÄÜÔÙɾ½Úµã
	{
		return false;
	}
	// ÐÞ¸ÄÏ߶νṹ
	int lineNum = backLineDataGroup.linePointNum;
	backLineDataGroup.linePointNum = backLineDataGroup.linePointNum - 1; 
	for (int i=ptPos;i<lineNum-2;i++)  //ÒÆ¶¯Ïß¶ÎÊý×é
	{
		backLineDataGroup.linePts[i] = backLineDataGroup.linePts[i+1];
		backLineDataGroup.linePts[i].nPt = backLineDataGroup.linePts[i].nPt -1; //Ð޸ĺ½µãºÅ
	}
	if (backLineDataGroup.linePointNum==3) //±ä³ÉÖ±Ïߣ¬²»ÓÃÁ¬½ÓÊ×βµã
	{
		backLineDataGroup.linePointNum = 2;
	}
	else //Ê×βµãÁ¬½Ó
	{
		if (backLineDataGroup.pts[lineNum-2].ch1!=2) //±ÕºÏº½Ïß
		{
			backLineDataGroup.linePts[backLineDataGroup.linePointNum-1] = backLineDataGroup.linePts[0];
		}
		
	}
	
	//Ð޸ĵ㼯½á¹¹
	int ptNum = backLineDataGroup.pointNum;
	backLineDataGroup.pointNum = backLineDataGroup.pointNum - 1;
	for (int j=ptPos;j<ptNum-1;j++)  //ÒÆ¶¯µã¼¯Êý×é
	{
		backLineDataGroup.pts[j] = backLineDataGroup.pts[j+1];
		backLineDataGroup.pts[j].nPt = backLineDataGroup.pts[j].nPt - 1; //Ð޸ĺ½µãºÅ
	}
	return true;
}

// ÊÇ·ñÑ¡ÖÐÏßÒªËØ,ÈôÑ¡Öзµ»Øº½Ïß±àºÅ£¬·ñÔò·µ»Ø-1
int CGISDlg::IsSelectLine(double* pt)
{
	float tolerance = 0.001;
	//ƽ°åģʽÔö´óÑ¡Öд¥·¢·¶Î§
	if (g_b981APad) 
	{
		tolerance = 0.003;
	}
	if (m_ShowedLineDataList.size()==0)
	{
		return false;
	}
	for(auto i=m_ShowedLineDataList.begin();i!=m_ShowedLineDataList.end();i++)
	{
		//cout<<"¼ü="<<i->first<<" Öµ="<<i->second<<endl;
		std::vector<double> lineX,lineY;
		DrawLineDataStruct lineData = i->second;
		TransformToVectorPoints(lineData,lineX,lineY);
		if(topologicalAnalysis.isPointInPolyLine(pt,lineX,lineY,tolerance))
		{
			return lineData.lineID;
		};
	}
	return -1;
}
/**************************************************************************************************/

//±à¼­º½Ïßʱ,ÏÔʾº½µãÉèÖöԻ°¿ò
void CGISDlg::ShowModifyPointDlg(int selectedPointID)
{
	if (!m_bEditLine)
	{
		return;
	}
	CModifyLinePointDlg dlg;
	dlg.m_editLineDataGroup = m_editLineDataGroup;
	dlg.SetSelectedPointID(selectedPointID);
	if (m_lineSelectedID!=11) //·Ç»ØÊÕº½Ïߣ¬Òþ²ØÉèÖÃÅÌÐýµã
	{
		dlg.SetCirclingPointRBTNVisible(false);
	}
	dlg.SetLonLat(m_editLineDataGroup.pts[selectedPointID].dX,m_editLineDataGroup.pts[selectedPointID].dY);
	if (circlingPointID == selectedPointID) //Ñ¡ÖÐÅÌÐýµã£¬ÉèÖð´Å¥Ñ¡ÖÐ
	{
		dlg.CheckedCirclingPoint();
	}
	if (dlg.DoModal() == IDOK)
	{
		double targetLat,targetLon;
		int pointID;
		dlg.GetLonLat(targetLon,targetLat,pointID);
		//bool bb = dlg.IsCirclingPoint();
		if (m_lineSelectedID==11) //»ØÊÕº½Ïß
		{
			if (circlingPointID == selectedPointID) //¶ÔÒѾ­ÊÇÅÌÐýµã½øÐÐÖØÐÂÉèÖÃ
			{
				if (!dlg.IsCirclingPoint())   //´æ´¢ÅÌÐýµã
				{
					circlingPointID = -1;
				}
			}
			if (dlg.IsCirclingPoint())   //´æ´¢ÅÌÐýµã
			{
				circlingPointID = selectedPointID;
			}
		}

		//Ð޸ĵã×ø±ê
		m_editLineDataGroup.pts[pointID-1].dX = targetLon;
		m_editLineDataGroup.pts[pointID-1].dY = targetLat;

		//ÐÞ¸ÄÏß×ø±ê
		m_editLineDataGroup.linePts[pointID-1].dX = targetLon;
		m_editLineDataGroup.linePts[pointID-1].dY = targetLat;
		if(pointID==m_editLineDataGroup.linePointNum-1 && m_editLineDataGroup.linePts[m_editLineDataGroup.linePointNum-1].ch1==2){	
			// Èç¹ûÐ޸ĵÄÊÇ×îºóÒ»¸öº½µãÇÒΪ²»±ÕºÏº½Ïß
			m_editLineDataGroup.linePts[pointID].dX = targetLon;
			m_editLineDataGroup.linePts[pointID].dY = targetLat;
		}
		if (pointID==1 && m_editLineDataGroup.linePts[m_editLineDataGroup.linePointNum-1].ch1==0)
		{	// Èç¹ûÐ޸ĵÄÊÇÊ׸öº½µãÇÒΪ±ÕºÏº½Ïß
			m_editLineDataGroup.linePts[m_editLineDataGroup.linePointNum-1].dX = targetLon;
			m_editLineDataGroup.linePts[m_editLineDataGroup.linePointNum-1].dY = targetLat;
		} //m_editLineDataGroup.linePts[0]->ch1==2 ²»±ÕºÏ 0->±ÕºÏ
		
		if (m_distLabelLayer!=-1)
		{
			m_map.ClearDrawing(m_distLabelLayer);//Çå³ý¾àÀëºÍ·½Î»½Ç±ê»æ
		}
		//Çå³ý±ê»æµÄº½Ïß
		ClearDrawedLine(m_editLineDataGroup.lineID-1);
		//±ê»æº½Ïß
		DrawFlyLine(m_editLineDataGroup);
	}
	else
	{
		//return;
	}
	return;
}

void CGISDlg::ShowModifyPointDlg()
{
	ShowModifyPointDlg(0);
}

//ÏÔʾ±£´æ±à¼­¶Ô»°¿ò
void CGISDlg::ShowEditSaveDlg()
{
	if (!m_bEditLine)
	{
		return;
	}
	CSaveLineEditSetting saveDlg;
	saveDlg.DoModal();
	int saveStatus = saveDlg.GetSaveStatus();  //-1Ϊ²»±£´æ£¬0Ϊ¼ÌÐø±à¼­£¬1Ϊ±£´æ
	if (saveStatus==-1)
	{
		//Çå³ý±ê»æµÄº½Ïß
		ClearDrawedLine(m_editLineDataGroup.lineID-1);
		//»Ö¸´Î´±à¼­×´Ì¬
		DrawFlyLine(m_ShowedLineDataList[m_lineSelectedID]);
		//Çå³ý¾àÀë±ê»æ
		m_map.ClearDrawing(m_distLabelLayer);

		m_bEditLine = false;
		m_bSelectFeatureFlag = false;
		m_lineSelectedID = -1;
		return;
	}
	else if (saveStatus==0)
	{
		return;
	}

	//
	CString dirName = "";
	if (g_b981APad ||g_b981ADesktop)
	{
		switch (m_lineSelectedID)
		{
		case 1:
			dirName = "º½Ïß1\\";
			break;
		case 2:
			dirName = "º½Ïß2\\";
			break;
		case 3:
			dirName = "º½Ïß3\\";
			break;
		case 4:
			dirName = "º½Ïß4\\";
			break;
		case 5:
			dirName = "º½Ïß5\\";
			break;
		case 11:
			dirName = "Ó¦¼±º½Ïß\\";
			break;
		case 12:
			dirName = "µç×ÓΧÀ¸º½Ïß\\";
			break;
		case 13:
			dirName = "ԭ··µº½º½Ïß\\";
			break;
		case 14:
			dirName = "»ØÊÕº½Ïß\\";
			break;
		}
	}

	//ÖØÐ±£´æ»ØÊÕº½Ïß
	CString filename;
	CString strRouteFileDir = GetSoftwareCurrentDirectory() + _T("\\Route\\") + dirName;

	TCHAR s[10000];
	s[0]=0;
	CFileDialog dlg(FALSE, _T(".txt"), _T("*.txt"));
	dlg.m_ofn.lpstrTitle=_T("±£´æº½ÏßÎļþ");
	dlg.m_ofn.lpstrFile=s;
	dlg.m_ofn.nMaxFile=sizeof(s)/sizeof(TCHAR);

	TCHAR filter[500]=_T("º½ÏßÎļþ(*.txt)\0*.txt\0");
	dlg.m_ofn.lpstrFilter=filter;
	dlg.m_ofn.Flags|=OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY|OFN_CREATEPROMPT;
	dlg.m_ofn.lpstrInitialDir = strRouteFileDir;

	if (IDOK == dlg.DoModal())
	{
		filename = dlg.GetPathName();		
		//±£´æÎļþ
		FILE* fp = fopen(filename,"w");
		fprintf(fp,"%d, 0, %lf, %lf, %.2lf, 0, 00, 03\n", m_editLineDataGroup.lineID, 0.0, 0.0, 0.0);
		int n_linePts = m_editLineDataGroup.pointNum;
		for (int i=1;i<=n_linePts;i++)
		{
			PtStruct linePt = m_editLineDataGroup.pts[i-1];
			if (i<n_linePts-1)
			{
				if (circlingPointID==i-1) //ÅÌÐýµã
				{
					fprintf(fp,"%d, %d, %lf, %lf, %.2lf, 0, 01, 03\n", m_editLineDataGroup.lineID, i, linePt.dX, linePt.dY,linePt.nH);
				}
				else
				{
					fprintf(fp,"%d, %d, %lf, %lf, %.2lf, 0, 00, 03\n", m_editLineDataGroup.lineID, i, linePt.dX, linePt.dY,linePt.nH);
				}	
			}
			else if (i==n_linePts-1)
			{
				if (m_lineSelectedID==11 && g_b981CDesktop)  //»ØÊÕº½Ïß
				{
					fprintf(fp,"%d, %d, %lf, %lf, %.2lf, 0, 00, 07\n", m_editLineDataGroup.lineID,i,linePt.dX,linePt.dY,linePt.nH);
				}
				else
				{
					fprintf(fp,"%d, %d, %lf, %lf, %.2lf, 0, 00, 03\n", m_editLineDataGroup.lineID,i,linePt.dX,linePt.dY,linePt.nH);
				}

			}
			else if (i==n_linePts)
			{
				if (m_lineSelectedID==11 && g_b981CDesktop)  //»ØÊÕº½Ïß
				{
					fprintf(fp,"%d, %d, %lf, %lf, %.2lf, 0, 00, 0B\n", m_editLineDataGroup.lineID,i,linePt.dX,linePt.dY,linePt.nH);
				}
				else
				{
					if (linePt.ch1==2)  //¿ªºÏº½Ïß
					{
						fprintf(fp,"%d, %d, %lf, %lf, %.2lf, 0, 02, 01\n", m_editLineDataGroup.lineID,i,linePt.dX,linePt.dY,linePt.nH);
					}
					else
					{
						fprintf(fp,"%d, %d, %lf, %lf, %.2lf, 0, 00, 01\n", m_editLineDataGroup.lineID,i,linePt.dX,linePt.dY,linePt.nH);
					}
				}
			}
		}
		fclose(fp);

		OnShowGivenLine(filename);
		//Çå³ý±ê»æµÄº½Ïß
		//ClearDrawedLine(m_editLineDataGroup.lineID-1);
		//±ê»æº½Ïß
		//DrawFlyLine(m_editLineDataGroup);
		m_map.ClearDrawing(m_distLabelLayer);
		m_bEditLine = false;
		m_bSelectFeatureFlag = false;
		m_lineSelectedID = -1;
		return;
	}else
	{
		return;
	}
}

//²âÁ¿½áÊø
void CGISDlg::EndPolylineMessure()
{
	//ɾ³ýÒѾ­±ê»æµÄÖ±Ïß
	m_map.ClearDrawing(m_tempLayerID);
	m_bMeasureDrag = false;
	m_bEndMeasure = true;
	m_numPolylineMeasurePts = 0;
	return;
}