wyq 1 рік тому
батько
коміт
3b1654a55e

BIN
XdCxRhDW.Api/AddIns/GDOP误差椭圆/DLL_SCXPlot.dll


+ 69 - 38
XdCxRhDW.Api/AddIns/GDOP误差椭圆/GDOP.h

@@ -28,9 +28,9 @@ extern "C"
 	/// satllh :卫星位置
 	/// 返回值:0 成功
 	///
-	GDOP_EXPORT int Gdop3SatRef(char *mainLines, char *adaj1Lines, char *adaj2Lines, long long captime, double *refPos
+	GDOP_EXPORT int Gdop3SatRef(char* mainLines, char* adaj1Lines, char* adaj2Lines, long long captime, double* refPos
 		, double dtousErr, double ephLocErr
-		, double *level, int levlen, int *resCount, double **res, double *satllh);
+		, double* level, int levlen, int* resCount, double** res, double* satllh);
 
 	///
 	/// 获取三星双时差GDOP  带参考
@@ -47,9 +47,9 @@ extern "C"
 	/// satllh :卫星位置
 	/// 返回值:0 成功
 	///
-	GDOP_EXPORT int Gdop3SatRefByXyz(double *mainxyz, double *adaj1xyz, double *adaj2xyz, double *refPos
+	GDOP_EXPORT int Gdop3SatRefByXyz(double* mainxyz, double* adaj1xyz, double* adaj2xyz, double* refPos
 		, double dtousErr, double ephLocErr
-		, double *level, int levlen, int *resCount, double **res, double *satllh);
+		, double* level, int levlen, int* resCount, double** res, double* satllh);
 
 	///
 	/// 获取三星双时差GDOP  无参考
@@ -66,9 +66,9 @@ extern "C"
 	/// satllh :卫星位置
 	/// 返回值:0 成功
 	///
-	GDOP_EXPORT int Gdop3SatNoRef(char *mainLines, char *adaj1Lines, char *adaj2Lines, long long captime
+	GDOP_EXPORT int Gdop3SatNoRef(char* mainLines, char* adaj1Lines, char* adaj2Lines, long long captime
 		, double dtousErr, double ephLocErr
-		, double *level, int levlen, int *resCount, double **res, double *satllh);
+		, double* level, int levlen, int* resCount, double** res, double* satllh);
 
 	///
 	/// 获取三星双时差GDOP  无参考
@@ -84,9 +84,9 @@ extern "C"
 	/// satllh :卫星位置
 	/// 返回值:0 成功
 	///
-	GDOP_EXPORT int Gdop3SatNoRefByXyz(double *mainxyz, double *adaj1xyz, double *adaj2xyz
+	GDOP_EXPORT int Gdop3SatNoRefByXyz(double* mainxyz, double* adaj1xyz, double* adaj2xyz
 		, double dtousErr, double ephLocErr
-		, double *level, int levlen, int *resCount, double **res, double *satllh);
+		, double* level, int levlen, int* resCount, double** res, double* satllh);
 
 	///
 	/// 获取双星GDOP
@@ -107,9 +107,9 @@ extern "C"
 	/// satllh :卫星位置
 	/// 返回值:0 成功
 	///
-	GDOP_EXPORT int Gdop2SatDRef(char *mainLines, char *adajLines, long long captime, double *refPos
+	GDOP_EXPORT int Gdop2SatDRef(char* mainLines, char* adajLines, long long captime, double* refPos
 		, double fuHz1, double fuHz2, double dtousErr, double dfoHzErr, double ephLocErr, double ephVLocErr
-		, double *level, int levlen, int *resCount, double **res, double *satllh);
+		, double* level, int levlen, int* resCount, double** res, double* satllh);
 
 	///
 	/// 获取双星GDOP
@@ -129,9 +129,9 @@ extern "C"
 	/// satllh :卫星位置
 	/// 返回值:0 成功
 	///
-	GDOP_EXPORT int Gdop2SatDRefByXyz(double *mainxyz, double *adajxyz, double *refPos
+	GDOP_EXPORT int Gdop2SatDRefByXyz(double* mainxyz, double* adajxyz, double* refPos
 		, double fuHz1, double fuHz2, double dtousErr, double dfoHzErr, double ephLocErr, double ephVLocErr
-		, double *level, int levlen, int *resCount, double **res, double *satllh);
+		, double* level, int levlen, int* resCount, double** res, double* satllh);
 
 	///
 	/// 获取三星双频差GDOP
