GDOPAPi.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Runtime.InteropServices;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. namespace DW5S.KxcApi
  8. {
  9. public static class GDOPApi
  10. {
  11. private const string GDOPDll = @"AddIns\GDOP误差椭圆\GDOP_Draw_11.dll";
  12. private const string ErrellipDll = @"AddIns\GDOP误差椭圆\DLL_GDOP_Analysis0415";
  13. /// <summary>
  14. /// 两星一地误差椭圆
  15. /// </summary>
  16. /// <param name="main_eph">主星位置 长度6</param>
  17. /// <param name="neigh_eph">邻星位置 长度6</param>
  18. /// <param name="cdbAnt">超短波 长度3</param>
  19. /// <param name="refStation">参考站 长度3</param>
  20. /// <param name="Select_Point">定位点 长度3</param>
  21. /// <param name="dto_err">时差误差(s)</param>
  22. /// <param name="eph_err"></param>
  23. /// <param name="Pe">0.5</param>
  24. /// <param name="LOP_Len"></param>
  25. /// <returns></returns>
  26. [DllImport(ErrellipDll, EntryPoint = "Error_Ellipse_2X1D", CallingConvention = CallingConvention.Cdecl)]
  27. public extern static IntPtr Error_Ellipse_2X1D(double[] main_eph, double[] neigh_eph, double[] cdbAnt, double[] refStation, double[] Select_Point, double dto_err,
  28. double eph_err, double Pe, ref int LOP_Len);
  29. ///
  30. /// 获取三星双时差GDOP 带参考
  31. /// mainxyz :xyz vx vy vz
  32. /// adaj1xyz :xyz vx vy vz
  33. /// adaj2xyz :xyz vx vy vz
  34. /// refPos: 参考经度,纬度
  35. /// dtousErr: 时差误差
  36. /// ephLocErr: 星历位置误差
  37. /// level: gdop输出等级
  38. /// levlen:level 长度
  39. /// resCount:每一级的数据个数
  40. /// res :数据
  41. /// satllh :卫星位置
  42. /// 返回值:0 成功
  43. ///
  44. [DllImport(GDOPDll, EntryPoint = "Gdop3SatRefByXyz", CallingConvention = CallingConvention.Cdecl)]
  45. public static extern int Gdop3SatRefByXyz(double[] mainxyz, double[] adaj1xyz, double[] adaj2xyz, double[] refPos
  46. , double dtousErr, double ephLocErr
  47. , double[] level, int levlen, int[] resCount, out IntPtr res, double[] satllh);
  48. [DllImport(GDOPDll, EntryPoint = "Gdop3SatRefByXyz_new", CallingConvention = CallingConvention.Cdecl)]
  49. public static extern int Gdop3SatRefByXyz_new(double[] mainxyz, double[] adaj1xyz, double[] adaj2xyz, double[] refPos
  50. , double dtousErr, double ephLocErr
  51. , double[] level, int levlen, int[] resCount, out IntPtr lpoints, out IntPtr res, double[] satllh);
  52. ///
  53. /// 获取三星双时差GDOP 无参考
  54. /// mainxyz :xyz vx vy vz
  55. /// adaj1xyz :xyz vx vy vz
  56. /// adaj2xyz :xyz vx vy vz
  57. /// dtousErr: 时差误差
  58. /// ephLocErr: 星历位置误差
  59. /// level: gdop输出等级
  60. /// levlen:level 长度
  61. /// resCount:每一级的数据个数
  62. /// res :数据
  63. /// satllh :卫星位置
  64. /// 返回值:0 成功
  65. ///
  66. [DllImport(GDOPDll, EntryPoint = "Gdop3SatNoRefByXyz", CallingConvention = CallingConvention.Cdecl)]
  67. public static extern int Gdop3SatNoRefByXyz(double[] mainxyz, double[] adaj1xyz, double[] adaj2xyz
  68. , double dtousErr, double ephLocErr
  69. , double[] level, int levlen, int[] resCount, out IntPtr res, double[] satllh);
  70. [DllImport(GDOPDll, EntryPoint = "Gdop3SatNoRefByXyz_new", CallingConvention = CallingConvention.Cdecl)]
  71. public static extern int Gdop3SatNoRefByXyz_new(double[] mainxyz, double[] adaj1xyz, double[] adaj2xyz
  72. , double dtousErr, double ephLocErr
  73. , double[] level, int levlen, int[] resCount, out IntPtr lpoints, out IntPtr res, double[] satllh);
  74. ///
  75. /// 获取双星GDOP
  76. /// mainxyz :xyz vx vy vz
  77. /// adajxyz :xyz vx vy vz
  78. /// refPos: 参考经度,纬度
  79. /// fuHz1: 主上行
  80. /// fuHz2: 邻上行
  81. /// dtousErr: 时差误差
  82. /// dfoHzErr: 频差误差
  83. /// ephLocErr: 星历位置误差
  84. /// ephVLocErr: 星历速度误差
  85. /// level: gdop输出等级
  86. /// levlen:level 长度
  87. /// resCount:每一级的数据个数
  88. /// res :数据
  89. /// satllh :卫星位置
  90. /// 返回值:0 成功
  91. ///
  92. [DllImport(GDOPDll, EntryPoint = "Gdop2SatDRefByXyz", CallingConvention = CallingConvention.Cdecl)]
  93. public static extern int Gdop2SatDRefByXyz(double[] mainxyz, double[] adajxyz, double[] refPos
  94. , double fuHz1, double fuHz2, double dtousErr, double dfoHzErr, double ephLocErr, double ephVLocErr
  95. , double[] level, int levlen, int[] resCount, out IntPtr res, double[] satllh);
  96. [DllImport(GDOPDll, EntryPoint = "Gdop2SatDRefByXyz_new", CallingConvention = CallingConvention.Cdecl)]
  97. public static extern int Gdop2SatDRefByXyz_new(double[] mainxyz, double[] adajxyz, double[] refPos
  98. , double fuHz1, double fuHz2, double dtousErr, double dfoHzErr, double ephLocErr, double ephVLocErr
  99. , double[] level, int levlen, int[] resCount, out IntPtr lpoints, out IntPtr res, double[] satllh);
  100. ///
  101. /// 获取三星双频差GDOP
  102. /// mainxyz :xyz vx vy vz
  103. /// adaj1xyz :xyz vx vy vz
  104. /// adaj2xyz :xyz vx vy vz
  105. /// refPos: 参考经度,纬度
  106. /// fuHz1: 主上行
  107. /// fuHz2: 邻上行
  108. /// dfo_err: 频差误差
  109. /// eph_pos_err: 星历位置误差
  110. /// eph_vel_err: 星历速度误差
  111. /// level: gdop输出等级
  112. /// levlen:level 长度
  113. /// resCount:每一级的数据个数
  114. /// res :数据
  115. /// satllh :卫星位置
  116. /// 返回值:0 成功
  117. ///
  118. [DllImport(GDOPDll, EntryPoint = "Gdop3SatDFByXyz", CallingConvention = CallingConvention.Cdecl)]
  119. public static extern int Gdop3SatDFByXyz(double[] mainxyz, double[] adaj1xyz, double[] adaj2xyz, double[] refPos
  120. , double fuHz1, double fuHz2, double dfo_err, double eph_pos_err, double eph_vel_err
  121. , double[] level, int levlen, int[] resCount, out IntPtr res, double[] satllh);
  122. [DllImport(GDOPDll, EntryPoint = "Gdop3SatDFByXyz_new", CallingConvention = CallingConvention.Cdecl)]
  123. public static extern int Gdop3SatDFByXyz_new(double[] mainxyz, double[] adaj1xyz, double[] adaj2xyz, double[] refPos
  124. , double fuHz1, double fuHz2, double dfo_err, double eph_pos_err, double eph_vel_err
  125. , double[] level, int levlen, int[] resCount, out IntPtr lpoints, out IntPtr res, double[] satllh);
  126. ///
  127. /// 获取2X1D GDOP
  128. /// mainxyz :xyz vx vy vz
  129. /// adajxyz :xyz vx vy vz
  130. /// cdbPos: 地面站经度,纬度
  131. /// refPos: 参考经度,纬度
  132. /// dtousErr: 时差误差
  133. /// ephLocErr: 星历位置误差
  134. /// level: gdop输出等级
  135. /// levlen:level 长度
  136. /// resCount:每一级的数据个数
  137. /// res :数据
  138. /// satllh :卫星位置 长度6
  139. /// 返回值:0 成功
  140. ///
  141. [DllImport(GDOPDll, EntryPoint = "Gdop2Sat1DRefByXyz", CallingConvention = CallingConvention.Cdecl)]
  142. public static extern int Gdop2Sat1DRefByXyz(double[] mainxyz, double[] adajxyz, double[] cdbPos
  143. , double[] refPos, double dtousErr, double ephLocErr
  144. , double[] level, int levlen, int[] resCount, out IntPtr res, double[] satllh);
  145. [DllImport(GDOPDll, EntryPoint = "Gdop2Sat1DRefByXyz_new", CallingConvention = CallingConvention.Cdecl)]
  146. public static extern int Gdop2Sat1DRefByXyz_new(double[] mainxyz, double[] adajxyz, double[] cdbPos
  147. , double[] refPos, double dtousErr, double ephLocErr
  148. , double[] level, int levlen, int[] resCount, out IntPtr lpoints, out IntPtr res, double[] satllh);
  149. ///
  150. /// 获取2X1D no ref GDOP
  151. /// mainxyz :xyz vx vy vz
  152. /// adajxyz :xyz vx vy vz
  153. /// cdbPos: 地面站经度,纬度
  154. /// dtousErr: 时差误差
  155. /// ephLocErr: 星历位置误差
  156. /// level: gdop输出等级
  157. /// levlen:level 长度
  158. /// resCount:每一级的数据个数
  159. /// res :数据
  160. /// satllh :卫星位置 长度6
  161. /// 返回值:0 成功
  162. ///
  163. [DllImport(GDOPDll, EntryPoint = "Gdop2Sat1DNoRefByXyz", CallingConvention = CallingConvention.Cdecl)]
  164. public static extern int Gdop2Sat1DNoRefByXyz(double[] mainxyz, double[] adajxyz, double[] cdbPos
  165. , double dtousErr, double ephLocErr
  166. , double[] level, int levlen, int[] resCount, out IntPtr res, double[] satllh);
  167. [DllImport(GDOPDll, EntryPoint = "Gdop2Sat1DNoRefByXyz_new", CallingConvention = CallingConvention.Cdecl)]
  168. public static extern int Gdop2Sat1DNoRefByXyz_new(double[] mainxyz, double[] adajxyz, double[] cdbPos
  169. , double dtousErr, double ephLocErr
  170. , double[] level, int levlen, int[] resCount, out IntPtr lpoints, out IntPtr res, double[] satllh);
  171. ///
  172. /// 获取XD_CX ref GDOP
  173. /// mainxyz :xyz vx vy vz
  174. /// cdbPos: 地面站经度,纬度
  175. /// cxPos: 侧向站经度,纬度
  176. /// refPos: 参考经度,纬度
  177. /// dto_err: 时差误差
  178. /// doa_err: 侧向误差
  179. /// eph_err: 星历位置误差
  180. /// level: gdop输出等级
  181. /// levlen:level 长度
  182. /// resCount:每一级的数据个数
  183. /// res :数据
  184. /// satllh :卫星位置 长度6
  185. /// 返回值:0 成功
  186. ///
  187. [DllImport(GDOPDll, EntryPoint = "GdopXDCXRefByXyz", CallingConvention = CallingConvention.Cdecl)]
  188. public static extern int GdopXDCXRefByXyz(double[] mainxyz, double[] cdbPos, double[] cxPos, double[] refPos
  189. , double dto_err, double doa_err, double eph_err
  190. , double[] level, int levlen, int[] resCount, out IntPtr res, double[] satllh);
  191. [DllImport(GDOPDll, EntryPoint = "GdopXDCXRefByXyz_new", CallingConvention = CallingConvention.Cdecl)]
  192. public static extern int GdopXDCXRefByXyz_new(double[] mainxyz, double[] cdbPos, double[] cxPos, double[] refPos
  193. , double dto_err, double doa_err, double eph_err
  194. , double[] level, int levlen, int[] resCount, out IntPtr lpoints, out IntPtr res, double[] satllh);
  195. ///
  196. /// 获取XD_CX no ref GDOP
  197. /// mainxyz :xyz vx vy vz
  198. /// cdbPos: 地面站经度,纬度
  199. /// cxPos: 侧向站经度,纬度
  200. /// refPos: 参考经度,纬度
  201. /// dto_err: 时差误差
  202. /// doa_err: 侧向误差
  203. /// eph_err: 星历位置误差
  204. /// level: gdop输出等级
  205. /// levlen:level 长度
  206. /// resCount:每一级的数据个数
  207. /// res :数据
  208. /// satllh :卫星位置 长度6
  209. /// 返回值:0 成功
  210. ///
  211. [DllImport(GDOPDll, EntryPoint = "GdopXDCXNoRefByXyz", CallingConvention = CallingConvention.Cdecl)]
  212. public static extern int GdopXDCXNoRefByXyz(double[] mainxyz, double[] cdbPos, double[] cxPos
  213. , double dto_err, double doa_err, double eph_err
  214. , double[] level, int levlen, int[] resCount, out IntPtr res, double[] satllh);
  215. ///
  216. /// 获取XD_CX no ref GDOP
  217. /// mainxyz :xyz vx vy vz
  218. /// cdbPos: 地面站经度,纬度
  219. /// cxPos: 侧向站经度,纬度
  220. /// refPos: 参考经度,纬度
  221. /// dto_err: 时差误差
  222. /// doa_err: 侧向误差
  223. /// eph_err: 星历位置误差
  224. /// level: gdop输出等级
  225. /// levlen:level 长度
  226. /// resCount:每一级的数据个数
  227. /// res :数据
  228. /// satllh :卫星位置 长度6
  229. /// 返回值:0 成功
  230. ///
  231. [DllImport(GDOPDll, EntryPoint = "GdopXDCXNoRefByXyz_new", CallingConvention = CallingConvention.Cdecl)]
  232. public static extern int GdopXDCXNoRefByXyz_new(double[] mainxyz, double[] cdbPos, double[] cxPos
  233. , double dto_err, double doa_err, double eph_err
  234. , double[] level, int levlen, int[] resCount, out IntPtr lpoints, out IntPtr res, double[]satllh);
  235. /////
  236. ///// XD时差线
  237. ///// main_sat_pos 卫星星历 xyz
  238. ///// mbwx_rec_pos 目标接收站位置 llh
  239. ///// ckwx_rec_pos 参考接收站位置 llh
  240. ///// cdb_rec_pos 地面接收站位置 llh
  241. ///// ref_pos 参考位置 llh
  242. ///// target_dto 目标时差 llh
  243. ///// ref_dto 参考时差 llh
  244. ///// reslen 时差线个数
  245. ///// res 值
  246. /////
  247. //[DllImport(GDOPDll, EntryPoint = "SCX_XD", CallingConvention = CallingConvention.Cdecl)]
  248. //public static extern int SCX_XD(double[] mainxyz, double[] mbrecPos, double[] ckrefPos, double[] cdbPos, double[] refPos,
  249. // double target_dto, double ref_dto,ref int resCount, out IntPtr res);
  250. ///
  251. /// XD时差线
  252. /// main_sat_pos 卫星星历 xyz
  253. /// mbwx_rec_pos 目标接收站位置 llh
  254. /// ckwx_rec_pos 参考接收站位置 llh
  255. /// cdb_rec_pos 地面接收站位置 llh
  256. /// ref_pos 参考位置 llh
  257. /// target_dto 目标时差 llh
  258. /// ref_dto 参考时差 llh
  259. /// linecount 线条数
  260. /// reslen 线条数对应点数
  261. /// res 总点数
  262. ///
  263. [DllImport(GDOPDll, EntryPoint = "SCX_XD_new", CallingConvention = CallingConvention.Cdecl)]
  264. public static extern int SCX_XD_new(double[] mainxyz, double[] mbrecPos, double[] ckrefPos, double[] cdbPos, double[] refPos,
  265. double target_dto, double ref_dto,ref int linecount, out IntPtr reslen,out IntPtr res);
  266. ///
  267. /// XD时差线
  268. /// main_sat_pos 卫星星历 xyz
  269. /// mbwx_rec_pos 目标接收站位置 llh
  270. /// cdb_rec_pos 地面接收站位置 llh
  271. /// target_dto 目标时差 llh
  272. /// ref_dto 参考时差 llh
  273. /// reslen 时差线个数
  274. /// res 值
  275. ///
  276. [DllImport(GDOPDll, EntryPoint = "SCX_XD_NoRef", CallingConvention = CallingConvention.Cdecl)]
  277. public static extern int SCX_XD_NoRef(double[] mainxyz, double[] mbrecPos, double[] cdbPos,
  278. double target_dto,ref int resCount, out IntPtr res);
  279. ///
  280. /// XD时差线
  281. /// main_sat_pos 卫星星历 xyz
  282. /// mbwx_rec_pos 目标接收站位置 llh
  283. /// cdb_rec_pos 地面接收站位置 llh
  284. /// target_dto 目标时差 llh
  285. /// ref_dto 参考时差 llh
  286. /// reslen 时差线个数
  287. /// res 值
  288. ///
  289. [DllImport(GDOPDll, EntryPoint = "SCX_XD_NoRef_new", CallingConvention = CallingConvention.Cdecl)]
  290. public static extern int SCX_XD_NoRef_new(double[] mainxyz, double[] mbrecPos, double[] cdbPos,
  291. double target_dto, ref int linecount, out IntPtr reslen, out IntPtr res);
  292. //单星、星地、低轨、
  293. //GDOP_EXPORT int SCX_XD_NoRef_new(double* main_sat_pos, double* mbwx_rec_pos, double* cdb_rec_pos,
  294. //double target_dto, int* linecount, int** reslen, double** res);
  295. [DllImport(GDOPDll, EntryPoint = "FreeGDOPBuf", CallingConvention = CallingConvention.Cdecl)]
  296. public static extern void FreeGDOPBuf(IntPtr val);
  297. }
  298. }