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];