@@ -152,9 +152,9 @@ extern "C"
 	/// satllh :卫星位置
 	/// 返回值:0 成功
 	///
-	GDOP_EXPORT int Gdop3SatDF(char *mainLines, char *adaj1Lines, char *adaj2Lines, long long captime, double *refPos
+	GDOP_EXPORT int Gdop3SatDF(char* mainLines, char* adaj1Lines, char* adaj2Lines, long long captime, double* refPos
 		, double fuHz1, double fuHz2, double dfo_err, double eph_pos_err, double eph_vel_err
-		, double *level, int levlen, int *resCount, double **res, double *satllh);
+		, double* level, int levlen, int* resCount, double** res, double* satllh);
 
 	///
 	/// 获取三星双频差GDOP
@@ -174,9 +174,9 @@ extern "C"
 	/// satllh :卫星位置
 	/// 返回值:0 成功
 	///
-	GDOP_EXPORT int Gdop3SatDFByXyz(double *mainxyz, double *adaj1xyz, double *adaj2xyz, double *refPos
+	GDOP_EXPORT int Gdop3SatDFByXyz(double* mainxyz, double* adaj1xyz, double* adaj2xyz, double* refPos
 		, double fuHz1, double fuHz2, double dfo_err, double eph_pos_err, double eph_vel_err
-		, double *level, int levlen, int *resCount, double **res, double *satllh);
+		, double* level, int levlen, int* resCount, double** res, double* satllh);
 
 	///
 	/// 获取2X1D GDOP
@@ -194,9 +194,9 @@ extern "C"
 	/// satllh :卫星位置  长度6
 	/// 返回值:0 成功
 	///
-	GDOP_EXPORT int Gdop2Sat1DRef(char *mainLines, char *adajLines, long long captime, double *cdbPos
-		, double *refPos, double dtousErr, double ephLocErr
-		, double *level, int levlen, int *resCount, double **res, double *satllh);
+	GDOP_EXPORT int Gdop2Sat1DRef(char* mainLines, char* adajLines, long long captime, double* cdbPos
+		, double* refPos, double dtousErr, double ephLocErr
+		, double* level, int levlen, int* resCount, double** res, double* satllh);
 
 	///
 	/// 获取2X1D GDOP
@@ -213,9 +213,9 @@ extern "C"
 	/// satllh :卫星位置  长度6
 	/// 返回值:0 成功
 	///
-	GDOP_EXPORT int Gdop2Sat1DRefByXyz(double *mainxyz, double *adajxyz, double *cdbPos
-		, double *refPos, double dtousErr, double ephLocErr
-		, double *level, int levlen, int *resCount, double **res, double *satllh);
+	GDOP_EXPORT int Gdop2Sat1DRefByXyz(double* mainxyz, double* adajxyz, double* cdbPos
+		, double* refPos, double dtousErr, double ephLocErr
+		, double* level, int levlen, int* resCount, double** res, double* satllh);
 
 
 	///
@@ -233,9 +233,9 @@ extern "C"
 	/// satllh :卫星位置  长度6
 	/// 返回值:0 成功
 	///
-	GDOP_EXPORT int Gdop2Sat1DNoRef(char *mainLines, char *adajLines, long long captime, double *cdbPos
+	GDOP_EXPORT int Gdop2Sat1DNoRef(char* mainLines, char* adajLines, long long captime, double* cdbPos
 		, double dtousErr, double ephLocErr
-		, double *level, int levlen, int *resCount, double **res, double *satllh);
+		, double* level, int levlen, int* resCount, double** res, double* satllh);
 
 	///
 	/// 获取2X1D no ref GDOP
@@ -251,9 +251,9 @@ extern "C"
 	/// satllh :卫星位置  长度6
 	/// 返回值:0 成功
 	///
