Merge branch 'dev/cbwu'

master
cbwu 10 months ago
commit d38943e3d0

File diff suppressed because it is too large Load Diff

@ -407,7 +407,7 @@ extern "C" void WINAPI UpdateDataInfo(int index,const char* key,double value )
//功能:目标追踪测试接口
//输入经纬度点的像素大小默认20
extern "C" void WINAPI OnShowTargetPoint(const double lon, const double lat, const int pixelSize)
extern "C" void WINAPI OnShowTargetPoint(double lon, double lat, int pixelSize)
{
AFX_MANAGE_STATE(AfxGetAppModuleState());
if (g_bCreateMap)

@ -108,7 +108,7 @@ extern "C" _declspec(dllexport) void DrawCallBackPoint(const BYTE callbackMode,
//功能:目标追踪测试接口
//输入经纬度点的像素大小默认20
extern "C" _declspec(dllexport) void OnShowTargetPoint(const double lon, const double lat, const int pixelSize=20);
extern "C" _declspec(dllexport) void OnShowTargetPoint(double lon, double lat, int pixelSize);

@ -346,7 +346,7 @@ void CFlyLineDesign::OnSaveFlyLine()
memset(&pt, 0, sizeof(PtStruct));
//原点数据写入
fprintf(fp, "%d, %d, %lf, %lf, %.2lf, %d, %02X, %02X\n", designLineID, 0, g_gcsLon, g_gcsLat, 0.0, 0, 0, 2);
fprintf(fp, "%d, %d, %.7f, %.7f, %.2lf, %d, %02X, %02X\n", designLineID, 0, g_gcsLon, g_gcsLat, 0.0, 0, 0, 2);
//遍历航点集合数据
for ( int i = 0; i < m_linePtNums; i++ )
@ -356,11 +356,11 @@ void CFlyLineDesign::OnSaveFlyLine()
//将除最后一个点的数据写入文件
if ( i < (m_linePtNums-1))
{
fprintf(fp, "%d, %d, %lf, %lf, %.2lf, %d, %02X, %02X\n", designLineID, pt.nPt, pt.dX, pt.dY, pt.nH, pt.nV, pt.ch1, pt.ch2);
fprintf(fp, "%d, %d, %.7f, %.7f, %.2lf, %d, %02X, %02X\n", designLineID, pt.nPt, pt.dX, pt.dY, pt.nH, pt.nV, pt.ch1, pt.ch2);
}
else//将最后一个点的航段特征数据写入文件
{
fprintf(fp, "%d, %d, %lf, %lf, %.2lf, %d, %02X, %02X\n", designLineID, pt.nPt, pt.dX, pt.dY, pt.nH, pt.nV, pt.ch1, lineProperty);
fprintf(fp, "%d, %d, %.7f, %.7f, %.2lf, %d, %02X, %02X\n", designLineID, pt.nPt, pt.dX, pt.dY, pt.nH, pt.nV, pt.ch1, lineProperty);
}
}

@ -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
@ -679,6 +688,7 @@ BEGIN
MENUITEM "开始编辑", ID_EDIT_NODE
MENUITEM "修改航点", ID_EDIT_LINE
MENUITEM "保存编辑", ID_EDIT_SAVE
MENUITEM "批量航线", ID_COPE_LINE
END
POPUP "限制区"
BEGIN

@ -71,7 +71,7 @@ CGISDlg::CGISDlg(CWnd* pParent /*=NULL*/)
for (int i = 0;i<3;i++)
for (int i = 0;i<255;i++)
{
//航迹标绘图层ID
m_flyTrackLayerID[i] = -1;
@ -188,6 +188,17 @@ CGISDlg::CGISDlg(CWnd* pParent /*=NULL*/)
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;
tmpSurveyRegionLayerID = -1;
@ -583,6 +594,7 @@ BEGIN_MESSAGE_MAP(CGISDlg, CBCGPDialog)
ON_COMMAND(ID_EDIT_NODE, OnEditLine) //编辑航线
ON_COMMAND(ID_EDIT_LINE, ShowModifyPointDlg) //修改航点
ON_COMMAND(ID_EDIT_SAVE, ShowEditSaveDlg) //保存编辑
ON_COMMAND(ID_COPE_LINE, ShowMultiRouteSetting) //批量航线
/*
ON_COMMAND(ID_MODIFY_LINEPOINT, OnMapSelect); //修改航点航线
ON_COMMAND(ID_EDIT_SAVE, OnMapSelect); //保存编辑*/
@ -1074,7 +1086,7 @@ void CGISDlg::OnEraseTrack()
//清除航迹
void CGISDlg::EraseTrack(int uavid)
{
if (uavid<0||uavid>2)
if (uavid<0||uavid>255)
{
return;
}
@ -3717,7 +3729,7 @@ void CGISDlg::AddTargetPoint(const int nPt, const double dX, const double dY)
//说明创建专门用于绘制无人机的矢量面图层每次先删除上次标绘的Shp再重新标绘
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;
}
@ -4627,7 +4639,13 @@ void CGISDlg::DrawFlyLine(const DrawLineDataStruct lineData)
}
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
@ -4639,6 +4657,95 @@ void CGISDlg::DrawFlyLine(const DrawLineDataStruct lineData)
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)航线已经标注,清除显示
// 2)航线未标注,进行显示
@ -4968,6 +5094,21 @@ void CGISDlg::SetFlyLineShowStatus(const int lineID)
//标识置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
{
@ -4983,6 +5124,21 @@ void CGISDlg::SetFlyLineShowStatus(const int lineID)
CString str = LineRouteDlg.GetPathName(); //获取文件路径名
//OnShowGivenLine(GetFlyLineName(lineID));
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( "航路文件不存在!" ) );
return;
@ -5076,12 +5232,23 @@ void CGISDlg::OnShowGivenLine(const CString strLineFileName)
if (m_lineManage.ReadLineDataFromFile(lineDataGroup, strLineFileName))
{
//判断航线号是否正确lineID取值1-8,10-11,13add 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("航线号不正确!");
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;
/***************************测绘区域处理************************************/
if (ch == 0x03)
@ -5601,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
@ -5635,7 +5805,7 @@ void CGISDlg::OnEnddesign() //
if (IDOK == dlgSave.DoModal())
{
strFlyLineName = dlgSave.GetPathName();
pathName = ExtractFileName(strFlyLineName);
pathName = ExtractFileName(strFlyLineName,false);
////写出航线数据
FILE *fp = fopen(strFlyLineName, "w" );
@ -5683,8 +5853,9 @@ void CGISDlg::OnEnddesign() //
if (g_b981AMulti && bSaveMultiLine)
{
vector<vector<PtStruct>> resultLines;
GetMultiRouteLine(azmuth,lineInterval,numLine,m_pDesignLineStruct,m_designLinePointNum,resultLines);
SaveMultiRouteLine(pathName,heightInterval,resultLines);
GetMultiRouteLine(azmuth,lineInterval,numLine,m_pDesignLineStruct,m_designLinePointNum,resultLines,singlePointNumber);
vector<CString>savePathNameArr;
SaveMultiRouteLine(pathName,heightInterval,savePathNameArr,resultLines);
}
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;
double tmpLon,tmpLat;
vector<PtStruct> line;
double dist = 0;
double lineAzimuth = 0;
//bool bOneOffset = false;
for (int j=0;j< lineNumber;++j)
{
line.clear();
@ -8418,33 +8590,66 @@ 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];
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);
//CalculateTwoPtsAzimuth(azimuth,lineStruct[i].dX,lineStruct[i].dY,lineStruct[i+1].dX,lineStruct[i+1].dY,3);
if (i+1<nLinePts)
//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;
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//仅某一点水平方向偏移
{
CalculateTwoPtsDistanceAzimuth(dist,lineAzimuth,lineStruct[i].dX,lineStruct[i].dY,lineStruct[i+1].dX,lineStruct[i+1].dY,3);
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);
}
}
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;
for (int i=0;i<resultLines.size();++i)
@ -8453,21 +8658,76 @@ void CGISDlg::SaveMultiRouteLine(CString pathDirName,double heightInterval,const
CString tmp;
tmp.Format("-%d",i+2);
saveFileName = pathDirName + tmp + ".txt";
savePathNameArr.push_back(saveFileName);
//保存文件
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);
int j = 0;
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);
}
}
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)
{

@ -34,6 +34,7 @@
#include "TopologicalAnalysis.h"
#include "DlgMarker.h"
#include <map>
#include <array>
#include "MapElevation.h"
#include "../Include/8BMapDLL_type.h"
#include "SaveZoneDlg.h"
@ -247,6 +248,13 @@ public:
void ZoomToLocation(double lon,double lat);
private: // by Wu
//map<int,map<long,long>> m_subLineLayerID; //子航线线图层号
//map<int,map<long,long>> m_subLinePtLayerID; //子航线点图层号
long m_subLineLayerID[20][20]; //子航线线图层号
long m_subLinePtLayerID[20][20]; //子航线点图层号
bool m_pHaveDrawCopyLineFlag[20][20];
bool m_bShowCopyLine;
map<int,CString> m_lineFullPathName;
//
void ShowModifyPointDlg(int selectedPointID=0); //编辑航线时,显示航点设置对话框
void ShowEditSaveDlg(); //显示保存编辑对话框
@ -319,14 +327,14 @@ private:
bool m_bHaveAddMap;
//航迹标绘图层ID
long m_flyTrackLayerID[3];
long m_flyTrackLayerID[255];
//UAV航迹标绘图层ID
long m_UAVFlyTrackLayerID[3];
long m_UAVFlyTrackLayerID[255];
long m_UAVFlyTrackLayerID_ADS[MAX_PLANE_NUM_ADS];
//是否已经标绘了无人机的飞行轨迹
bool m_bFirstDrawUAVTrack[3];
bool m_bFirstDrawUAVTrack[255];
bool m_bFirstDrawUAVTrack_ADS[MAX_PLANE_NUM_ADS];
//地图显示区宽度、高度倒数
@ -506,7 +514,7 @@ private:
long m_CircleGuideLayer; //盘旋引导图层
int m_drawTrackPtNum[3];
int m_drawTrackPtNum[255];
//新航线设计的航点的最大个数 2016.01.06
int m_MaxNumofLinePt;
@ -713,6 +721,9 @@ private:
//功能:标绘飞行航线
//输入航线数据lineData
void DrawFlyLine(const DrawLineDataStruct lineData);
//功能:标绘飞行航线(批量航线)
//输入航线数据lineData
void DrawCopyFlyLine(const DrawLineDataStruct lineData);
afx_msg void OnUpdateLineDisplay1(CCmdUI* pCmdUI);
afx_msg void OnUpdateLineDisplay2(CCmdUI* pCmdUI);
@ -727,6 +738,9 @@ private:
//功能:清除已经标绘的航线
//输入航线编号lineID从0开始计数
void ClearDrawedLine(const int lineID);
//功能:清除已经标绘的航线(多机子航线)
//输入航线编号lineID从0开始计数
void ClearDrawedCopyLine(const int lineID,const int sublineID);
//功能:清除点图层标注信息
@ -983,12 +997,13 @@ public:
//功能:显示测绘航线设计对话框
void OnShowDesignSurveyLineDlg();
/****************************多机航线一键生成************************************/
void GetMultiRouteLine(double azimuth,double lineInterval,int lineNumber,PtStruct* lineStruct,int nLinePts,vector<vector<PtStruct>>& resultLines);
void SaveMultiRouteLine(CString pathDirName,double heightInterval,const 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();
/****************************吊舱目标追踪测试************************************/
long testLayer;
void OnShowTargetPoint(const double lon,const double lat,int pixelSize=20);
void OnShowTargetPoint(double lon,double lat,int pixelSize);
};
//{{AFX_INSERT_LOCATION}}

@ -97,6 +97,7 @@ extern bool CreateDirectory(const CString &strDir)
}
//提取没有后缀名的文件名
/*
extern CString ExtractFileName(CString fileName)
{
// 查找最后一个点的位置
@ -114,7 +115,7 @@ extern CString ExtractFileName(CString fileName)
// 如果没有找到点,说明没有后缀,直接显示文件名
return fileName;
}
}
}*/
//功能一个字节分成8位分别存储到数组中
@ -189,6 +190,58 @@ CString GetFlyLineName( const int lineID )
return (GetSoftwareCurrentDirectory() + _T( "\\route" ) + str + _T( ".txt" ));
}
CString GetFlyLineDirName( const int lineID )
{
CString str;
if (lineID<=5)
{
str.Format( "航线%d", lineID );
}
else if (lineID == 11)
{
str = "应急航线";
}
else if( lineID == 12 )
{
str = "电子围栏";
}
else if (lineID == 14)
{
str = "回收航线";
}
return (GetSoftwareCurrentDirectory() + _T( "\\Route\\" ) + str );
}
//获取文件路径字符串
CString ExtractDirPath(CString strFullPath)
{
int n=strFullPath.ReverseFind('\\')+1;
return strFullPath.Left(n);
}
//获取文件名字字符串
CString ExtractFileName(CString strFullPath,bool bIncludeType)
{
CString strFile;
int n=strFullPath.GetLength()-strFullPath.ReverseFind('\\')-1;
strFile=strFullPath.Right(n);
if (bIncludeType==false) //去除文件名后缀
{
n = strFile.ReverseFind('.');
return strFile.Left(n);
}
else
{
return strFile;
}
}
//获取文件类型
CString ExtractFileType(CString strFullPath)
{
int n=strFullPath.GetLength()-strFullPath.ReverseFind('.')-1;
return strFullPath.Right(n);
}
//可视域分析相关变量
/************************************************************************/

