// 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; }