-	GDOP_EXPORT int Gdop2Sat1DNoRefByXyz(double *mainxyz, double *adajxyz, double *cdbPos
+	GDOP_EXPORT int Gdop2Sat1DNoRefByXyz(double* mainxyz, double* adajxyz, double* cdbPos
 		, double dtousErr, double ephLocErr
-		, double *level, int levlen, int *resCount, double **res, double *satllh);
+		, double* level, int levlen, int* resCount, double** res, double* satllh);
 
 	///
 	/// 获取XD_CX ref GDOP
@@ -272,9 +272,9 @@ extern "C"
 	/// satllh :卫星位置  长度6
 	/// 返回值:0 成功
 	///
-	GDOP_EXPORT int GdopXDCXRef(char *mainLines, long long captime, double *cdbPos, double *cxPos, double *refPos
+	GDOP_EXPORT int GdopXDCXRef(char* mainLines, long long captime, double* cdbPos, double* cxPos, double* refPos
 		, double dto_err, double doa_err, double eph_err
-		, double *level, int levlen, int *resCount, double **res, double *satllh);
+		, double* level, int levlen, int* resCount, double** res, double* satllh);
 
 	///
 	/// 获取XD_CX ref GDOP
@@ -292,9 +292,9 @@ extern "C"
 	/// satllh :卫星位置  长度6
 	/// 返回值:0 成功
 	///
-	GDOP_EXPORT int GdopXDCXRefByXyz(double *mainxyz, double *cdbPos, double *cxPos, double *refPos
+	GDOP_EXPORT int GdopXDCXRefByXyz(double* mainxyz, double* cdbPos, double* cxPos, double* refPos
 		, double dto_err, double doa_err, double eph_err
-		, double *level, int levlen, int *resCount, double **res, double *satllh);
+		, double* level, int levlen, int* resCount, double** res, double* satllh);
 
 	///
 	/// 获取XD_CX no ref GDOP
@@ -313,9 +313,9 @@ extern "C"
 	/// satllh :卫星位置  长度6
 	/// 返回值:0 成功
 	///
-	GDOP_EXPORT int GdopXDCXNoRef(char *mainLines, long long captime, double *cdbPos, double *cxPos
+	GDOP_EXPORT int GdopXDCXNoRef(char* mainLines, long long captime, double* cdbPos, double* cxPos
 		, double dto_err, double doa_err, double eph_err
-		, double *level, int levlen, int *resCount, double **res, double *satllh);
+		, double* level, int levlen, int* resCount, double** res, double* satllh);
 
 	///
 	/// 获取XD_CX no ref GDOP
@@ -333,9 +333,9 @@ extern "C"
 	/// satllh :卫星位置  长度6
 	/// 返回值:0 成功
 	///
-	GDOP_EXPORT int GdopXDCXNoRefByXyz(double *mainxyz, double *cdbPos, double *cxPos
+	GDOP_EXPORT int GdopXDCXNoRefByXyz(double* mainxyz, double* cdbPos, double* cxPos
 		, double dto_err, double doa_err, double eph_err
-		, double *level, int levlen, int *resCount, double **res, double *satllh);
+		, double* level, int levlen, int* resCount, double** res, double* satllh);
 
 	///
 	/// 获取XD_CX no ref GDOP
@@ -350,9 +350,9 @@ extern "C"
 	/// satllh :卫星位置  长度6
 	/// 返回值:0 成功
 	///
-	GDOP_EXPORT int Gdop2CX(double *cx1Pos, double *cx2Pos
+	GDOP_EXPORT int Gdop2CX(double* cx1Pos, double* cx2Pos
 		, double doa_err1, double doa_err2
-		, double *level, int levlen, int *resCount, double **res);
+		, double* level, int levlen, int* resCount, double** res);
 
 	//
 	// 计算理论频差
@@ -363,10 +363,41 @@ extern "C"
 	//fu  上行
 	//fd  下行
 	//
