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