Merge pull request 'feat: 批量航线新增单点偏移' (#37) from dev/cbwu into master

Reviewed-on: #37
WuChengbo 10 months ago
commit 3494f057c5

@ -422,21 +422,23 @@ BEGIN
EDITTEXT IDC_EDIT_EXTERNALLENGTH,70,46,41,15,ES_AUTOHSCROLL,WS_EX_RIGHT EDITTEXT IDC_EDIT_EXTERNALLENGTH,70,46,41,15,ES_AUTOHSCROLL,WS_EX_RIGHT
END END
IDD_DLG_SETMULTIROUTE DIALOGEX 0, 0, 210, 159 IDD_DLG_SETMULTIROUTE DIALOGEX 0, 0, 210, 171
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "航线批量生成设置" CAPTION "航线批量生成设置"
FONT 8, "MS Shell Dlg", 400, 0, 0x1 FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN BEGIN
DEFPUSHBUTTON "确定",IDOK,39,125,61,20 DEFPUSHBUTTON "确定",IDOK,39,142,61,20
PUSHBUTTON "取消",IDCANCEL,118,125,61,20 PUSHBUTTON "取消",IDCANCEL,118,142,61,20
LTEXT "航线间隔(m):",IDC_STATIC,25,41,65,14 LTEXT "航线间隔(m):",IDC_STATIC,25,41,65,14
EDITTEXT IDC_EDIT_LINEINTERVAL,112,37,77,21,ES_CENTER | ES_AUTOHSCROLL EDITTEXT IDC_EDIT_LINEINTERVAL,112,37,77,21,ES_CENTER | ES_AUTOHSCROLL
LTEXT "偏移角度(°):",IDC_STATIC,25,14,65,14 LTEXT "偏移角度(°):",IDC_STATIC,25,14,65,14
EDITTEXT IDC_EDIT_AZIMUTH,112,10,77,21,ES_CENTER | ES_AUTOHSCROLL EDITTEXT IDC_EDIT_AZIMUTH,112,10,77,21,ES_CENTER | ES_AUTOHSCROLL
LTEXT "高度间隔(m):",IDC_STATIC,25,69,65,14 LTEXT "高度间隔(m):",IDC_STATIC,25,68,65,14
EDITTEXT IDC_EDIT_HEIGHTINTERVAL,112,65,77,21,ES_CENTER | ES_AUTOHSCROLL EDITTEXT IDC_EDIT_HEIGHTINTERVAL,112,64,77,21,ES_CENTER | ES_AUTOHSCROLL
LTEXT "航线数量:",IDC_STATIC,26,96,65,14 LTEXT "航线数量:",IDC_STATIC,26,95,65,14
EDITTEXT IDC_EDIT_LINENUMBER,112,92,77,21,ES_CENTER | ES_AUTOHSCROLL EDITTEXT IDC_EDIT_LINENUMBER,112,91,77,21,ES_CENTER | ES_AUTOHSCROLL
LTEXT "仅单点偏移(水平):",IDC_STATIC,25,120,65,14
COMBOBOX IDC_COMBO_HPT,113,118,76,63,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
END END
@ -463,6 +465,13 @@ BEGIN
0 0
END END
IDD_DLG_SETMULTIROUTE DLGINIT
BEGIN
IDC_COMBO_HPT, 0x403, 2, 0
0x0030,
0
END
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// //
@ -582,9 +591,9 @@ BEGIN
IDD_DLG_SETMULTIROUTE, DIALOG IDD_DLG_SETMULTIROUTE, DIALOG
BEGIN BEGIN
LEFTMARGIN, 3 LEFTMARGIN, 3
RIGHTMARGIN, 204 RIGHTMARGIN, 207
TOPMARGIN, 3 TOPMARGIN, 3
BOTTOMMARGIN, 152 BOTTOMMARGIN, 167
END END
END END
#endif // APSTUDIO_INVOKED #endif // APSTUDIO_INVOKED

@ -5768,15 +5768,18 @@ void CGISDlg::OnEnddesign() //
double azmuth,heightInterval,lineInterval,numLine; double azmuth,heightInterval,lineInterval,numLine;
bool bSaveMultiLine = false; bool bSaveMultiLine = false;
CString pathName; CString pathName;
int singlePointNumber;
if (g_b981AMulti && dlg.m_bCheckMultiLine) if (g_b981AMulti && dlg.m_bCheckMultiLine)
{ {
SetMultiRouteDlg multiRouteDlg; SetMultiRouteDlg multiRouteDlg;
multiRouteDlg.SetPointNumber(m_designLinePointNum);
if (multiRouteDlg.DoModal() == IDOK ) if (multiRouteDlg.DoModal() == IDOK )
{ {
azmuth = multiRouteDlg.azmuth; azmuth = multiRouteDlg.azmuth;
heightInterval = multiRouteDlg.heightInterval; heightInterval = multiRouteDlg.heightInterval;
lineInterval = multiRouteDlg.lineInterval; lineInterval = multiRouteDlg.lineInterval;
numLine = multiRouteDlg.numLine; numLine = multiRouteDlg.numLine;
singlePointNumber = multiRouteDlg.GetHPointNumber();
bSaveMultiLine = true; bSaveMultiLine = true;
} }
else else
@ -5850,7 +5853,7 @@ void CGISDlg::OnEnddesign() //
if (g_b981AMulti && bSaveMultiLine) if (g_b981AMulti && bSaveMultiLine)
{ {
vector<vector<PtStruct>> resultLines; vector<vector<PtStruct>> resultLines;
GetMultiRouteLine(azmuth,lineInterval,numLine,m_pDesignLineStruct,m_designLinePointNum,resultLines); GetMultiRouteLine(azmuth,lineInterval,numLine,m_pDesignLineStruct,m_designLinePointNum,resultLines,singlePointNumber);
vector<CString>savePathNameArr; vector<CString>savePathNameArr;
SaveMultiRouteLine(pathName,heightInterval,savePathNameArr,resultLines); SaveMultiRouteLine(pathName,heightInterval,savePathNameArr,resultLines);
} }
@ -8570,13 +8573,14 @@ void CGISDlg::OnShowDesignSurveyLineDlg()
/****************************多机航线一键生成************************************/ /****************************多机航线一键生成************************************/
void CGISDlg::GetMultiRouteLine(double azimuth,double lineInterval,int lineNumber,PtStruct* lineStruct,int nLinePts,vector<vector<PtStruct>>& resultLines) void CGISDlg::GetMultiRouteLine(double azimuth,double lineInterval,int lineNumber,PtStruct* lineStruct,int nLinePts,vector<vector<PtStruct>>& resultLines,int hPtOffset)
{ {
GeoCompute geoComputer; GeoCompute geoComputer;
double tmpLon,tmpLat; double tmpLon,tmpLat;
vector<PtStruct> line; vector<PtStruct> line;
double dist = 0; double dist = 0;
double lineAzimuth = 0; double lineAzimuth = 0;
//bool bOneOffset = false;
for (int j=0;j< lineNumber;++j) for (int j=0;j< lineNumber;++j)
{ {
line.clear(); line.clear();
@ -8586,27 +8590,60 @@ void CGISDlg::GetMultiRouteLine(double azimuth,double lineInterval,int lineNumbe
lineAzimuth = azimuth; lineAzimuth = azimuth;
for (int i=0;i< nLinePts;++i) for (int i=0;i< nLinePts;++i)
{ {
PtStruct line0 = lineStruct[i]; //PtStruct line0 = lineStruct[i];
PtStruct line1 = lineStruct[i+1]; //PtStruct line1 = lineStruct[i+1];
geoComputer.computeOffsetGeoPosition(tmpLon,tmpLat,lineAzimuth,dist/1000,tmpLon,tmpLat); /*
PtStruct pt; if (hPtOffset>0 && i!=(hPtOffset-1)) //仅某一点水平方向偏移
pt.dX = tmpLon; {
pt.dY = tmpLat; tmpLon = lineStruct[i].dX;
pt.nH = lineStruct[i].nH; tmpLat = lineStruct[i].dY;
pt.nL = lineStruct[i].nL; bOneOffset = true;
pt.nPt = lineStruct[i].nPt; }
pt.nV = lineStruct[i].nV; else
pt.ch1 = lineStruct[i].ch1; {*/
pt.ch2 = lineStruct[i].ch2; if (hPtOffset == 0)
line.push_back(pt);
//CalculateTwoPtsAzimuth(azimuth,lineStruct[i].dX,lineStruct[i].dY,lineStruct[i+1].dX,lineStruct[i+1].dY,3);
if (i+1<nLinePts)
{ {
CalculateTwoPtsDistanceAzimuth(dist,lineAzimuth,lineStruct[i].dX,lineStruct[i].dY,lineStruct[i+1].dX,lineStruct[i+1].dY,3); geoComputer.computeOffsetGeoPosition(tmpLon,tmpLat,lineAzimuth,dist/1000,tmpLon,tmpLat);
PtStruct pt;
pt.dX = tmpLon;
pt.dY = tmpLat;
pt.nH = lineStruct[i].nH;
pt.nL = lineStruct[i].nL;
pt.nPt = lineStruct[i].nPt;
pt.nV = lineStruct[i].nV;
pt.ch1 = lineStruct[i].ch1;
pt.ch2 = lineStruct[i].ch2;
line.push_back(pt);
if (i+1<nLinePts)
{
CalculateTwoPtsDistanceAzimuth(dist,lineAzimuth,lineStruct[i].dX,lineStruct[i].dY,lineStruct[i+1].dX,lineStruct[i+1].dY,3);
}
}
else//仅某一点水平方向偏移
{
PtStruct pt;
pt.nH = lineStruct[i].nH;
pt.nL = lineStruct[i].nL;
pt.nPt = lineStruct[i].nPt;
pt.nV = lineStruct[i].nV;
pt.ch1 = lineStruct[i].ch1;
pt.ch2 = lineStruct[i].ch2;
if (i!=(hPtOffset-1))
{
pt.dX = lineStruct[i].dX;
pt.dY = lineStruct[i].dY;
}
else
{
geoComputer.computeOffsetGeoPosition(lineStruct[i].dX,lineStruct[i].dY,lineAzimuth,dist/1000,tmpLon,tmpLat);
pt.dX = tmpLon;
pt.dY = tmpLat;
//int i = 0;
}
line.push_back(pt);
} }
//dist = geoComputer.VincentyDistance(lineStruct[i].dX,lineStruct[i].dY,lineStruct[i+1].dX,lineStruct[i+1].dY);
} }
resultLines.push_back(line); resultLines.push_back(line);
} }
@ -8652,6 +8689,8 @@ void CGISDlg::ShowMultiRouteSetting()
if (g_b981AMulti) if (g_b981AMulti)
{ {
SetMultiRouteDlg multiRouteDlg; SetMultiRouteDlg multiRouteDlg;
DrawLineDataStruct selectLineData = m_ShowedLineDataList[m_lineSelectedID];
multiRouteDlg.SetPointNumber(selectLineData.pointNum);
if (multiRouteDlg.DoModal() == IDOK ) if (multiRouteDlg.DoModal() == IDOK )
{ {
azmuth = multiRouteDlg.azmuth; azmuth = multiRouteDlg.azmuth;
@ -8659,16 +8698,17 @@ void CGISDlg::ShowMultiRouteSetting()
lineInterval = multiRouteDlg.lineInterval; lineInterval = multiRouteDlg.lineInterval;
numLine = multiRouteDlg.numLine; numLine = multiRouteDlg.numLine;
bSaveMultiLine = true; bSaveMultiLine = true;
int hPtNumber = multiRouteDlg.GetHPointNumber();
CString selectLinePath = m_lineFullPathName[m_lineSelectedID]; CString selectLinePath = m_lineFullPathName[m_lineSelectedID];
if (ExtractFileType(selectLinePath) == ".route") return; // 已装订的航线不允许批量生成 if (ExtractFileType(selectLinePath) == ".route") return; // 已装订的航线不允许批量生成
DrawLineDataStruct selectLineData = m_ShowedLineDataList[m_lineSelectedID];
CString dirPath = ExtractDirPath(selectLinePath); CString dirPath = ExtractDirPath(selectLinePath);
CString fileName = ExtractFileName(selectLinePath,false); CString fileName = ExtractFileName(selectLinePath,false);
pathName = dirPath + "\\" + fileName; pathName = dirPath + "\\" + fileName;
//批量航线保存 //批量航线保存
vector<vector<PtStruct>> resultLines; vector<vector<PtStruct>> resultLines;
GetMultiRouteLine(azmuth,lineInterval,numLine,selectLineData.pts,selectLineData.pointNum,resultLines); GetMultiRouteLine(azmuth,lineInterval,numLine,selectLineData.pts,selectLineData.pointNum,resultLines,hPtNumber);
SaveMultiRouteLine(pathName,heightInterval,pathNameArr,resultLines); SaveMultiRouteLine(pathName,heightInterval,pathNameArr,resultLines);
} }
else else

@ -997,7 +997,7 @@ public:
//功能:显示测绘航线设计对话框 //功能:显示测绘航线设计对话框
void OnShowDesignSurveyLineDlg(); void OnShowDesignSurveyLineDlg();
/****************************多机航线一键生成************************************/ /****************************多机航线一键生成************************************/
void GetMultiRouteLine(double azimuth,double lineInterval,int lineNumber,PtStruct* lineStruct,int nLinePts,vector<vector<PtStruct>>& resultLines); void GetMultiRouteLine(double azimuth,double lineInterval,int lineNumber,PtStruct* lineStruct,int nLinePts,vector<vector<PtStruct>>& resultLines,int hPtOffset=0);
void SaveMultiRouteLine(CString pathDirName,double heightInterval,vector<CString>& savePathNameArr,const vector<vector<PtStruct>>& resultLines); void SaveMultiRouteLine(CString pathDirName,double heightInterval,vector<CString>& savePathNameArr,const vector<vector<PtStruct>>& resultLines);
void ShowMultiRouteSetting(); void ShowMultiRouteSetting();

@ -164,6 +164,7 @@
#define IDR_TOOLBAR3 1056 #define IDR_TOOLBAR3 1056
#define IDC_EDIT_MARKER_LAT 1056 #define IDC_EDIT_MARKER_LAT 1056
#define IDC_EDIT_FLYSPEED 1056 #define IDC_EDIT_FLYSPEED 1056
#define IDC_COMBO_HPT 1056
#define IDB_BITMAP2 1057 #define IDB_BITMAP2 1057
#define IDC_EDIT_MARKER_NAME 1057 #define IDC_EDIT_MARKER_NAME 1057
#define IDC_TXT_FLYTIME 1057 #define IDC_TXT_FLYTIME 1057
@ -435,7 +436,7 @@
#ifndef APSTUDIO_READONLY_SYMBOLS #ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 1174 #define _APS_NEXT_RESOURCE_VALUE 1174
#define _APS_NEXT_COMMAND_VALUE 32945 #define _APS_NEXT_COMMAND_VALUE 32945
#define _APS_NEXT_CONTROL_VALUE 1056 #define _APS_NEXT_CONTROL_VALUE 1057
#define _APS_NEXT_SYMED_VALUE 1000 #define _APS_NEXT_SYMED_VALUE 1000
#endif #endif
#endif #endif

@ -14,6 +14,9 @@ SetMultiRouteDlg::SetMultiRouteDlg(CWnd* pParent /*=NULL*/)
: CBCGPDialog(SetMultiRouteDlg::IDD, pParent) : CBCGPDialog(SetMultiRouteDlg::IDD, pParent)
{ {
EnableVisualManagerStyle(TRUE, TRUE); EnableVisualManagerStyle(TRUE, TRUE);
numPoints = 0;
selectHPtNumber = 0;
} }
SetMultiRouteDlg::~SetMultiRouteDlg() SetMultiRouteDlg::~SetMultiRouteDlg()
@ -23,11 +26,13 @@ SetMultiRouteDlg::~SetMultiRouteDlg()
void SetMultiRouteDlg::DoDataExchange(CDataExchange* pDX) void SetMultiRouteDlg::DoDataExchange(CDataExchange* pDX)
{ {
CBCGPDialog::DoDataExchange(pDX); CBCGPDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_COMBO_HPT, m_HPtCombobox);
} }
BEGIN_MESSAGE_MAP(SetMultiRouteDlg, CBCGPDialog) BEGIN_MESSAGE_MAP(SetMultiRouteDlg, CBCGPDialog)
ON_BN_CLICKED(IDOK, &SetMultiRouteDlg::OnBnClickedOk) ON_BN_CLICKED(IDOK, &SetMultiRouteDlg::OnBnClickedOk)
ON_CBN_SELCHANGE(IDC_COMBO_HPT, &SetMultiRouteDlg::OnCbnSelchangeComboHpt)
END_MESSAGE_MAP() END_MESSAGE_MAP()
BOOL SetMultiRouteDlg::OnInitDialog() BOOL SetMultiRouteDlg::OnInitDialog()
@ -39,6 +44,14 @@ BOOL SetMultiRouteDlg::OnInitDialog()
GetDlgItem( IDC_EDIT_HEIGHTINTERVAL )->SetWindowTextA("10"); GetDlgItem( IDC_EDIT_HEIGHTINTERVAL )->SetWindowTextA("10");
GetDlgItem( IDC_EDIT_LINENUMBER )->SetWindowTextA("3"); GetDlgItem( IDC_EDIT_LINENUMBER )->SetWindowTextA("3");
CString str;
for (int i=1;i<=numPoints;++i)
{
str.Format("%d",i);
m_HPtCombobox.InsertString(i,str);
}
m_HPtCombobox.SetCurSel(0);
return TRUE; return TRUE;
} }
@ -75,3 +88,19 @@ void SetMultiRouteDlg::OnBnClickedOk()
this->OnOK(); this->OnOK();
} }
void SetMultiRouteDlg::SetPointNumber(int num)
{
numPoints = num;
}
int SetMultiRouteDlg::GetHPointNumber()
{
return selectHPtNumber;
}
void SetMultiRouteDlg::OnCbnSelchangeComboHpt()
{
selectHPtNumber = m_HPtCombobox.GetCurSel();
}

@ -1,5 +1,6 @@
#pragma once #pragma once
#include "Resource.h" #include "Resource.h"
#include "afxwin.h"
// SetMultiRouteDlg 对话框 // SetMultiRouteDlg 对话框
@ -24,4 +25,12 @@ protected:
DECLARE_MESSAGE_MAP() DECLARE_MESSAGE_MAP()
public: public:
afx_msg void OnBnClickedOk(); afx_msg void OnBnClickedOk();
void SetPointNumber(int num);
int GetHPointNumber();
private:
CBCGPComboBox m_HPtCombobox;
int numPoints;
int selectHPtNumber;
public:
afx_msg void OnCbnSelchangeComboHpt();
}; };

Loading…
Cancel
Save