-	GDOP_EXPORT double theryDfo(double *tarpos, double *recpos, double *eph1, double *eph2, double fu, double fd);
+	GDOP_EXPORT double theryDfo(double* tarpos, double* recpos, double* eph1, double* eph2, double fu, double fd);
+
+	///
+	/// XD时差线
+	/// main_sat_pos 卫星星历 xyz
+	/// mbwx_rec_pos 目标接收站位置 llh
+	/// ckwx_rec_pos 参考接收站位置 llh
+	/// cdb_rec_pos 地面接收站位置 llh
+	/// ref_pos 参考位置 llh
+	/// target_dto 目标时差 llh
+	/// ref_dto 参考时差 llh
+	/// reslen 时差线个数
+	/// res 值
+	///
+	GDOP_EXPORT int SCX_XD(double* main_sat_pos, double* mbwx_rec_pos, double* ckwx_rec_pos, double* cdb_rec_pos,
+		double* ref_pos, double target_dto, double ref_dto, int* reslen, double** res);
+
+
+	///
+	/// XD时差线
+	/// main_sat_pos 卫星星历 xyz
+	/// mbwx_rec_pos 目标接收站位置 llh
+	/// ckwx_rec_pos 参考接收站位置 llh
+	/// cdb_rec_pos 地面接收站位置 llh
+	/// ref_pos 参考位置 llh
+	/// target_dto 目标时差 llh
+	/// ref_dto 参考时差 llh
+	/// reslen 时差线个数
+	/// res 值
+	///
+	GDOP_EXPORT int SCX_XD_NoRef(double* main_sat_pos, double* mbwx_rec_pos, double* cdb_rec_pos,
+		double target_dto, int* reslen, double** res);
 
 	///
 	/// 释放
 	///
-	GDOP_EXPORT void FreeGDOPBuf(double *val);
+	GDOP_EXPORT void FreeGDOPBuf(double* val);
 }

+ 31 - 0
XdCxRhDW.Api/AddIns/GDOP误差椭圆/GDOPAPi.cs

@@ -380,6 +380,37 @@ namespace XdCxRhDW.Api
         public static extern int Gdop2CX(double[] cx1Pos, double[] cx2Pos
             , double doaErr1, double doaErr2, double[] level, int levlen, int[] resCount, out IntPtr res);
 
+        ///
+        /// XD时差线
+        /// main_sat_pos 卫星星历 xyz
+        /// mbwx_rec_pos 目标接收站位置 llh
+        /// ckwx_rec_pos 参考接收站位置 llh
+        /// cdb_rec_pos 地面接收站位置 llh
+        /// ref_pos 参考位置 llh
+        /// target_dto 目标时差 llh
+        /// ref_dto 参考时差 llh
+        /// reslen 时差线个数
+        /// res 值
+        ///
+        [DllImport(GDOPDll, EntryPoint = "SCX_XD", CallingConvention = CallingConvention.Cdecl)]
+        public static extern int SCX_XD(double[] mainxyz, double[] mbrecPos, double[] ckrefPos, double[] cdbPos, double[] refPos,
+            double target_dto, double ref_dto,ref int resCount, out IntPtr res);
+
+
+        ///
+        /// XD时差线
+        /// main_sat_pos 卫星星历 xyz
+        /// mbwx_rec_pos 目标接收站位置 llh
+        /// cdb_rec_pos 地面接收站位置 llh
+        /// target_dto 目标时差 llh
+        /// ref_dto 参考时差 llh
+        /// reslen 时差线个数
+        /// res 值
+        ///
+        [DllImport(GDOPDll, EntryPoint = "SCX_XD_NoRef", CallingConvention = CallingConvention.Cdecl)]
+        public static extern int SCX_XD_NoRef(double[] mainxyz, double[] mbrecPos, double[] cdbPos,
+            double target_dto,ref int resCount, out IntPtr res);
+
 
         [DllImport(GDOPDll, EntryPoint = "FreeGDOPBuf", CallingConvention = CallingConvention.Cdecl)]
         public static extern void FreeGDOPBuf(IntPtr val);

BIN
XdCxRhDW.Api/AddIns/GDOP误差椭圆/GDOP_Draw_11.dll


+ 70 - 1
XdCxRhDW.Api/AddIns/时差线/DrawDtoLineHelper.cs

@@ -40,7 +40,7 @@ namespace XdCxRhDW.Api
         public static extern void Destory(IntPtr val);
 
         private const string exeName = "XingDiSCX.exe";//星地时差线
-       // private static double[] zone = new double[] { -85, 85, -180, 180 }; //定位区域
+                                                       // private static double[] zone = new double[] { -85, 85, -180, 180 }; //定位区域
 
 
         /// <summary>
