From cdd403e5e02c1ead1f976c66d5f70af8696978d8 Mon Sep 17 00:00:00 2001 From: cbwu <504-wuchengbo@htsdfp.com> Date: Fri, 23 Aug 2024 15:36:25 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=A4=9A=E6=9C=BA?= =?UTF-8?q?=E8=87=AA=E4=B8=BB=E7=9D=80=E9=99=86=E7=82=B9=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E9=97=AE=E9=A2=98=EF=BC=8C=E5=AF=B9=E5=A4=96=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E8=87=AA=E4=B8=BB=E7=9D=80=E9=99=86=E7=82=B9=E4=B8=8E=E9=A3=9E?= =?UTF-8?q?=E6=9C=BA=E8=BF=9E=E7=BA=BF=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ExportQBGISCtrlClass.cpp | 22 ++++++++++++ ExportQBGISCtrlClass.h | 7 +++- GISControlDlg.vcxproj | 1 + GISDlg.cpp | 73 +++++++++++++++++++++++++++++----------- GISDlg.h | 9 ++++- 5 files changed, 91 insertions(+), 21 deletions(-) diff --git a/ExportQBGISCtrlClass.cpp b/ExportQBGISCtrlClass.cpp index ac77651..7631ca4 100644 --- a/ExportQBGISCtrlClass.cpp +++ b/ExportQBGISCtrlClass.cpp @@ -414,4 +414,26 @@ extern "C" void WINAPI OnShowTargetPoint(double lon, double lat, int pixelSize) { g_mapShowDlg.OnShowTargetPoint(lon,lat,pixelSize); } +} + +//功能:显示自主着陆点与飞机的连线 +//输入:飞机ID,飞机经纬度,显示/清除,bShow为false时,uavLon,uavLat随意设置,无实际作用 +extern "C" void WINAPI ShowLine14Ex(int uavID,double uavLon,double uavLat,bool bShow) +{ + AFX_MANAGE_STATE(AfxGetAppModuleState()); + if (g_bCreateMap) + { + g_mapShowDlg.ShowLine14Ex(uavID,uavLon,uavLat,bShow); + } +} + +//功能:设置装订的自主着陆点坐标 +//输入:飞机ID,自主着陆点经纬度 +extern "C" void WINAPI SetBindLine14Coordinate(int uavID,double lon,double lat) +{ + AFX_MANAGE_STATE(AfxGetAppModuleState()); + if (g_bCreateMap) + { + g_mapShowDlg.SetBindLine14Coordinate(uavID,lon,lat); + } } \ No newline at end of file diff --git a/ExportQBGISCtrlClass.h b/ExportQBGISCtrlClass.h index 848e684..aff09b1 100644 --- a/ExportQBGISCtrlClass.h +++ b/ExportQBGISCtrlClass.h @@ -111,7 +111,12 @@ extern "C" _declspec(dllexport) void DrawCallBackPoint(const BYTE callbackMode, extern "C" _declspec(dllexport) void OnShowTargetPoint(double lon, double lat, int pixelSize); +//功能:显示自主着陆点与飞机的连线 +//输入:飞机ID,飞机经纬度,显示/清除,bShow为false时,uavLon,uavLat随意设置,无实际作用 +extern "C" _declspec(dllexport) void ShowLine14Ex(int uavID,double uavLon,double uavLat,bool bShow); - +//功能:设置装订的自主着陆点坐标 +//输入:飞机ID,自主着陆点经纬度 +extern "C" _declspec(dllexport) void SetBindLine14Coordinate(int uavID,double lon,double lat); //#endif \ No newline at end of file diff --git a/GISControlDlg.vcxproj b/GISControlDlg.vcxproj index 1c2f784..d874ef7 100644 --- a/GISControlDlg.vcxproj +++ b/GISControlDlg.vcxproj @@ -61,6 +61,7 @@ ..\$(Configuration)\ $(Configuration)\ + GISControlDlgUAV diff --git a/GISDlg.cpp b/GISDlg.cpp index b61cca7..0092985 100644 --- a/GISDlg.cpp +++ b/GISDlg.cpp @@ -953,6 +953,7 @@ void CGISDlg::OnMapZoomOut() m_bLDSetPoint = FALSE; m_bSelectFeatureFlag = false; + } //地图漫游 @@ -974,7 +975,6 @@ void CGISDlg::OnMapMove() m_bLDSetPoint = FALSE; m_bSelectFeatureFlag = false; - } @@ -4618,22 +4618,14 @@ void CGISDlg::DrawFlyLine(const DrawLineDataStruct lineData) //Label集合 CLabels labesPtr; labesPtr = (m_map.GetShapefile(m_ppPlanLineShpLayerIDArr[lineID][0])).GetLabels(); - - //CLabelCategory labelCategory = labesPtr.AddCategory(_T("红色")); - //labelCategory.SetFontColor(/*RGB(255,0,0)*/LineClr[lineID]); - //labelCategory.SetAlignment(1); - //labelCategory.SetFontBold(TRUE); - //labelCategory.SetFontName(LPCTSTR("黑体")); - //labelCategory.SetFontSize(12); - //labesPtr.SetAvoidCollisions(FALSE); 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.SetFontSize(12); + labesPtr.put_FontSize2(12); labesPtr.SetFrameVisible(false); - labesPtr.SetAvoidCollisions(FALSE); + labesPtr.SetAvoidCollisions(false); CString strText = _T(""); @@ -4644,7 +4636,7 @@ void CGISDlg::DrawFlyLine(const DrawLineDataStruct lineData) //标注信息 if ( 14 ==lineData.lineID) { - strText.Format(_T("自主着陆点") /*lineData.lineID, */ /*lineData.pts[i].nPt*/); + strText.Format(_T("着陆点") /*lineData.lineID, */ /*lineData.pts[i].nPt*/); } else { @@ -4715,10 +4707,10 @@ void CGISDlg::DrawCopyFlyLine(const DrawLineDataStruct lineData) labesPtr.SetAlignment(1); labesPtr.SetFontBold(true); labesPtr.SetFontName(LPCTSTR("黑体")); - labesPtr.SetFontSize(16); - labesPtr.put_FontSize2(16); + labesPtr.SetFontSize(12); + labesPtr.put_FontSize2(12); labesPtr.SetFrameVisible(false); - labesPtr.SetAvoidCollisions(FALSE); + labesPtr.SetAvoidCollisions(false); CString strText = _T(""); @@ -4729,7 +4721,7 @@ void CGISDlg::DrawCopyFlyLine(const DrawLineDataStruct lineData) //标注信息 if ( 14 ==lineData.lineID) { - strText.Format(_T("自主着陆点(%d)") /*lineData.lineID, */ /*lineData.pts[i].nPt*/,lineData.pts[0].nV); + strText.Format(_T("着陆点%d") /*lineData.lineID, */ /*lineData.pts[i].nPt*/,lineData.pts[0].nV); } else { @@ -5124,6 +5116,8 @@ void CGISDlg::SetFlyLineShowStatus(const int lineID) OnShowGivenLine(str); if (g_b981AMulti) { + if (lineIndex == 13) return;//自主着陆点 + CString tmp; m_bShowCopyLine = true; for (int i=2;i<=10;++i) @@ -5237,10 +5231,10 @@ void CGISDlg::OnShowGivenLine(const CString strLineFileName) } m_lineFullPathName[lineDataGroup.lineID] = strLineFileName; - if (lineDataGroup.pts[0].nV>1) + if (lineDataGroup.pts[0].nV>0) //多机ID号 { //清除标绘的航线 - ClearDrawedCopyLine(lineDataGroup.lineID-1,lineDataGroup.pts[0].nV); + ClearDrawedCopyLine(lineDataGroup.lineID-1,lineDataGroup.pts[0].nV-1); //标绘航线 DrawCopyFlyLine(lineDataGroup); @@ -8738,7 +8732,48 @@ void CGISDlg::OnShowTargetPoint(double lon,double lat,int pixelSize) m_map.Redraw(); } +//显示自主着陆点与飞机的连线 +void CGISDlg::ShowLine14Ex(int uavID,double uavLon,double uavLat,bool bShow) +{ + if (bShow) + { + //图层已存在,先删除 + auto it = m_TempLine14LayerID.find(uavID); + if (it!=m_TempLine14LayerID.end()) + { + m_map.ClearDrawing((*it).second); + m_TempLine14LayerID.erase(it); + } + //自主着陆点坐标 + auto it1 = m_CoordinateBindLine14.find(uavID); + if (it1==m_CoordinateBindLine14.end()) return; + //绘制连线 + long layer = m_map.NewDrawing(1); + m_map.DrawLineEx(layer,uavLon,uavLat,(*it1).second.x,(*it1).second.y,2,LineClr[13]); + m_TempLine14LayerID[uavID] = layer; + m_map.Redraw2(mapWindow::RedrawMinimal); + } + else + { + //图层已存在,先删除 + auto it = m_TempLine14LayerID.find(uavID); + if (it!=m_TempLine14LayerID.end()) + { + m_map.ClearDrawing((*it).second); + m_map.Redraw2(mapWindow::RedrawMinimal); + m_TempLine14LayerID.erase(it); + } + } +} +//设置装订的自主着陆点坐标 +void CGISDlg::SetBindLine14Coordinate(int uavID,double lon,double lat) +{ + Point2D pt; + pt.x = lon; + pt.y = lat; + m_CoordinateBindLine14[uavID] = pt; +} diff --git a/GISDlg.h b/GISDlg.h index 88b42d5..f44ea72 100644 --- a/GISDlg.h +++ b/GISDlg.h @@ -247,9 +247,16 @@ public: */ void ZoomToLocation(double lon,double lat); -private: // by Wu + //显示自主着陆点与飞机的连线 + void ShowLine14Ex(int uavID,double uavLon,double uavLat,bool bShow); + //设置装订的自主着陆点坐标 + void SetBindLine14Coordinate(int uavID,double lon,double lat); +private: //map> m_subLineLayerID; //子航线线图层号 //map> m_subLinePtLayerID; //子航线点图层号 + map m_TempLine14LayerID; //存储自主着陆点与飞机的连线图层 + map m_CoordinateBindLine14; //存储已装订的自主着陆点坐标,用于与飞机连线 + long m_subLineLayerID[20][255]; //子航线线图层号 long m_subLinePtLayerID[20][255]; //子航线点图层号 bool m_pHaveDrawCopyLineFlag[20][255];