diff --git a/GISControlDlg.rc b/GISControlDlg.rc index 9da65f5..108578a 100644 --- a/GISControlDlg.rc +++ b/GISControlDlg.rc @@ -397,20 +397,27 @@ BEGIN COMBOBOX IDC_COMBO_DIRECTION,67,49,73,63,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP END -IDD_DLG_DESIGNSURVEYLINE DIALOGEX 0, 0, 195, 106 +IDD_DLG_DESIGNSURVEYLINE DIALOGEX 0, 0, 211, 119 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "航测航线设计" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - LTEXT "航线高度(m):",IDC_STATIC,16,13,53,10 - EDITTEXT IDC_EDIT_HEIGHT,69,11,73,15,ES_AUTOHSCROLL,WS_EX_RIGHT - LTEXT "航线间隔(m):",IDC_STATIC,16,32,57,10 - EDITTEXT IDC_EDIT_LINEINTERVAL,69,29,73,15,ES_AUTOHSCROLL,WS_EX_RIGHT - PUSHBUTTON "导入航测区",IDC_BTN_INPUTREGION,10,55,55,18 - PUSHBUTTON "绘制航测区",IDC_BTN_DRAWREGION,69,55,55,18 - PUSHBUTTON "保存航测区",IDC_BTN_SAVEREGION,128,55,55,18 - PUSHBUTTON "装订航线",IDC_BTN_BINDLINE,10,77,55,18 - PUSHBUTTON "生成航线",IDC_BTN_CALCULATELINE,69,77,55,18 + LTEXT "航线高度(m):",IDC_STATIC,10,13,53,10 + EDITTEXT IDC_EDIT_HEIGHT,70,11,41,15,ES_AUTOHSCROLL,WS_EX_RIGHT + LTEXT "航线间隔(m):",IDC_STATIC,10,32,57,10 + EDITTEXT IDC_EDIT_LINEINTERVAL,70,29,41,15,ES_AUTOHSCROLL,WS_EX_RIGHT + PUSHBUTTON "导入航测区",IDC_BTN_INPUTREGION,10,68,55,18 + PUSHBUTTON "绘制航测区",IDC_BTN_DRAWREGION,69,68,55,18 + PUSHBUTTON "保存航测区",IDC_BTN_SAVEREGION,128,68,55,18 + PUSHBUTTON "装订航线",IDC_BTN_BINDLINE,10,90,55,18 + PUSHBUTTON "生成航线",IDC_BTN_CALCULATELINE,69,90,55,18 + LTEXT "航程:",IDC_STATIC,114,14,44,10 + LTEXT "0 m",IDC_TXT_ROUTELENGTH,140,14,50,10 + LTEXT "航时:",IDC_STATIC,115,32,44,10 + LTEXT "飞行速度(m/s):",IDC_STATIC,6,50,66,10 + EDITTEXT IDC_EDIT_FLYSPEED,70,47,41,15,ES_AUTOHSCROLL,WS_EX_RIGHT + PUSHBUTTON "航时计算",IDC_BTN_CALCULATETIME,123,46,52,16 + LTEXT "0时0分0秒",IDC_TXT_FLYTIME,141,32,59,10 END IDD_DLG_SETMULTIROUTE DIALOGEX 0, 0, 210, 159 @@ -565,9 +572,9 @@ BEGIN IDD_DLG_DESIGNSURVEYLINE, DIALOG BEGIN LEFTMARGIN, 3 - RIGHTMARGIN, 191 + RIGHTMARGIN, 207 TOPMARGIN, 3 - BOTTOMMARGIN, 101 + BOTTOMMARGIN, 114 END IDD_DLG_SETMULTIROUTE, DIALOG diff --git a/GISDlg.cpp b/GISDlg.cpp index 9b48a11..2a286e2 100644 --- a/GISDlg.cpp +++ b/GISDlg.cpp @@ -7794,7 +7794,7 @@ void CGISDlg::ShowEditSaveDlg() 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); + fprintf(fp,"%d, 0, %.7f, %.7f, %.2f, 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++) { @@ -7803,22 +7803,22 @@ void CGISDlg::ShowEditSaveDlg() { 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); + fprintf(fp,"%d, %d, %.7f, %.7f, %.2f, 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); + fprintf(fp,"%d, %d, %.7f, %.7f, %.2f, 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); + fprintf(fp,"%d, %d, %.7f, %.7f, %.2f, 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); + fprintf(fp,"%d, %d, %.7f, %.7f, %.2f, 0, 00, 03\n", m_editLineDataGroup.lineID,i,linePt.dX,linePt.dY,linePt.nH); } } @@ -7826,17 +7826,17 @@ void CGISDlg::ShowEditSaveDlg() { 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); + fprintf(fp,"%d, %d, %.7f, %.7f, %.2f, 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); + fprintf(fp,"%d, %d, %.7f, %.7f, %.2f, 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); + fprintf(fp,"%d, %d, %.7f, %.7f, %.2f, 0, 00, 01\n", m_editLineDataGroup.lineID,i,linePt.dX,linePt.dY,linePt.nH); } } } @@ -7917,17 +7917,17 @@ void CGISDlg::ShowSaveZoneDlg(double* xPoints,double* yPoints) filename = dlg.GetPathName(); //保存文件 FILE* fp = fopen(filename,"w"); - fprintf(fp,"%d, 0, %lf, %lf, %.2lf, 0, 00, 03\n", zoneID, 0.0, 0.0, 0.0); - fprintf(fp,"%d, 1, %lf, %lf, %.2lf, 0, 00, 03\n", zoneID, xPoints[0], yPoints[0], height); - fprintf(fp,"%d, 2, %lf, %lf, %.2lf, 0, 00, 03\n", zoneID, xPoints[1], yPoints[1], height); - fprintf(fp,"%d, 3, %lf, %lf, %.2lf, 0, 00, 03\n", zoneID, xPoints[2], yPoints[2], height); + fprintf(fp,"%d, 0, %.7f, %.7f, %.2f, 0, 00, 03\n", zoneID, 0.0, 0.0, 0.0); + fprintf(fp,"%d, 1, %.7f, %.7f, %.2f, 0, 00, 03\n", zoneID, xPoints[0], yPoints[0], height); + fprintf(fp,"%d, 2, %.7f, %.7f, %.2f, 0, 00, 03\n", zoneID, xPoints[1], yPoints[1], height); + fprintf(fp,"%d, 3, %.7f, %.7f, %.2f, 0, 00, 03\n", zoneID, xPoints[2], yPoints[2], height); if (zoneType==0) //限飞区 { - fprintf(fp,"%d, 4, %lf, %lf, %.2lf, 0, 0D, 01\n", zoneID, xPoints[3], yPoints[3], height); + fprintf(fp,"%d, 4, %.7f, %.7f, %.2f, 0, 0D, 01\n", zoneID, xPoints[3], yPoints[3], height); } else if (zoneType==1) //禁飞区 { - fprintf(fp,"%d, 4, %lf, %lf, %.2lf, 0, 0C, 01\n", zoneID, xPoints[3], yPoints[3], height); + fprintf(fp,"%d, 4, %.7f, %.7f, %.2f, 0, 0C, 01\n", zoneID, xPoints[3], yPoints[3], height); } fclose(fp); diff --git a/designsurveylinedlg.cpp b/designsurveylinedlg.cpp index 551db23..b3a4955 100644 --- a/designsurveylinedlg.cpp +++ b/designsurveylinedlg.cpp @@ -17,7 +17,7 @@ DesignSurveyLineDlg::DesignSurveyLineDlg(CWnd* pParent /*=NULL*/) bDrawRegion = false; - lineID = 5;//测绘航线号 + lineID = 1;//测绘航线号 } DesignSurveyLineDlg::~DesignSurveyLineDlg() @@ -38,6 +38,7 @@ BEGIN_MESSAGE_MAP(DesignSurveyLineDlg, CBCGPDialog) ON_BN_CLICKED(IDC_BTN_BINDLINE, &DesignSurveyLineDlg::OnBnClickedBtnBindline) ON_BN_CLICKED(IDC_BTN_CALCULATELINE, &DesignSurveyLineDlg::OnBnClickedBtnCalculateline) ON_WM_CLOSE() + ON_BN_CLICKED(IDC_BTN_CALCULATETIME, &DesignSurveyLineDlg::OnBnClickedBtnCalculatetime) END_MESSAGE_MAP() BOOL DesignSurveyLineDlg::OnInitDialog() @@ -45,6 +46,9 @@ BOOL DesignSurveyLineDlg::OnInitDialog() CBCGPDialog::OnInitDialog(); CenterWindow(); GetDlgItem( IDC_BTN_CALCULATELINE )->EnableWindow( false ); + GetDlgItem( IDC_BTN_CALCULATETIME )->EnableWindow( false ); + SetDlgItemText(IDC_EDIT_FLYSPEED,"10"); + return TRUE; } @@ -150,14 +154,14 @@ void DesignSurveyLineDlg::saveSurveyLine(const vector&surveyLineLons,con TCHAR s[10000]; s[0]=0; - CString defaultName = g_regionFileName + "-测绘航线.route"; - CFileDialog dlg(FALSE, _T(".route"), defaultName); + CString defaultName = g_regionFileName + "-测绘航线.txt"; + CFileDialog dlg(FALSE, _T(".txt"), defaultName); dlg.m_ofn.lpstrTitle=_T("保存测绘航线文件"); /* dlg.m_ofn.lpstrFile=s; dlg.m_ofn.nMaxFile=sizeof(s)/sizeof(TCHAR);*/ - TCHAR filter[500]=_T("测绘航线文件(*.route)\0*.route\0"); + 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; @@ -199,13 +203,13 @@ bool DesignSurveyLineDlg::saveSurveyRegion(const vector&surveyRegionLons TCHAR s[10000]; s[0]=0; - CFileDialog dlg(FALSE, _T(".txt"), _T("测绘区域1.txt")); + CFileDialog dlg(FALSE, _T(".route"), _T("测绘区域1.route")); 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"); + TCHAR filter[500]=_T("测绘区域文件(*.route)\0*.route\0"); dlg.m_ofn.lpstrFilter=filter; dlg.m_ofn.Flags|=OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY|OFN_CREATEPROMPT; dlg.m_ofn.lpstrInitialDir = strRouteFileDir; @@ -346,6 +350,14 @@ void DesignSurveyLineDlg::OnBnClickedBtnCalculateline() char* path = g_linePathName.GetBuffer(); ::SendMessage(g_mapHwnd, WM_SEND_SHOWSURVEYLINE, (WPARAM)path, 0); } + + //计算航程 + g_RouteLength = calculateRouteLength(surveyLineLons,surveyLineLats); + cstr.Format("%d",int(g_RouteLength)); + cstr += "m"; + ((CStatic*)GetDlgItem(IDC_TXT_ROUTELENGTH))->SetWindowTextA(cstr); + + GetDlgItem( IDC_BTN_CALCULATETIME )->EnableWindow( true ); } void DesignSurveyLineDlg::OnClose() @@ -358,3 +370,37 @@ void DesignSurveyLineDlg::OnClose() ::SendMessage(g_mapHwnd, WM_CLEAR_TMPSURVEYFEATURE, 0, 0); } } + +//计算航程(m) +double DesignSurveyLineDlg::calculateRouteLength(const vector&surveyLineLons,const vector& surveyLineLats) +{ + double sum = 0; + for (int i=0;i15) + { + BCGPMessageBox("飞行速度为[1,15]m/s!"); + return; + } + + int flyTime = g_RouteLength / speed; + int hours = flyTime/3600; + flyTime %= 3600; // 剩余秒数 + int minutes = flyTime / 60; // 剩余秒数除以60得到分钟数 + int seconds = flyTime % 60; // 最后剩余的秒数 + cstr.Format("%d时%d分%d秒",hours,minutes,seconds); + ((CStatic*)GetDlgItem(IDC_TXT_FLYTIME))->SetWindowTextA(cstr); +} diff --git a/designsurveylinedlg.h b/designsurveylinedlg.h index ce5f322..44801cd 100644 --- a/designsurveylinedlg.h +++ b/designsurveylinedlg.h @@ -5,6 +5,7 @@ #include "geocompute.h" #include "Globe.h" #include "afxwin.h" +#include "MapPrj.h" // DesignSurveyLineDlg 对话框 @@ -30,11 +31,13 @@ private: void calculateSurveyLine(double lineInterval,vector&surveyLineLons,vector& surveyLineLats);//计算测绘航线 void saveSurveyLine(const vector&surveyLineLons,const vector& surveyLineLats,double height); //保存测绘航线 bool saveSurveyRegion(const vector&surveyRegionLons,const vector& surveyRegionLats); //保存航测区域 + double calculateRouteLength(const vector&surveyLineLons,const vector& surveyLineLats); //计算航程 int lineID; //测绘航线坐标 vector surveyLineLons; vector surveyLineLats; double g_Height; + double g_RouteLength; // 测绘区域文件路径 CString g_regionPathName; @@ -56,4 +59,5 @@ public: afx_msg void OnBnClickedBtnCalculateline(); afx_msg void OnClose(); CBCGPButton m_btnSaveRegion; + afx_msg void OnBnClickedBtnCalculatetime(); }; diff --git a/resource.h b/resource.h index 2c7ac0a..01239ba 100644 --- a/resource.h +++ b/resource.h @@ -160,10 +160,14 @@ #define IDC_COMBO_DIRECTION 1053 #define IDC_EDIT_LINEINTERVAL 1054 #define IDC_EDIT_MARKER_LON 1055 +#define IDC_TXT_ROUTELENGTH 1055 #define IDR_TOOLBAR3 1056 #define IDC_EDIT_MARKER_LAT 1056 +#define IDC_EDIT_FLYSPEED 1056 #define IDB_BITMAP2 1057 #define IDC_EDIT_MARKER_NAME 1057 +#define IDC_TXT_ROUTELENGTH2 1057 +#define IDC_TXT_FLYTIME 1057 #define IDC_TREE_MARKERS 1058 #define IDD_DIALOG_MARKER 1063 #define IDR_MENU3 1066 @@ -242,6 +246,7 @@ #define IDC_BTN_INPUTREGION 1172 #define IDD_DLG_DESIGNSURVEYLINE 1172 #define IDD_DLG_SETMULTIROUTE 1173 +#define IDC_BTN_CALCULATETIME 1173 #define IDT_GIS_CTRL_BUTTON1 1231 #define IDT_GIS_CTRL_BUTTON2 1232 #define IDT_GIS_CTRL_BUTTON3 1233 @@ -427,7 +432,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 1174 #define _APS_NEXT_COMMAND_VALUE 32943 -#define _APS_NEXT_CONTROL_VALUE 1055 +#define _APS_NEXT_CONTROL_VALUE 1056 #define _APS_NEXT_SYMED_VALUE 1000 #endif #endif