@@ -139,6 +139,75 @@ namespace XdCxRhDW.Api
             return Lines;
         }
 
+
+        /// <summary>
+        /// 星地有参时差线
+        /// </summary>
+        /// <param name="opt"></param>
+        /// <returns></returns>
+        /// <exception cref="Exception"></exception>
+        public static IEnumerable<(double lon, double lat)> DtoLineXdEx(DtoLineXdOption opt)
+        {
+            List<DtoLinePoint> list = new List<DtoLinePoint>();
+
+            IntPtr LOP_ValuePtr;
+            int LOP_Len = 0;
+
+            GDOPApi.SCX_XD(opt.MsEph, opt.MsAnt, opt.MsAnt, opt.CDBAnt, opt.RefGeod, opt.xdDto * 1e-6, opt.RefDto * 1e-6, ref LOP_Len, out LOP_ValuePtr);
+            double[] LOP_Value = new double[LOP_Len];
+            if (LOP_Len > 0)
+            {
+                Marshal.Copy(LOP_ValuePtr, LOP_Value, 0, LOP_Value.Length);
+            }
+            GDOPApi.FreeGDOPBuf(LOP_ValuePtr);
+            var points = ParseResult(LOP_Value);
+            var mapDots = points.Select(p => p).Select(p => (p.Lon, p.Lat));
+            return mapDots;
+        }
+        private static List<MapDot> ParseResult(double[] ponits)
+        {
+            List<MapDot> mapDots = new List<MapDot>();
+            int count = 2;
+            for (int i = 0; i < ponits.Length / count; i++)
+            {
+                MapDot mapDot = new MapDot();
+                mapDot.Lon = ponits[count * i];
+                mapDot.Lat = ponits[count * i + 1];//0 1  2  3  4 5 6 7
+                mapDots.Add(mapDot);
+            }
+            return mapDots;
+
+        }
+        /// <summary>
+        /// 星地无参时差线
+        /// </summary>
+        /// <param name="opt"></param>
+        /// <returns></returns>
+        /// <exception cref="Exception"></exception>
+        public static IEnumerable<(double lon, double lat)> DtoLineXdNoRefEx(DtoLineXdOption opt)
+        {
+
+            List<DtoLinePoint> list = new List<DtoLinePoint>();
+
+            IntPtr LOP_ValuePtr;
+            int LOP_Len = 0;
+
+            GDOPApi.SCX_XD_NoRef(opt.MsEph, opt.MsAnt, opt.CDBAnt, opt.xdDto * 1e-6, ref LOP_Len, out LOP_ValuePtr);
+
+            double[] LOP_Value = new double[LOP_Len];
+            if (LOP_Len > 0)
+            {
+                Marshal.Copy(LOP_ValuePtr, LOP_Value, 0, LOP_Value.Length);
+            }
+            GDOPApi.FreeGDOPBuf(LOP_ValuePtr);
+
+            var points = ParseResult(LOP_Value);
+            var mapDots = points.Select(p => p).Select(p => (p.Lon, p.Lat));
+            return mapDots;
+        }
+
+
+
         /// <summary>
         /// 高轨双星时差线
         /// </summary>

+ 3 - 0
XdCxRhDW.Api/XdCxRhDW.Api.csproj

@@ -167,6 +167,9 @@
     </None>
     <None Include="AddIns\定位\DLL_GZDW示例和说明.cpp" />
     <None Include="AddIns\GDOP误差椭圆\DLL_GDOP_Analysis0415.h" />
+    <Content Include="AddIns\GDOP误差椭圆\DLL_SCXPlot.dll">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
     <Content Include="AddIns\频差线\Positioning.h" />
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+ 7 - 3
XdCxRhDW.App/EditForms/X1D1DTOParamEditor.cs

@@ -181,8 +181,12 @@ namespace XdCxRhDW.App.EditForms
 
                 var msat = listSat.FirstOrDefault(m => m.SatCode == cg.MainCode.Value)?.Sat;
                 if (string.IsNullOrWhiteSpace(msat)) msat = cg.MainCode.Value.ToString();
