|
|
@ -71,7 +71,7 @@ CGISDlg::CGISDlg(CWnd* pParent /*=NULL*/)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0;i<3;i++)
|
|
|
|
for (int i = 0;i<255;i++)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
//航迹标绘图层ID
|
|
|
|
//航迹标绘图层ID
|
|
|
|
m_flyTrackLayerID[i] = -1;
|
|
|
|
m_flyTrackLayerID[i] = -1;
|
|
|
@ -188,6 +188,17 @@ CGISDlg::CGISDlg(CWnd* pParent /*=NULL*/)
|
|
|
|
|
|
|
|
|
|
|
|
m_CircleGuideLayer = -1; //盘旋引导图层
|
|
|
|
m_CircleGuideLayer = -1; //盘旋引导图层
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//多机子航线
|
|
|
|
|
|
|
|
for (int i=0;i<20;++i)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
for (int j=0;j<20;++j)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
m_subLineLayerID[i][j]=-1;
|
|
|
|
|
|
|
|
m_subLinePtLayerID[i][j]=-1;
|
|
|
|
|
|
|
|
m_pHaveDrawCopyLineFlag[i][j] = -1;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
m_bShowCopyLine = false;
|
|
|
|
/*******************************测绘航线********************************/
|
|
|
|
/*******************************测绘航线********************************/
|
|
|
|
surveyRegionLayerID = -1;
|
|
|
|
surveyRegionLayerID = -1;
|
|
|
|
tmpSurveyRegionLayerID = -1;
|
|
|
|
tmpSurveyRegionLayerID = -1;
|
|
|
@ -583,6 +594,7 @@ BEGIN_MESSAGE_MAP(CGISDlg, CBCGPDialog)
|
|
|
|
ON_COMMAND(ID_EDIT_NODE, OnEditLine) //编辑航线
|
|
|
|
ON_COMMAND(ID_EDIT_NODE, OnEditLine) //编辑航线
|
|
|
|
ON_COMMAND(ID_EDIT_LINE, ShowModifyPointDlg) //修改航点
|
|
|
|
ON_COMMAND(ID_EDIT_LINE, ShowModifyPointDlg) //修改航点
|
|
|
|
ON_COMMAND(ID_EDIT_SAVE, ShowEditSaveDlg) //保存编辑
|
|
|
|
ON_COMMAND(ID_EDIT_SAVE, ShowEditSaveDlg) //保存编辑
|
|
|
|
|
|
|
|
ON_COMMAND(ID_COPE_LINE, ShowMultiRouteSetting) //批量航线
|
|
|
|
/*
|
|
|
|
/*
|
|
|
|
ON_COMMAND(ID_MODIFY_LINEPOINT, OnMapSelect); //修改航点航线
|
|
|
|
ON_COMMAND(ID_MODIFY_LINEPOINT, OnMapSelect); //修改航点航线
|
|
|
|
ON_COMMAND(ID_EDIT_SAVE, OnMapSelect); //保存编辑*/
|
|
|
|
ON_COMMAND(ID_EDIT_SAVE, OnMapSelect); //保存编辑*/
|
|
|
@ -1074,7 +1086,7 @@ void CGISDlg::OnEraseTrack()
|
|
|
|
//清除航迹
|
|
|
|
//清除航迹
|
|
|
|
void CGISDlg::EraseTrack(int uavid)
|
|
|
|
void CGISDlg::EraseTrack(int uavid)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (uavid<0||uavid>2)
|
|
|
|
if (uavid<0||uavid>255)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -3717,7 +3729,7 @@ void CGISDlg::AddTargetPoint(const int nPt, const double dX, const double dY)
|
|
|
|
//说明:创建专门用于绘制无人机的矢量面图层,每次先删除上次标绘的Shp,再重新标绘
|
|
|
|
//说明:创建专门用于绘制无人机的矢量面图层,每次先删除上次标绘的Shp,再重新标绘
|
|
|
|
void CGISDlg::DrawUAV(int uavid, const double dX, const double dY, const double yaw,bool control)
|
|
|
|
void CGISDlg::DrawUAV(int uavid, const double dX, const double dY, const double yaw,bool control)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (uavid<0||uavid>2)
|
|
|
|
if (uavid<0||uavid>255)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -4627,7 +4639,13 @@ void CGISDlg::DrawFlyLine(const DrawLineDataStruct lineData)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
|
strText.Format(_T("%d-%d"), lineData.lineID, lineData.pts[i].nPt);
|
|
|
|
/*
|
|
|
|
|
|
|
|
if (g_b981AMulti && lineData.pts[0].ch1 > 1)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
strText.Format(_T("%d(%d)-%d"), lineData.lineID, lineData.pts[0].ch1,lineData.pts[i].nPt);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else*/
|
|
|
|
|
|
|
|
strText.Format(_T("%d-%d"), lineData.lineID, lineData.pts[i].nPt);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//增加Labels
|
|
|
|
//增加Labels
|
|
|
@ -4639,6 +4657,95 @@ void CGISDlg::DrawFlyLine(const DrawLineDataStruct lineData)
|
|
|
|
m_map.Redraw();
|
|
|
|
m_map.Redraw();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//功能:标绘飞行航线(批量航线)
|
|
|
|
|
|
|
|
//输入:航线数据lineData
|
|
|
|
|
|
|
|
void CGISDlg::DrawCopyFlyLine(const DrawLineDataStruct lineData)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
//field索引值
|
|
|
|
|
|
|
|
long fieldIndex = 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//航线索引号
|
|
|
|
|
|
|
|
int lineID = lineData.lineID-1;
|
|
|
|
|
|
|
|
//子航线索引号
|
|
|
|
|
|
|
|
int sublineID = lineData.pts[0].ch1-1;
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
|
|
map<long,long> subLineLayerIDs;
|
|
|
|
|
|
|
|
map<long,long> subLinePtLayerIDs;
|
|
|
|
|
|
|
|
if (m_subLineLayerID.find(lineData.lineID)!=m_subLineLayerID.end())
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
subLineLayerIDs = m_subLineLayerID[lineData.lineID];
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (m_subLinePtLayerID.find(lineData.lineID)!=m_subLinePtLayerID.end())
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
subLinePtLayerIDs = m_subLinePtLayerID[lineData.lineID];
|
|
|
|
|
|
|
|
}*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//没有目标标绘SHP图层,创建该图层
|
|
|
|
|
|
|
|
if (m_subLineLayerID[lineID][sublineID] ==-1)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
//创建线图层
|
|
|
|
|
|
|
|
CreateEmptyShapfile(m_subLineLayerID[lineID][sublineID], 1, /*RGB(0,255,0)*/LineClr[lineID]);
|
|
|
|
|
|
|
|
//创建线图层成功
|
|
|
|
|
|
|
|
m_pHaveDrawCopyLineFlag[lineID][sublineID] = true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//没有目标标绘SHP图层,创建该图层
|
|
|
|
|
|
|
|
if (m_subLinePtLayerID[lineID][sublineID] ==-1)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
//创建点图层
|
|
|
|
|
|
|
|
CreateEmptyShapfile(m_subLinePtLayerID[lineID][sublineID], 0, /*RGB(0,255,0)*/LineClr[lineID]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//创建线图层成功
|
|
|
|
|
|
|
|
m_pHaveDrawCopyLineFlag[lineID][sublineID] = true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//向点图层加入航点数据
|
|
|
|
|
|
|
|
AddPoints2PointShapfile(m_subLinePtLayerID[lineID][sublineID], lineData.pts, lineData.pointNum);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//向线图层加入航点数据
|
|
|
|
|
|
|
|
AddPoints2LineShapfile(m_subLineLayerID[lineID][sublineID], lineData.linePts, lineData.linePointNum);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/////////////////////往SHP图层中加入目标点标注信息///////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Label集合
|
|
|
|
|
|
|
|
CLabels labesPtr;
|
|
|
|
|
|
|
|
labesPtr = (m_map.GetShapefile(m_subLinePtLayerID[lineID][sublineID])).GetLabels();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
labesPtr.SetFontColor(/*RGB(255,0,0)*/LineClr[lineID]);
|
|
|
|
|
|
|
|
labesPtr.SetAlignment(1);
|
|
|
|
|
|
|
|
labesPtr.SetFontBold(true);
|
|
|
|
|
|
|
|
labesPtr.SetFontName(LPCTSTR("黑体"));
|
|
|
|
|
|
|
|
labesPtr.SetFontSize(16);
|
|
|
|
|
|
|
|
labesPtr.put_FontSize2(16);
|
|
|
|
|
|
|
|
labesPtr.SetFrameVisible(false);
|
|
|
|
|
|
|
|
labesPtr.SetAvoidCollisions(FALSE);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CString strText = _T("");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//标绘航点的名称
|
|
|
|
|
|
|
|
for (long i=0; i<lineData.pointNum; i++)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
//标注信息
|
|
|
|
|
|
|
|
if ( 14 ==lineData.lineID)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
strText.Format(_T("自主着陆点(%d)") /*lineData.lineID, */ /*lineData.pts[i].nPt*/,lineData.pts[0].ch1);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
strText.Format(_T("%d(%d)-%d"), lineData.lineID, lineData.pts[0].ch1,lineData.pts[i].nPt);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//增加Labels
|
|
|
|
|
|
|
|
labesPtr.AddLabel((LPCTSTR)strText, lineData.pts[i].dX, lineData.pts[i].dY, 0, 0);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/////////////////////往SHP图层中加入目标点标注信息///////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//重新绘制
|
|
|
|
|
|
|
|
m_map.Redraw();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//功能:根据地图控件的显示分辨率移动地图控件
|
|
|
|
//功能:根据地图控件的显示分辨率移动地图控件
|
|
|
@ -4949,6 +5056,25 @@ void CGISDlg::ClearDrawedLine(const int lineID)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//功能:清除已经标绘的航线(多机子航线)
|
|
|
|
|
|
|
|
//输入:航线编号lineID,从0开始计数
|
|
|
|
|
|
|
|
void CGISDlg::ClearDrawedCopyLine(const int lineID,const int sublineID)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (m_pHaveDrawCopyLineFlag[lineID][sublineID])
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
//清除标绘的点矢量图层
|
|
|
|
|
|
|
|
ClearPointShape(m_subLinePtLayerID[lineID][sublineID]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//清除已经标绘的航线
|
|
|
|
|
|
|
|
m_map.RemoveLayer(m_subLineLayerID[lineID][sublineID]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
m_pHaveDrawCopyLineFlag[lineID][sublineID] = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
m_subLineLayerID[lineID][sublineID] = -1;
|
|
|
|
|
|
|
|
m_subLinePtLayerID[lineID][sublineID] = -1;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//功能:处理快捷菜单与航线显示相关的操作
|
|
|
|
//功能:处理快捷菜单与航线显示相关的操作
|
|
|
|
// 1)航线已经标注,清除显示
|
|
|
|
// 1)航线已经标注,清除显示
|
|
|
|
// 2)航线未标注,进行显示
|
|
|
|
// 2)航线未标注,进行显示
|
|
|
@ -4968,6 +5094,21 @@ void CGISDlg::SetFlyLineShowStatus(const int lineID)
|
|
|
|
|
|
|
|
|
|
|
|
//标识置false
|
|
|
|
//标识置false
|
|
|
|
m_pHaveDrawLineFlag[lineIndex] = false;
|
|
|
|
m_pHaveDrawLineFlag[lineIndex] = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (g_b981AMulti)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
for (int i=0;i<10;++i)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (m_pHaveDrawCopyLineFlag[lineIndex][i])
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
ClearDrawedCopyLine(lineIndex,i);
|
|
|
|
|
|
|
|
//刷新
|
|
|
|
|
|
|
|
m_map.Redraw2(mapWindow::RedrawMinimal);
|
|
|
|
|
|
|
|
//m_map.Redraw();
|
|
|
|
|
|
|
|
m_pHaveDrawCopyLineFlag[lineIndex][i] = false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -4983,6 +5124,21 @@ void CGISDlg::SetFlyLineShowStatus(const int lineID)
|
|
|
|
CString str = LineRouteDlg.GetPathName(); //获取文件路径名
|
|
|
|
CString str = LineRouteDlg.GetPathName(); //获取文件路径名
|
|
|
|
//OnShowGivenLine(GetFlyLineName(lineID));
|
|
|
|
//OnShowGivenLine(GetFlyLineName(lineID));
|
|
|
|
OnShowGivenLine(str);
|
|
|
|
OnShowGivenLine(str);
|
|
|
|
|
|
|
|
if (g_b981AMulti)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
CString tmp;
|
|
|
|
|
|
|
|
m_bShowCopyLine = true;
|
|
|
|
|
|
|
|
for (int i=2;i<=10;++i)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
tmp.Format("-%d",i);
|
|
|
|
|
|
|
|
CString dirPath = ExtractDirPath(str);
|
|
|
|
|
|
|
|
CString fileName = ExtractFileName(str,false);
|
|
|
|
|
|
|
|
CString fileType = ExtractFileType(str);
|
|
|
|
|
|
|
|
CString pathName = dirPath + "\\" + fileName + tmp + "." + fileType;
|
|
|
|
|
|
|
|
OnShowGivenLine(pathName);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
m_bShowCopyLine = false;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -5060,7 +5216,7 @@ void CGISDlg::OnShowGivenLine(const CString strLineFileName)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//判断文件是否存在
|
|
|
|
//判断文件是否存在
|
|
|
|
if (!SearchDirectory(strLineFileName))
|
|
|
|
if (!SearchDirectory(strLineFileName) && !m_bShowCopyLine)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
BCGPMessageBox( _T( "航路文件不存在!" ) );
|
|
|
|
BCGPMessageBox( _T( "航路文件不存在!" ) );
|
|
|
|
return;
|
|
|
|
return;
|
|
|
@ -5076,12 +5232,23 @@ void CGISDlg::OnShowGivenLine(const CString strLineFileName)
|
|
|
|
if (m_lineManage.ReadLineDataFromFile(lineDataGroup, strLineFileName))
|
|
|
|
if (m_lineManage.ReadLineDataFromFile(lineDataGroup, strLineFileName))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
//判断航线号是否正确(lineID取值1-8,10-11,13)(add by jackwong 2018.08.01)
|
|
|
|
//判断航线号是否正确(lineID取值1-8,10-11,13)(add by jackwong 2018.08.01)
|
|
|
|
if(lineDataGroup.lineID<1 || /*(*/lineDataGroup.lineID>14 /*&& lineDataGroup.lineID<10)*/ /*|| lineDataGroup.lineID==14 *//*|| lineDataGroup.lineID>13*/)
|
|
|
|
if(lineDataGroup.lineID<1 || lineDataGroup.lineID>14 )
|
|
|
|
{
|
|
|
|
{
|
|
|
|
BCGPMessageBox("航线号不正确!");
|
|
|
|
BCGPMessageBox("航线号不正确!");
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
m_lineFullPathName[lineDataGroup.lineID] = strLineFileName;
|
|
|
|
|
|
|
|
if (lineDataGroup.pts[0].ch1>1)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
//清除标绘的航线
|
|
|
|
|
|
|
|
ClearDrawedCopyLine(lineDataGroup.lineID-1,lineDataGroup.pts[0].ch1);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//标绘航线
|
|
|
|
|
|
|
|
DrawCopyFlyLine(lineDataGroup);
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int ch = lineDataGroup.linePts[lineDataGroup.pointNum-1].ch1;
|
|
|
|
int ch = lineDataGroup.linePts[lineDataGroup.pointNum-1].ch1;
|
|
|
|
/***************************测绘区域处理************************************/
|
|
|
|
/***************************测绘区域处理************************************/
|
|
|
|
if (ch == 0x03)
|
|
|
|
if (ch == 0x03)
|
|
|
@ -5601,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
|
|
|
@ -5635,7 +5805,7 @@ void CGISDlg::OnEnddesign() //
|
|
|
|
if (IDOK == dlgSave.DoModal())
|
|
|
|
if (IDOK == dlgSave.DoModal())
|
|
|
|
{
|
|
|
|
{
|
|
|
|
strFlyLineName = dlgSave.GetPathName();
|
|
|
|
strFlyLineName = dlgSave.GetPathName();
|
|
|
|
pathName = ExtractFileName(strFlyLineName);
|
|
|
|
pathName = ExtractFileName(strFlyLineName,false);
|
|
|
|
|
|
|
|
|
|
|
|
////写出航线数据
|
|
|
|
////写出航线数据
|
|
|
|
FILE *fp = fopen(strFlyLineName, "w" );
|
|
|
|
FILE *fp = fopen(strFlyLineName, "w" );
|
|
|
@ -5683,8 +5853,9 @@ 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);
|
|
|
|
SaveMultiRouteLine(pathName,heightInterval,resultLines);
|
|
|
|
vector<CString>savePathNameArr;
|
|
|
|
|
|
|
|
SaveMultiRouteLine(pathName,heightInterval,savePathNameArr,resultLines);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
memset(m_pDesignLineStruct, 0, sizeof(PtStruct)*m_lineMaxPointNum); //初始化新建一条航线
|
|
|
|
memset(m_pDesignLineStruct, 0, sizeof(PtStruct)*m_lineMaxPointNum); //初始化新建一条航线
|
|
|
@ -8402,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();
|
|
|
@ -8418,33 +8590,66 @@ 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;
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//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);
|
|
|
|
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;
|
|
|
|
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CGISDlg::SaveMultiRouteLine(CString pathDirName,double heightInterval,const vector<vector<PtStruct>>& resultLines)
|
|
|
|
void CGISDlg::SaveMultiRouteLine(CString pathDirName,double heightInterval,vector<CString>& savePathNameArr,const vector<vector<PtStruct>>& resultLines)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
CString saveFileName;
|
|
|
|
CString saveFileName;
|
|
|
|
for (int i=0;i<resultLines.size();++i)
|
|
|
|
for (int i=0;i<resultLines.size();++i)
|
|
|
@ -8453,21 +8658,76 @@ void CGISDlg::SaveMultiRouteLine(CString pathDirName,double heightInterval,const
|
|
|
|
CString tmp;
|
|
|
|
CString tmp;
|
|
|
|
tmp.Format("-%d",i+2);
|
|
|
|
tmp.Format("-%d",i+2);
|
|
|
|
saveFileName = pathDirName + tmp + ".txt";
|
|
|
|
saveFileName = pathDirName + tmp + ".txt";
|
|
|
|
|
|
|
|
savePathNameArr.push_back(saveFileName);
|
|
|
|
//保存文件
|
|
|
|
//保存文件
|
|
|
|
FILE* fp = fopen(saveFileName,"w");
|
|
|
|
FILE* fp = fopen(saveFileName,"w");
|
|
|
|
fprintf(fp,"%d, 0, %.7f, %.7f, %.2f, 0, 00, 03\n", line[0].nL, 0.0, 0.0, 0.0);
|
|
|
|
fprintf(fp,"%d, 0, %.7f, %.7f, %.2f, 0, 00, 03\n", line[0].nL, 0.0, 0.0, 0.0);
|
|
|
|
int j = 0;
|
|
|
|
int j = 0;
|
|
|
|
for (j;j<line.size()-1;++j)
|
|
|
|
for (j;j<line.size()-1;++j)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
fprintf(fp,"%d, %d, %.7f, %.7f, %.2f, 0, 00, 03\n", line[j].nL, j+1,line[j].dX, line[j].dY,line[j].nH + heightInterval*(i+1));
|
|
|
|
if (j==0) //第一个航线存储批量航线子航线号
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
fprintf(fp,"%d, %d, %.7f, %.7f, %.2f, 0, %02X, 03\n", line[j].nL, j+1,line[j].dX, line[j].dY,line[j].nH + heightInterval*(i+1),i+2);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
fprintf(fp,"%d, %d, %.7f, %.7f, %.2f, 0, 00, 03\n", line[j].nL, j+1,line[j].dX, line[j].dY,line[j].nH + heightInterval*(i+1));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
fprintf(fp,"%d, %d, %.7f, %.7f, %.2f, 0, %02X, 01\n", line[j].nL, j+1,line[j].dX, line[j].dY,line[j].nH + heightInterval*(i+1),line[j].ch2);
|
|
|
|
fprintf(fp,"%d, %d, %.7f, %.7f, %.2f, 0, %02X, 01\n", line[j].nL, j+1,line[j].dX, line[j].dY,line[j].nH + heightInterval*(i+1),line[j].ch1);
|
|
|
|
fclose(fp);
|
|
|
|
fclose(fp);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void CGISDlg::ShowMultiRouteSetting()
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (!m_bSelectFeatureFlag || m_lineSelectedID==-1) return;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//批量航线设置
|
|
|
|
|
|
|
|
double azmuth,heightInterval,lineInterval,numLine;
|
|
|
|
|
|
|
|
bool bSaveMultiLine = false;
|
|
|
|
|
|
|
|
CString pathName;
|
|
|
|
|
|
|
|
vector<CString>pathNameArr;
|
|
|
|
|
|
|
|
if (g_b981AMulti)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
SetMultiRouteDlg multiRouteDlg;
|
|
|
|
|
|
|
|
DrawLineDataStruct selectLineData = m_ShowedLineDataList[m_lineSelectedID];
|
|
|
|
|
|
|
|
multiRouteDlg.SetPointNumber(selectLineData.pointNum);
|
|
|
|
|
|
|
|
if (multiRouteDlg.DoModal() == IDOK )
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
azmuth = multiRouteDlg.azmuth;
|
|
|
|
|
|
|
|
heightInterval = multiRouteDlg.heightInterval;
|
|
|
|
|
|
|
|
lineInterval = multiRouteDlg.lineInterval;
|
|
|
|
|
|
|
|
numLine = multiRouteDlg.numLine;
|
|
|
|
|
|
|
|
bSaveMultiLine = true;
|
|
|
|
|
|
|
|
int hPtNumber = multiRouteDlg.GetHPointNumber();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CString selectLinePath = m_lineFullPathName[m_lineSelectedID];
|
|
|
|
|
|
|
|
if (ExtractFileType(selectLinePath) == ".route") return; // 已装订的航线不允许批量生成
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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,hPtNumber);
|
|
|
|
|
|
|
|
SaveMultiRouteLine(pathName,heightInterval,pathNameArr,resultLines);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
bSaveMultiLine = false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ClearHighLightLine();
|
|
|
|
|
|
|
|
m_bSelectFeatureFlag = false;
|
|
|
|
|
|
|
|
m_lineSelectedID==-1;
|
|
|
|
|
|
|
|
m_map.SetCursorMode(mapWindow::tkCursorMode::cmNone);
|
|
|
|
|
|
|
|
for (int i=0;i<pathNameArr.size();++i)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
OnShowGivenLine(pathNameArr.at(i));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CGISDlg::OnShowTargetPoint(const double lon,const double lat,int pixelSize)
|
|
|
|
void CGISDlg::OnShowTargetPoint(double lon,double lat,int pixelSize)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (testLayer!=-1)
|
|
|
|
if (testLayer!=-1)
|
|
|
|
{
|
|
|
|
{
|
|
|
|