feat: 测绘航线新增航程航时计算,测绘航线格式改为.txt,测绘区域格式改为.route,航线文件保存经纬度精确到小数点后7位

pull/31/head
cbwu 12 months ago
parent 42ad71e2ff
commit c2be9a49ed

@ -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

@ -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);

@ -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<double>&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<double>&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<double>&surveyLineLons,const vector<double>& surveyLineLats)
{
double sum = 0;
for (int i=0;i<surveyLineLons.size()-1;++i)
{
double dist;
CalculateTwoPtsDistance(dist,surveyLineLons[i],surveyLineLats[i],surveyLineLons[i+1],surveyLineLats[i+1],3);
sum += dist;
}
return sum;
}
//航时计算
void DesignSurveyLineDlg::OnBnClickedBtnCalculatetime()
{
CString cstr;
GetDlgItemText(IDC_EDIT_FLYSPEED,cstr);
double speed = _ttof(cstr);
if (speed<1||speed>15)
{
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);
}

@ -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<double>&surveyLineLons,vector<double>& surveyLineLats);//计算测绘航线
void saveSurveyLine(const vector<double>&surveyLineLons,const vector<double>& surveyLineLats,double height); //保存测绘航线
bool saveSurveyRegion(const vector<double>&surveyRegionLons,const vector<double>& surveyRegionLats); //保存航测区域
double calculateRouteLength(const vector<double>&surveyLineLons,const vector<double>& surveyLineLats); //źĆËăş˝łĚ
int lineID;
//测绘航线坐标
vector<double> surveyLineLons;
vector<double> 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();
};

@ -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

Loading…
Cancel
Save