-                var xdDtoLine = DrawDtoLineHelper.DtoLineXd(dtoLineXd);
-                mapControl1.DrawDtoLine($"[{msat},超短{CDBAnt[0]}°]带参时差线", xdDtoLine);
+                var xdDtoLine = DrawDtoLineHelper.DtoLineXdEx(dtoLineXd);
+                mapControl1.DrawDtoLineTwo($"[{msat},超短{CDBAnt[0]}°]带参时差线", xdDtoLine);
+
+                //var xdDtoLine1 = DrawDtoLineHelper.DtoLineXd(dtoLineXd);
+                //mapControl1.DrawDtoLine($"[{msat},超短{CDBAnt[0]}°]带参时差线", xdDtoLine1);
+
             }
             catch (Exception ex)
             {
@@ -284,7 +288,7 @@ namespace XdCxRhDW.App.EditForms
                 var cxStation = txtCxLocation.GetLonLat();
 
                 double cxLon = cxStation[0];
-                double cxLat= cxStation[1];
+                double cxLat = cxStation[1];
                 //计算测向站到定位点之间的距离
                 var km = MapControlEx.CalcLineKm(cxLon, cxLat, info.PosLon, info.PosLat);
                 var endpoint = MapControlEx.CalcSituation(cxLon, cxLat, deg, (km + 100) * 1000);

+ 33 - 5
XdCxRhDW.App/EditForms/X2D1DTOParamEditor.cs

@@ -52,6 +52,18 @@ namespace XdCxRhDW.App.EditForms
             }
             if (cg != null)
             {
+                //if (info.PosResType == EnumPosResType.X2D1NoRef)
+                //{
+                //    cg.Dto1 = 6348.6030;
+                //    cg.DtoCdb = 246616.0330;
+                //    cg.MainX = 11265194.9906;
+                //    cg.MainY = 40486056.6399;
+                //    cg.MainZ = -2055810.5412;
+
+                //    cg.Adja1X = 25525328.3455;
+                //    cg.Adja1Y = 33539987.1755;
+                //    cg.Adja1Z = -49504.0378;
+                //}
                 this.txtDtoSx.Text = $"{cg.Dto1.Value}";
                 this.txtDtoCdb.Text = $"{cg.DtoCdb.Value}";
                 if (info.PosResType == EnumPosResType.X2D1)
@@ -65,6 +77,16 @@ namespace XdCxRhDW.App.EditForms
             }
             if (station != null)
             {
+                //if (info.PosResType == EnumPosResType.X2D1NoRef)
+                //{
+                //    station.SatTxLon = 43.7;
+                //    station.SatTxLat = 12.9;
+
+                //    station.CdbTxLon = 43.7;
+                //    station.CdbTxLat = 12.9;
+                //}
+
+
                 this.txtsatStation.Text = $"{station.SatTxLon},{station.SatTxLat}";
                 this.txtcdbStation.Text = $"{station.CdbTxLon},{station.CdbTxLat}";
                 this.txtRefLocation.Text = $"{station.RefLon},{station.RefLat}";
@@ -178,19 +200,25 @@ namespace XdCxRhDW.App.EditForms
                 if (string.IsNullOrWhiteSpace(nsat)) nsat = cg.Adja1Code.Value.ToString();
                 if (info.PosResType == EnumPosResType.X2D1)
                 {
-                    var xdDtoLine = DrawDtoLineHelper.DtoLineXd(dtoLineXd);
-                    mapControl1.DrawDtoLine($"[{msat},超短{CDBAnt[0]}°]时差线", xdDtoLine);
+                    //var xdDtoLine = DrawDtoLineHelper.DtoLineXd(dtoLineXd);
+                    //mapControl1.DrawDtoLine($"[{msat},超短{CDBAnt[0]}°]时差线", xdDtoLine);
+
+                    var xdDtoLine1 = DrawDtoLineHelper.DtoLineXdEx(dtoLineXd);
+                    mapControl1.DrawDtoLineTwo($"[{msat},超短{CDBAnt[0]}°]带参时差线", xdDtoLine1);
 
                     var tsDtoLine = DrawDtoLineHelper.DtoLine2XStart(twoStartOption);
                     mapControl1.DrawDtoLine($"[{msat},{nsat}]时差线", tsDtoLine);
                 }
                 else
                 {
-                    var xdDtoLine = DrawDtoLineHelper.DtoLineXdNoRef(dtoLineXd);
-                    mapControl1.DrawDtoLine($"[{msat},超短{CDBAnt[0]}°]时差线", xdDtoLine);
+                    //var xdDtoLine = DrawDtoLineHelper.DtoLineXdNoRef(dtoLineXd);
+                    //mapControl1.DrawDtoLine($"[{msat},超短{CDBAnt[0]}°]时差线", xdDtoLine);
+
+                    var xdDtoLine1 = DrawDtoLineHelper.DtoLineXdNoRefEx(dtoLineXd);
+                    mapControl1.DrawDtoLineTwo($"[{msat},超短{CDBAnt[0]}°]带参时差线2024", xdDtoLine1);
 
                     var tsDtoLine = DrawDtoLineHelper.DtoLine2XNoRefStart(twoStartOption);
-                    mapControl1.DrawDtoLine($"[{msat},{nsat}]时差线", tsDtoLine);
+                   mapControl1.DrawDtoLine($"[{msat},{nsat}]时差线", tsDtoLine);
                 }
             }
             catch (Exception ex)

