using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; namespace DW5S.KxcApi { public static class GDOPApi { private const string GDOPDll = @"AddIns\GDOP误差椭圆\GDOP_Draw_11.dll"; private const string ErrellipDll = @"AddIns\GDOP误差椭圆\DLL_GDOP_Analysis0415"; /// /// 两星一地误差椭圆 /// /// 主星位置 长度6 /// 邻星位置 长度6 /// 超短波 长度3 /// 参考站 长度3 /// 定位点 长度3 /// 时差误差(s) /// /// 0.5 /// /// [DllImport(ErrellipDll, EntryPoint = "Error_Ellipse_2X1D", CallingConvention = CallingConvention.Cdecl)] public extern static IntPtr Error_Ellipse_2X1D(double[] main_eph, double[] neigh_eph, double[] cdbAnt, double[] refStation, double[] Select_Point, double dto_err, double eph_err, double Pe, ref int LOP_Len); /// /// 获取三星双时差GDOP 带参考 /// mainxyz :xyz vx vy vz /// adaj1xyz :xyz vx vy vz /// adaj2xyz :xyz vx vy vz /// refPos: 参考经度,纬度 /// dtousErr: 时差误差 /// ephLocErr: 星历位置误差 /// level: gdop输出等级 /// levlen:level 长度 /// resCount:每一级的数据个数 /// res :数据 /// satllh :卫星位置 /// 返回值:0 成功 /// [DllImport(GDOPDll, EntryPoint = "Gdop3SatRefByXyz", CallingConvention = CallingConvention.Cdecl)] public static extern int Gdop3SatRefByXyz(double[] mainxyz, double[] adaj1xyz, double[] adaj2xyz, double[] refPos , double dtousErr, double ephLocErr , double[] level, int levlen, int[] resCount, out IntPtr res, double[] satllh); [DllImport(GDOPDll, EntryPoint = "Gdop3SatRefByXyz_new", CallingConvention = CallingConvention.Cdecl)] public static extern int Gdop3SatRefByXyz_new(double[] mainxyz, double[] adaj1xyz, double[] adaj2xyz, double[] refPos , double dtousErr, double ephLocErr , double[] level, int levlen, int[] resCount, out IntPtr lpoints, out IntPtr res, double[] satllh); /// /// 获取三星双时差GDOP 无参考 /// mainxyz :xyz vx vy vz /// adaj1xyz :xyz vx vy vz /// adaj2xyz :xyz vx vy vz /// dtousErr: 时差误差 /// ephLocErr: 星历位置误差 /// level: gdop输出等级 /// levlen:level 长度 /// resCount:每一级的数据个数 /// res :数据 /// satllh :卫星位置 /// 返回值:0 成功 /// [DllImport(GDOPDll, EntryPoint = "Gdop3SatNoRefByXyz", CallingConvention = CallingConvention.Cdecl)] public static extern int Gdop3SatNoRefByXyz(double[] mainxyz, double[] adaj1xyz, double[] adaj2xyz , double dtousErr, double ephLocErr , double[] level, int levlen, int[] resCount, out IntPtr res, double[] satllh); [DllImport(GDOPDll, EntryPoint = "Gdop3SatNoRefByXyz_new", CallingConvention = CallingConvention.Cdecl)] public static extern int Gdop3SatNoRefByXyz_new(double[] mainxyz, double[] adaj1xyz, double[] adaj2xyz , double dtousErr, double ephLocErr , double[] level, int levlen, int[] resCount, out IntPtr lpoints, out IntPtr res, double[] satllh); /// /// 获取双星GDOP /// mainxyz :xyz vx vy vz /// adajxyz :xyz vx vy vz /// refPos: 参考经度,纬度 /// fuHz1: 主上行 /// fuHz2: 邻上行 /// dtousErr: 时差误差 /// dfoHzErr: 频差误差 /// ephLocErr: 星历位置误差 /// ephVLocErr: 星历速度误差 /// level: gdop输出等级 /// levlen:level 长度 /// resCount:每一级的数据个数 /// res :数据 /// satllh :卫星位置 /// 返回值:0 成功 /// [DllImport(GDOPDll, EntryPoint = "Gdop2SatDRefByXyz", CallingConvention = CallingConvention.Cdecl)] public static extern 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, out IntPtr res, double[] satllh); [DllImport(GDOPDll, EntryPoint = "Gdop2SatDRefByXyz_new", CallingConvention = CallingConvention.Cdecl)] public static extern int Gdop2SatDRefByXyz_new(double[] mainxyz, double[] adajxyz, double[] refPos , double fuHz1, double fuHz2, double dtousErr, double dfoHzErr, double ephLocErr, double ephVLocErr , double[] level, int levlen, int[] resCount, out IntPtr lpoints, out IntPtr res, double[] satllh); /// /// 获取三星双频差GDOP /// mainxyz :xyz vx vy vz /// adaj1xyz :xyz vx vy vz /// adaj2xyz :xyz vx vy vz /// refPos: 参考经度,纬度 /// fuHz1: 主上行 /// fuHz2: 邻上行 /// dfo_err: 频差误差 /// eph_pos_err: 星历位置误差 /// eph_vel_err: 星历速度误差 /// level: gdop输出等级 /// levlen:level 长度 /// resCount:每一级的数据个数 /// res :数据 /// satllh :卫星位置 /// 返回值:0 成功 /// [DllImport(GDOPDll, EntryPoint = "Gdop3SatDFByXyz", CallingConvention = CallingConvention.Cdecl)] public static extern 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, out IntPtr res, double[] satllh); [DllImport(GDOPDll, EntryPoint = "Gdop3SatDFByXyz_new", CallingConvention = CallingConvention.Cdecl)] public static extern int Gdop3SatDFByXyz_new(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, out IntPtr lpoints, out IntPtr res, double[] satllh); /// /// 获取2X1D GDOP /// mainxyz :xyz vx vy vz /// adajxyz :xyz vx vy vz /// cdbPos: 地面站经度,纬度 /// refPos: 参考经度,纬度 /// dtousErr: 时差误差 /// ephLocErr: 星历位置误差 /// level: gdop输出等级 /// levlen:level 长度 /// resCount:每一级的数据个数 /// res :数据 /// satllh :卫星位置 长度6 /// 返回值:0 成功 /// [DllImport(GDOPDll, EntryPoint = "Gdop2Sat1DRefByXyz", CallingConvention = CallingConvention.Cdecl)] public static extern int Gdop2Sat1DRefByXyz(double[] mainxyz, double[] adajxyz, double[] cdbPos , double[] refPos, double dtousErr, double ephLocErr , double[] level, int levlen, int[] resCount, out IntPtr res, double[] satllh); [DllImport(GDOPDll, EntryPoint = "Gdop2Sat1DRefByXyz_new", CallingConvention = CallingConvention.Cdecl)] public static extern int Gdop2Sat1DRefByXyz_new(double[] mainxyz, double[] adajxyz, double[] cdbPos , double[] refPos, double dtousErr, double ephLocErr , double[] level, int levlen, int[] resCount, out IntPtr lpoints, out IntPtr res, double[] satllh); /// /// 获取2X1D no ref GDOP /// mainxyz :xyz vx vy vz /// adajxyz :xyz vx vy vz /// cdbPos: 地面站经度,纬度 /// dtousErr: 时差误差 /// ephLocErr: 星历位置误差 /// level: gdop输出等级 /// levlen:level 长度 /// resCount:每一级的数据个数 /// res :数据 /// satllh :卫星位置 长度6 /// 返回值:0 成功 /// [DllImport(GDOPDll, EntryPoint = "Gdop2Sat1DNoRefByXyz", CallingConvention = CallingConvention.Cdecl)] public static extern int Gdop2Sat1DNoRefByXyz(double[] mainxyz, double[] adajxyz, double[] cdbPos , double dtousErr, double ephLocErr , double[] level, int levlen, int[] resCount, out IntPtr res, double[] satllh); [DllImport(GDOPDll, EntryPoint = "Gdop2Sat1DNoRefByXyz_new", CallingConvention = CallingConvention.Cdecl)] public static extern int Gdop2Sat1DNoRefByXyz_new(double[] mainxyz, double[] adajxyz, double[] cdbPos , double dtousErr, double ephLocErr , double[] level, int levlen, int[] resCount, out IntPtr lpoints, out IntPtr res, double[] satllh); /// /// 获取XD_CX ref GDOP /// mainxyz :xyz vx vy vz /// cdbPos: 地面站经度,纬度 /// cxPos: 侧向站经度,纬度 /// refPos: 参考经度,纬度 /// dto_err: 时差误差 /// doa_err: 侧向误差 /// eph_err: 星历位置误差 /// level: gdop输出等级 /// levlen:level 长度 /// resCount:每一级的数据个数 /// res :数据 /// satllh :卫星位置 长度6 /// 返回值:0 成功 /// [DllImport(GDOPDll, EntryPoint = "GdopXDCXRefByXyz", CallingConvention = CallingConvention.Cdecl)] public static extern 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, out IntPtr res, double[] satllh); [DllImport(GDOPDll, EntryPoint = "GdopXDCXRefByXyz_new", CallingConvention = CallingConvention.Cdecl)] public static extern int GdopXDCXRefByXyz_new(double[] mainxyz, double[] cdbPos, double[] cxPos, double[] refPos , double dto_err, double doa_err, double eph_err , double[] level, int levlen, int[] resCount, out IntPtr lpoints, out IntPtr res, double[] satllh); /// /// 获取XD_CX no ref GDOP /// mainxyz :xyz vx vy vz /// cdbPos: 地面站经度,纬度 /// cxPos: 侧向站经度,纬度 /// refPos: 参考经度,纬度 /// dto_err: 时差误差 /// doa_err: 侧向误差 /// eph_err: 星历位置误差 /// level: gdop输出等级 /// levlen:level 长度 /// resCount:每一级的数据个数 /// res :数据 /// satllh :卫星位置 长度6 /// 返回值:0 成功 /// [DllImport(GDOPDll, EntryPoint = "GdopXDCXNoRefByXyz", CallingConvention = CallingConvention.Cdecl)] public static extern int GdopXDCXNoRefByXyz(double[] mainxyz, double[] cdbPos, double[] cxPos , double dto_err, double doa_err, double eph_err , double[] level, int levlen, int[] resCount, out IntPtr res, double[] satllh); /// /// 获取XD_CX no ref GDOP /// mainxyz :xyz vx vy vz /// cdbPos: 地面站经度,纬度 /// cxPos: 侧向站经度,纬度 /// refPos: 参考经度,纬度 /// dto_err: 时差误差 /// doa_err: 侧向误差 /// eph_err: 星历位置误差 /// level: gdop输出等级 /// levlen:level 长度 /// resCount:每一级的数据个数 /// res :数据 /// satllh :卫星位置 长度6 /// 返回值:0 成功 /// [DllImport(GDOPDll, EntryPoint = "GdopXDCXNoRefByXyz_new", CallingConvention = CallingConvention.Cdecl)] public static extern int GdopXDCXNoRefByXyz_new(double[] mainxyz, double[] cdbPos, double[] cxPos , double dto_err, double doa_err, double eph_err , double[] level, int levlen, int[] resCount, out IntPtr lpoints, out IntPtr res, double[]satllh); ///// ///// 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 /// ckwx_rec_pos 参考接收站位置 llh /// cdb_rec_pos 地面接收站位置 llh /// ref_pos 参考位置 llh /// target_dto 目标时差 llh /// ref_dto 参考时差 llh /// linecount 线条数 /// reslen 线条数对应点数 /// res 总点数 /// [DllImport(GDOPDll, EntryPoint = "SCX_XD_new", CallingConvention = CallingConvention.Cdecl)] public static extern int SCX_XD_new(double[] mainxyz, double[] mbrecPos, double[] ckrefPos, double[] cdbPos, double[] refPos, double target_dto, double ref_dto,ref int linecount, out IntPtr reslen,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); /// /// 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_new", CallingConvention = CallingConvention.Cdecl)] public static extern int SCX_XD_NoRef_new(double[] mainxyz, double[] mbrecPos, double[] cdbPos, double target_dto, ref int linecount, out IntPtr reslen, out IntPtr res); //单星、星地、低轨、 //GDOP_EXPORT int SCX_XD_NoRef_new(double* main_sat_pos, double* mbwx_rec_pos, double* cdb_rec_pos, //double target_dto, int* linecount, int** reslen, double** res); [DllImport(GDOPDll, EntryPoint = "FreeGDOPBuf", CallingConvention = CallingConvention.Cdecl)] public static extern void FreeGDOPBuf(IntPtr val); } }