feat: 批量航线新增单点偏移 #37

Merged
WuChengbo merged 1 commits from dev/cbwu into master 10 months ago

@ -422,21 +422,23 @@ BEGIN
EDITTEXT IDC_EDIT_EXTERNALLENGTH,70,46,41,15,ES_AUTOHSCROLL,WS_EX_RIGHT
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
CAPTION "航线批量生成设置"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "确定",IDOK,39,125,61,20
PUSHBUTTON "取消",IDCANCEL,118,125,61,20
DEFPUSHBUTTON "确定",IDOK,39,142,61,20
PUSHBUTTON "取消",IDCANCEL,118,142,61,20
LTEXT "航线间隔(m):",IDC_STATIC,25,41,65,14
EDITTEXT IDC_EDIT_LINEINTERVAL,112,37,77,21,ES_CENTER | ES_AUTOHSCROLL
LTEXT "偏移角度(°):",IDC_STATIC,25,14,65,14
EDITTEXT IDC_EDIT_AZIMUTH,112,10,77,21,ES_CENTER | ES_AUTOHSCROLL
LTEXT "高度间隔(m):",IDC_STATIC,25,69,65,14
EDITTEXT IDC_EDIT_HEIGHTINTERVAL,112,65,77,21,ES_CENTER | ES_AUTOHSCROLL
LTEXT "航线数量:",IDC_STATIC,26,96,65,14
EDITTEXT IDC_EDIT_LINENUMBER,112,92,77,21,ES_CENTER | ES_AUTOHSCROLL
LTEXT "高度间隔(m):",IDC_STATIC,25,68,65,14
EDITTEXT IDC_EDIT_HEIGHTINTERVAL,112,64,77,21,ES_CENTER | ES_AUTOHSCROLL
LTEXT "航线数量:",IDC_STATIC,26,95,65,14
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
@ -463,6 +465,13 @@ BEGIN
0
END
IDD_DLG_SETMULTIROUTE DLGINIT
BEGIN
IDC_COMBO_HPT, 0x403, 2, 0
0x0030,
0
END
/////////////////////////////////////////////////////////////////////////////
//
@ -582,9 +591,9 @@ BEGIN
IDD_DLG_SETMULTIROUTE, DIALOG
BEGIN
LEFTMARGIN, 3
RIGHTMARGIN, 204
RIGHTMARGIN, 207
TOPMARGIN, 3
BOTTOMMARGIN, 152
BOTTOMMARGIN, 167
END
END
#endif // APSTUDIO_INVOKED

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

@ -997,7 +997,7 @@ public:
//功能:显示测绘航线设计对话框
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 ShowMultiRouteSetting();

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

@ -14,6 +14,9 @@ SetMultiRouteDlg::SetMultiRouteDlg(CWnd* pParent /*=NULL*/)
: CBCGPDialog(SetMultiRouteDlg::IDD, pParent)
{
EnableVisualManagerStyle(TRUE, TRUE);
numPoints = 0;
selectHPtNumber = 0;
}
SetMultiRouteDlg::~SetMultiRouteDlg()
@ -23,11 +26,13 @@ SetMultiRouteDlg::~SetMultiRouteDlg()
void SetMultiRouteDlg::DoDataExchange(CDataExchange* pDX)
{
CBCGPDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_COMBO_HPT, m_HPtCombobox);
}
BEGIN_MESSAGE_MAP(SetMultiRouteDlg, CBCGPDialog)
ON_BN_CLICKED(IDOK, &SetMultiRouteDlg::OnBnClickedOk)
ON_CBN_SELCHANGE(IDC_COMBO_HPT, &SetMultiRouteDlg::OnCbnSelchangeComboHpt)
END_MESSAGE_MAP()
BOOL SetMultiRouteDlg::OnInitDialog()
@ -39,6 +44,14 @@ BOOL SetMultiRouteDlg::OnInitDialog()
GetDlgItem( IDC_EDIT_HEIGHTINTERVAL )->SetWindowTextA("10");
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;
}
@ -75,3 +88,19 @@ void SetMultiRouteDlg::OnBnClickedOk()
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
#include "Resource.h"
#include "afxwin.h"
// SetMultiRouteDlg 对话框
@ -24,4 +25,12 @@ protected:
DECLARE_MESSAGE_MAP()
public:
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