+ 55 - 0
XdCxRhDW.App/ExtensionsDev/MapControlEx.cs

@@ -1665,6 +1665,61 @@ public static class MapControlEx
         innerData.mMapStorage.Items.Add(polyLine);
     }
 
+
+    /// <summary>
+    /// 绘制时差多条线 两个点绘制一个线段 1和2一个线段 3和4一个线段
+    /// </summary>
+    /// <param name="ctrl"></param>
+    /// <param name="title"></param>
+    /// <param name="dots"></param>
+    public static void DrawDtoLineTwo(this MapControl ctrl, string title, IEnumerable<(double lon, double lat)> dots)
+    {
+        if (dots == null || !dots.Any()) return;
+        string identify = $"DrawDtoLine_{title}";
+        var innerData = ctrl.Tag as InnerData;
+        //多条线 两个点绘制一个线段 1和2一个线段 3和4一个线段
+        List<MapPolyline> polylines = new List<MapPolyline>();
+        int index = 0;
+        int count = dots.Count();
+
+        MapPolyline polyLine = null;
+        foreach (var item in dots)
+        {
+            if (index % 2 == 0)
+            {
+                if (polyLine != null)//添加线段
+                {
+                    polylines.Add(polyLine);
+                }
+                polyLine = new MapPolyline()
+                {
+                    Stroke = ColorHelper.GetColor(identify),
+                    EnableHighlighting = DefaultBoolean.False,
+                    EnableSelection = DefaultBoolean.False,
+                    StrokeWidth = 4,
+                    IsGeodesic = true,
+                    CanResize = false,
+                    CanEdit = false,
+                    CanRotate = false,
+                    IsHitTestVisible = true,
+                    CanMove = false,
+                    Tag = $"{identify}",
+                    ToolTipPattern = title
+                };
+
+            }
+            polyLine.Points.Add(new GeoPoint(item.lat, item.lon));
+            index++;
+            if (index == count)//添加最后一个线段
+            {
+                polylines.Add(polyLine);
+            }
+
+        }
+        if (!polyLine.Points.Any()) return;
+        innerData.mMapStorage.Items.AddRange(polylines);
+
+    }
     public static void DrawGdopLine(this MapControl ctrl, IEnumerable<(string wcKm, double lon, double lat)> lines)
     {
         if (lines == null || !lines.Any()) return;

+ 1 - 1
XdCxRhDW.App/XdCxRhDW.App.csproj

@@ -16,6 +16,7 @@
     <FileAlignment>512</FileAlignment>
     <NuGetPackageImportStamp>
     </NuGetPackageImportStamp>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
     <PublishUrl>publish\</PublishUrl>
     <Install>true</Install>
     <InstallFrom>Disk</InstallFrom>
@@ -28,7 +29,6 @@
     <MapFileExtensions>true</MapFileExtensions>
     <ApplicationRevision>0</ApplicationRevision>
     <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
     <UseApplicationTrust>false</UseApplicationTrust>
     <BootstrapperEnabled>true</BootstrapperEnabled>
   </PropertyGroup>