|
@@ -1,6 +1,7 @@
|
|
|
using DPP_YH_Core.Extensions;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
+using System.Data;
|
|
|
using System.Linq;
|
|
|
using System.Runtime.InteropServices;
|
|
|
using System.Text;
|
|
@@ -51,13 +52,32 @@ namespace XdCxRhDW.Api
|
|
|
private extern static IntPtr Error_Ellipse_2X1D_NoRef(double[] main_eph, double[] neigh_eph, double[] cdbAnt, double[] Select_Point, double dto_err,
|
|
|
double eph_err, double Pe, ref int LOP_Len);
|
|
|
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 三星带参误差椭圆(高轨和低轨是一样的)
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="main_eph">主星位置 长度3</param>
|
|
|
+ /// <param name="neigh_eph1">邻星1位置 长度3</param>
|
|
|
+ /// <param name="neigh_eph2">邻星2位置 长度3</param>
|
|
|
+ /// <param name="RefGeod">参考站 长度3</param>
|
|
|
+ /// <param name="refStation">参考站 长度3</param>
|
|
|
+ /// <param name="Select_Point">定位点 长度3</param>
|
|
|
+ /// <param name="dto_err">时差误差(s)</param>
|
|
|
+ /// <param name="eph_err">星历误差(m)</param>
|
|
|
+ /// <param name="Pe">0.5</param>
|
|
|
+ /// <param name="LOP_Len"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [DllImport(ErrellipDll, EntryPoint = "Error_Ellipse_3X_2DTO", CallingConvention = CallingConvention.Cdecl)]
|
|
|
+ private extern static IntPtr Error_Ellipse_3X_2DTO(double[] main_eph, double[] neigh_eph1, double[] neigh_eph2, double[] RefGeod, double[] Select_Point, double dto_err,
|
|
|
+ double eph_err, double Pe, ref int LOP_Len);
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 两星一地带参误差椭圆
|
|
|
/// </summary>
|
|
|
/// <param name="posLon">定位点经度</param>
|
|
|
/// <param name="posLat">定位点纬度</param>
|
|
|
/// <param name="mainEph">主星xyz,长度=3</param>
|
|
|
- /// <param name="adajEph">邻星xyz,长度=3</param>
|
|
|
+ /// <param name="adjaEph">邻星xyz,长度=3</param>
|
|
|
/// <param name="cdbPos">超短波位置(长度=2或3)</param>
|
|
|
/// <param name="RefGeod">参考站位置(长度=2或3)</param>
|
|
|
/// <param name="DtoErrus">时差误差(us)</param>
|
|
@@ -65,7 +85,7 @@ namespace XdCxRhDW.Api
|
|
|
/// <param name="outputErrPoint">是否输出椭圆Geo点</param>
|
|
|
/// <param name="pe">概率(范围0-1,默认0.5)</param>
|
|
|
/// <returns></returns>
|
|
|
- public static ErrEllipseResDto ErrorEllipse2X1D(double posLon, double posLat, double[] mainEph, double[] adajEph, double[] cdbPos, double[] RefGeod, double DtoErrus, double EphErrm, bool outputErrPoint, double pe = 0.5)
|
|
|
+ public static ErrEllipseResDto ErrorEllipse2X1D(double posLon, double posLat, double[] mainEph, double[] adjaEph, double[] cdbPos, double[] RefGeod, double DtoErrus, double EphErrm, bool outputErrPoint, double pe = 0.5)
|
|
|
{
|
|
|
if (cdbPos.Length == 2)
|
|
|
{
|
|
@@ -78,7 +98,7 @@ namespace XdCxRhDW.Api
|
|
|
int LOP_Len = 0;
|
|
|
IntPtr LOP_ValuePtr = Error_Ellipse_2X1D(
|
|
|
mainEph,
|
|
|
- adajEph,
|
|
|
+ adjaEph,
|
|
|
cdbPos,
|
|
|
RefGeod,
|
|
|
new double[3] { posLon, posLat, 0 },
|
|
@@ -116,14 +136,14 @@ namespace XdCxRhDW.Api
|
|
|
/// <param name="posLon">定位点经度</param>
|
|
|
/// <param name="posLat">定位点纬度</param>
|
|
|
/// <param name="mainEph">主星xyz,长度=3</param>
|
|
|
- /// <param name="adajEph">邻星xyz,长度=3</param>
|
|
|
+ /// <param name="adjaEph">邻星xyz,长度=3</param>
|
|
|
/// <param name="cdbPos">超短波位置(长度=2或3)</param>
|
|
|
/// <param name="DtoErrus">时差误差(us)</param>
|
|
|
/// <param name="EphErrm">星历误差(m)</param>
|
|
|
/// <param name="outputErrPoint">是否输出椭圆Geo点</param>
|
|
|
/// <param name="pe">概率(范围0-1,默认0.5)</param>
|
|
|
/// <returns></returns>
|
|
|
- public static ErrEllipseResDto ErrorEllipse2X1DNoRef(double posLon, double posLat, double[] mainEph, double[] adajEph, double[] cdbPos, double DtoErrus, double EphErrm, bool outputErrPoint,double pe = 0.5)
|
|
|
+ public static ErrEllipseResDto ErrorEllipse2X1DNoRef(double posLon, double posLat, double[] mainEph, double[] adjaEph, double[] cdbPos, double DtoErrus, double EphErrm, bool outputErrPoint, double pe = 0.5)
|
|
|
{
|
|
|
if (cdbPos.Length == 2)
|
|
|
{
|
|
@@ -133,7 +153,7 @@ namespace XdCxRhDW.Api
|
|
|
double Pe = 0.5;
|
|
|
IntPtr LOP_ValuePtr = Error_Ellipse_2X1D_NoRef(
|
|
|
mainEph,
|
|
|
- adajEph,
|
|
|
+ adjaEph,
|
|
|
cdbPos,
|
|
|
new double[3] { posLon, posLat, 0 },
|
|
|
DtoErrus * 1e-6,
|
|
@@ -165,5 +185,61 @@ namespace XdCxRhDW.Api
|
|
|
}
|
|
|
|
|
|
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 三星双时差带参误差椭圆(高轨和低轨是一样的)
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="posLon">定位点经度</param>
|
|
|
+ /// <param name="posLat">定位点纬度</param>
|
|
|
+ /// <param name="mainEph">主星xyz,长度=3</param>
|
|
|
+ /// <param name="adja1Eph">邻1星xyz,长度=3</param>
|
|
|
+ /// <param name="adja2Eph">邻2星xyz,长度=3</param>
|
|
|
+ /// <param name="RefGeod">参考站位置(长度=2或3)</param>
|
|
|
+ /// <param name="dtoErrus">时差误差(us)</param>
|
|
|
+ /// <param name="ephErrm">星历误差(m)</param>
|
|
|
+ /// <param name="outputErrPoint">是否输出椭圆Geo点</param>
|
|
|
+ /// <param name="pe">概率(范围0-1,默认0.5)</param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public static ErrEllipseResDto ErrorEllipseX3(double posLon, double posLat, double[] mainEph, double[] adja1Eph, double[] adja2Eph,
|
|
|
+ double[] RefGeod, double dtoErrus, double ephErrm, bool outputErrPoint, double pe = 0.5)
|
|
|
+ {
|
|
|
+ if (RefGeod.Length == 2)
|
|
|
+ {
|
|
|
+ RefGeod = RefGeod.Concat(new double[1] { 0 }).ToArray();
|
|
|
+ }
|
|
|
+ int LOP_Len = 0;
|
|
|
+ IntPtr LOP_ValuePtr = Error_Ellipse_3X_2DTO(
|
|
|
+ mainEph,
|
|
|
+ adja1Eph,
|
|
|
+ adja2Eph,
|
|
|
+ RefGeod,
|
|
|
+ new double[3] { posLon, posLat, 0 },
|
|
|
+ dtoErrus * 1e-6,
|
|
|
+ ephErrm,
|
|
|
+ pe, ref LOP_Len);
|
|
|
+ double[] LOP_Value = new double[LOP_Len];
|
|
|
+ if (LOP_Len > 0)
|
|
|
+ {
|
|
|
+ Marshal.Copy(LOP_ValuePtr, LOP_Value, 0, LOP_Value.Length);
|
|
|
+ }
|
|
|
+ ErrEllipseResDto res = new ErrEllipseResDto();
|
|
|
+ res.LongRadius = LOP_Value[LOP_Value.Length - 3];
|
|
|
+ res.ShortRadius = LOP_Value[LOP_Value.Length - 2];
|
|
|
+ res.DipAngle = LOP_Value[LOP_Value.Length - 1];
|
|
|
+ if (outputErrPoint)
|
|
|
+ {
|
|
|
+ int count = LOP_Value.Length - 3;
|
|
|
+
|
|
|
+ for (int i = 0; i < count; i += 2)
|
|
|
+ {
|
|
|
+ res.GeoPoints.Add(new GeoPoint()
|
|
|
+ {
|
|
|
+ Lon = LOP_Value[i],
|
|
|
+ Lat = LOP_Value[i + 1],
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return res;
|
|
|
+ }
|
|
|
}
|
|
|
}
|