@ -173,7 +173,7 @@ extern bool SearchDirectory(const CString &strDir);
extern bool CreateDirectory(const CString &strDir);
//提取没有后缀名的文件名
extern CString ExtractFileName(CString fileName);
//extern CString ExtractFileName(CString fileName);
//功能一个字节分成8位分别存储到数组中
//输入字节oneByte
@ -193,6 +193,15 @@ extern CString GPSUTCTime2BeijingTime(const double utcTime);
//获得航线文件名输入航线号1、2、3、4、5
extern CString GetFlyLineName( const int lineID );
//获取航线文件夹名字
extern CString GetFlyLineDirName( const int lineID );
//获取文件路径字符串
extern CString ExtractDirPath(CString strFullPath);
//获取文件名字字符串
extern CString ExtractFileName(CString strFullPath,bool bIncludeType=true);
//获取文件类型
extern CString ExtractFileType(CString strFullPath);
const int LINEPTNUM = 256;

@ -1,13 +1,13 @@
//
// GISCONTROLDLG.RC2 - resources Microsoft Visual C++ does not edit directly
//
#ifdef APSTUDIO_INVOKED
#error this file is not editable by Microsoft Visual C++
#endif //APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
// Add manually edited resources here...
/////////////////////////////////////////////////////////////////////////////
//
// GISCONTROLDLG.RC2 - resources Microsoft Visual C++ does not edit directly
//
#ifdef APSTUDIO_INVOKED
#error this file is not editable by Microsoft Visual C++
#endif //APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
// Add manually edited resources here...
/////////////////////////////////////////////////////////////////////////////

@ -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
@ -426,14 +427,16 @@
#define ID__32940 32940
#define ID__DESIGNSURVEYLINE 32941
#define ID_DESIGNSURVEYLINE 32942
#define ID_32943 32943
#define ID_COPE_LINE 32944
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 1174
#define _APS_NEXT_COMMAND_VALUE 32943
#define _APS_NEXT_CONTROL_VALUE 1056
#define _APS_NEXT_COMMAND_VALUE 32945
#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