GDOPAPi.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419
  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 XdCxRhDW.Api
  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. ///
  14. /// 获取三星双时差GDOP 带参考
  15. /// mainLines :主星历双行
  16. /// adaj1Lines :邻星历双行
  17. /// adaj2Lines :邻星历双行
  18. /// captime:信号时间
  19. /// refPos: 参考经度,纬度
  20. /// dtousErr: 时差误差
  21. /// ephLocErr: 星历位置误差
  22. /// level: gdop输出等级
  23. /// levlen:level 长度
  24. /// resCount:每一级的数据个数
  25. /// res :数据
  26. /// satllh :卫星位置
  27. /// 返回值:0 成功
  28. ///
  29. [DllImport(GDOPDll, EntryPoint = "Gdop3SatRef", CallingConvention = CallingConvention.Cdecl)]
  30. public static extern int Gdop3SatRef(string mainLines, string adajLines, string adaj2Lines, Int64 captime, double[] refPos
  31. , double dtousErr, double ephLocErr
  32. , double[] level, int levlen, int[] resCount, out IntPtr res, double[] satllh);
  33. ///
  34. /// 获取三星双时差GDOP 带参考
  35. /// mainxyz :xyz vx vy vz
  36. /// adaj1xyz :xyz vx vy vz
  37. /// adaj2xyz :xyz vx vy vz
  38. /// refPos: 参考经度,纬度
  39. /// dtousErr: 时差误差
  40. /// ephLocErr: 星历位置误差
  41. /// level: gdop输出等级
  42. /// levlen:level 长度
  43. /// resCount:每一级的数据个数
  44. /// res :数据
  45. /// satllh :卫星位置
  46. /// 返回值:0 成功
  47. ///
  48. [DllImport(GDOPDll, EntryPoint = "Gdop3SatRefByXyz", CallingConvention = CallingConvention.Cdecl)]
  49. public static extern int Gdop3SatRefByXyz(double[] mainxyz, double[] adaj1xyz, double[] adaj2xyz, double[] refPos
  50. , double dtousErr, double ephLocErr
  51. , double[] level, int levlen, int[] resCount, out IntPtr res, double[] satllh);
  52. ///
  53. /// 获取三星双时差GDOP 无参考
  54. /// mainLines :主星历双行
  55. /// adaj1Lines :邻星历双行
  56. /// adaj2Lines :邻星历双行
  57. /// captime:信号时间
  58. /// dtousErr: 时差误差
  59. /// ephLocErr: 星历位置误差
  60. /// level: gdop输出等级
  61. /// levlen:level 长度
  62. /// resCount:每一级的数据个数
  63. /// res :数据
  64. /// satllh :卫星位置
  65. /// 返回值:0 成功
  66. ///
  67. [DllImport(GDOPDll, EntryPoint = "Gdop3SatNoRef", CallingConvention = CallingConvention.Cdecl)]
  68. public static extern int Gdop3SatNoRef(string mainLines, string adajLines, string adaj2Lines, Int64 captime
  69. , double dtousErr, double ephLocErr
  70. , double[] level, int levlen, int[] resCount, out IntPtr res, double[] satllh);
  71. ///
  72. /// 获取三星双时差GDOP 无参考
  73. /// mainxyz :xyz vx vy vz
  74. /// adaj1xyz :xyz vx vy vz
  75. /// adaj2xyz :xyz vx vy vz
  76. /// dtousErr: 时差误差
  77. /// ephLocErr: 星历位置误差
  78. /// level: gdop输出等级
  79. /// levlen:level 长度
  80. /// resCount:每一级的数据个数
  81. /// res :数据
  82. /// satllh :卫星位置
  83. /// 返回值:0 成功
  84. ///
  85. [DllImport(GDOPDll, EntryPoint = "Gdop3SatNoRefByXyz", CallingConvention = CallingConvention.Cdecl)]
  86. public static extern int Gdop3SatNoRefByXyz(double[] mainxyz, double[] adaj1xyz, double[] adaj2xyz
  87. , double dtousErr, double ephLocErr
  88. , double[] level, int levlen, int[] resCount, out IntPtr res, double[] satllh);
  89. ///
  90. /// 获取双星GDOP
  91. /// mainLines :主星历双行
  92. /// adajLines :邻星历双行
  93. /// captime:信号时间
  94. /// refPos: 参考经度,纬度
  95. /// fuHz1: 主上行
  96. /// fuHz2: 邻上行
  97. /// dtousErr: 时差误差
  98. /// dfoHzErr: 频差误差
  99. /// ephLocErr: 星历位置误差
  100. /// ephVLocErr: 星历速度误差
  101. /// level: gdop输出等级
  102. /// levlen:level 长度
  103. /// resCount:每一级的数据个数
  104. /// res :数据
  105. /// satllh :卫星位置
  106. /// 返回值:0 成功
  107. ///
  108. [DllImport(GDOPDll, EntryPoint = "Gdop2SatDRef", CallingConvention = CallingConvention.Cdecl)]
  109. public static extern int Gdop2SatDRef(string mainLines, string adajLines, Int64 captime, double[] refPos
  110. , double fuHz1, double fuHz2, double dtousErr, double dfoHzErr, double ephLocErr, double ephVLocErr
  111. , double[] level, int levlen, int[] resCount, out IntPtr res, double[] satllh);
  112. ///
  113. /// 获取双星GDOP
  114. /// mainxyz :xyz vx vy vz
  115. /// adajxyz :xyz vx vy vz
  116. /// refPos: 参考经度,纬度
  117. /// fuHz1: 主上行
  118. /// fuHz2: 邻上行
  119. /// dtousErr: 时差误差
  120. /// dfoHzErr: 频差误差
  121. /// ephLocErr: 星历位置误差
  122. /// ephVLocErr: 星历速度误差
  123. /// level: gdop输出等级
  124. /// levlen:level 长度
  125. /// resCount:每一级的数据个数
  126. /// res :数据
  127. /// satllh :卫星位置
  128. /// 返回值:0 成功
  129. ///
  130. [DllImport(GDOPDll, EntryPoint = "Gdop2SatDRefByXyz", CallingConvention = CallingConvention.Cdecl)]
  131. public static extern int Gdop2SatDRefByXyz(double[] mainxyz, double[] adajxyz, double[] refPos
  132. , double fuHz1, double fuHz2, double dtousErr, double dfoHzErr, double ephLocErr, double ephVLocErr
  133. , double[] level, int levlen, int[] resCount, out IntPtr res, double[] satllh);
  134. ///
  135. /// 获取三星双频差GDOP
  136. /// mainLines :主星历双行
  137. /// adaj1Lines :邻星历双行
  138. /// adaj2Lines :邻星历双行
  139. /// captime:信号时间
  140. /// refPos: 参考经度,纬度
  141. /// fuHz1: 主上行
  142. /// fuHz2: 邻上行
  143. /// dfo_err: 频差误差
  144. /// eph_pos_err: 星历位置误差
  145. /// eph_vel_err: 星历速度误差
  146. /// level: gdop输出等级
  147. /// levlen:level 长度
  148. /// resCount:每一级的数据个数
  149. /// res :数据
  150. /// satllh :卫星位置
  151. /// 返回值:0 成功
  152. ///
  153. [DllImport(GDOPDll, EntryPoint = "Gdop3SatDF", CallingConvention = CallingConvention.Cdecl)]
  154. public static extern int Gdop3SatDF(string mainLines, string adajLines, string adaj2Lines, Int64 captime, double[] refPos
  155. , double fuHz1, double fuHz2, double dfo_err, double eph_pos_err, double eph_vel_err
  156. , double[] level, int levlen, int[] resCount, out IntPtr res, double[] satllh);
  157. ///
  158. /// 获取三星双频差GDOP
  159. /// mainxyz :xyz vx vy vz
  160. /// adaj1xyz :xyz vx vy vz
  161. /// adaj2xyz :xyz vx vy vz
  162. /// refPos: 参考经度,纬度
  163. /// fuHz1: 主上行
  164. /// fuHz2: 邻上行
  165. /// dfo_err: 频差误差
  166. /// eph_pos_err: 星历位置误差
  167. /// eph_vel_err: 星历速度误差
  168. /// level: gdop输出等级
  169. /// levlen:level 长度
  170. /// resCount:每一级的数据个数
  171. /// res :数据
  172. /// satllh :卫星位置
  173. /// 返回值:0 成功
  174. ///
  175. [DllImport(GDOPDll, EntryPoint = "Gdop3SatDFByXyz", CallingConvention = CallingConvention.Cdecl)]
  176. public static extern int Gdop3SatDFByXyz(double[] mainxyz, double[] adaj1xyz, double[] adaj2xyz, double[] refPos
  177. , double fuHz1, double fuHz2, double dfo_err, double eph_pos_err, double eph_vel_err
  178. , double[] level, int levlen, int[] resCount, out IntPtr res, double[] satllh);
  179. /// <returns></returns>
  180. ///
  181. /// 获取2X1D GDOP
  182. /// mainLines :主星历双行
  183. /// adajLines :邻星历双行
  184. /// captime:信号时间
  185. /// cdbPos: 地面站经度,纬度
  186. /// refPos: 参考经度,纬度
  187. /// dtousErr: 时差误差
  188. /// ephLocErr: 星历位置误差
  189. /// level: gdop输出等级
  190. /// levlen:level 长度
  191. /// resCount:每一级的数据个数
  192. /// res :数据
  193. /// satllh :卫星位置 长度6
  194. /// 返回值:0 成功
  195. ///
  196. [DllImport(GDOPDll, EntryPoint = "Gdop2Sat1DRef", CallingConvention = CallingConvention.Cdecl)]
  197. public static extern int Gdop2Sat1DRef(string mainLines, string adajLines, Int64 captime, double[] cdbPos
  198. , double[] refPos, double dtousErr, double ephLocErr
  199. , double[] level, int levlen, int[] resCount, out IntPtr res, double[] satllh);
  200. ///
  201. /// 获取2X1D GDOP
  202. /// mainxyz :xyz vx vy vz
  203. /// adajxyz :xyz vx vy vz
  204. /// cdbPos: 地面站经度,纬度
  205. /// refPos: 参考经度,纬度
  206. /// dtousErr: 时差误差
  207. /// ephLocErr: 星历位置误差
  208. /// level: gdop输出等级
  209. /// levlen:level 长度
  210. /// resCount:每一级的数据个数
  211. /// res :数据
  212. /// satllh :卫星位置 长度6
  213. /// 返回值:0 成功
  214. ///
  215. [DllImport(GDOPDll, EntryPoint = "Gdop2Sat1DRefByXyz", CallingConvention = CallingConvention.Cdecl)]
  216. public static extern int Gdop2Sat1DRefByXyz(double[] mainxyz, double[] adajxyz, double[] cdbPos
  217. , double[] refPos, double dtousErr, double ephLocErr
  218. , double[] level, int levlen, int[] resCount, out IntPtr res, double[] satllh);
  219. ///
  220. /// 获取2X1D no ref GDOP
  221. /// mainLines :主星历双行
  222. /// adajLines :邻星历双行
  223. /// captime:信号时间
  224. /// cdbPos: 地面站经度,纬度
  225. /// dtousErr: 时差误差
  226. /// ephLocErr: 星历位置误差
  227. /// level: gdop输出等级
  228. /// levlen:level 长度
  229. /// resCount:每一级的数据个数
  230. /// res :数据
  231. /// satllh :卫星位置 长度6
  232. /// 返回值:0 成功
  233. ///
  234. [DllImport(GDOPDll, EntryPoint = "Gdop2Sat1DNoRef", CallingConvention = CallingConvention.Cdecl)]
  235. public static extern int Gdop2Sat1DNoRef(string mainLines, string adajLines, Int64 captime, double[] cdbPos,
  236. double dtousErr, double ephLocErr
  237. , double[] level, int levlen, int[] resCount, out IntPtr res, double[] satllh);
  238. ///
  239. /// 获取2X1D no ref GDOP
  240. /// mainxyz :xyz vx vy vz
  241. /// adajxyz :xyz vx vy vz
  242. /// cdbPos: 地面站经度,纬度
  243. /// dtousErr: 时差误差
  244. /// ephLocErr: 星历位置误差
  245. /// level: gdop输出等级
  246. /// levlen:level 长度
  247. /// resCount:每一级的数据个数
  248. /// res :数据
  249. /// satllh :卫星位置 长度6
  250. /// 返回值:0 成功
  251. ///
  252. [DllImport(GDOPDll, EntryPoint = "Gdop2Sat1DNoRefByXyz", CallingConvention = CallingConvention.Cdecl)]
  253. public static extern int Gdop2Sat1DNoRefByXyz(double[] mainxyz, double[] adajxyz, double[] cdbPos
  254. , double dtousErr, double ephLocErr
  255. , double[] level, int levlen, int[] resCount, out IntPtr res, double[] satllh);
  256. ///
  257. /// 获取XD_CX ref GDOP
  258. /// mainLines :主星历双行
  259. /// captime:信号时间
  260. /// cdbPos: 地面站经度,纬度
  261. /// cxPos: 侧向站经度,纬度
  262. /// refPos: 参考经度,纬度
  263. /// dto_err: 时差误差
  264. /// doa_err: 侧向误差
  265. /// eph_err: 星历位置误差
  266. /// level: gdop输出等级
  267. /// levlen:level 长度
  268. /// resCount:每一级的数据个数
  269. /// res :数据
  270. /// satllh :卫星位置 长度6
  271. /// 返回值:0 成功
  272. ///
  273. [DllImport(GDOPDll, EntryPoint = "GdopXDCXRef", CallingConvention = CallingConvention.Cdecl)]
  274. public static extern int GdopXDCXRef(string mainLines, Int64 captime, double[] cdbPos, double[] cxPos, double[] refPos
  275. , double dtoErr, double doaErr, double ephLocErr
  276. , double[] level, int levlen, int[] resCount, out IntPtr res, double[] satllh);
  277. ///
  278. /// 获取XD_CX ref GDOP
  279. /// mainxyz :xyz vx vy vz
  280. /// cdbPos: 地面站经度,纬度
  281. /// cxPos: 侧向站经度,纬度
  282. /// refPos: 参考经度,纬度
  283. /// dto_err: 时差误差
  284. /// doa_err: 侧向误差
  285. /// eph_err: 星历位置误差
  286. /// level: gdop输出等级
  287. /// levlen:level 长度
  288. /// resCount:每一级的数据个数
  289. /// res :数据
  290. /// satllh :卫星位置 长度6
  291. /// 返回值:0 成功
  292. ///
  293. [DllImport(GDOPDll, EntryPoint = "GdopXDCXRefByXyz", CallingConvention = CallingConvention.Cdecl)]
  294. public static extern int GdopXDCXRefByXyz(double[] mainxyz, double[] cdbPos, double[] cxPos, double[] refPos
  295. , double dto_err, double doa_err, double eph_err
  296. , double[] level, int levlen, int[] resCount, out IntPtr res, double[] satllh);
  297. ///
  298. /// 获取XD_CX no ref GDOP
  299. /// mainLines :主星历双行
  300. /// captime:信号时间
  301. /// cdbPos: 地面站经度,纬度
  302. /// cxPos: 侧向站经度,纬度
  303. /// refPos: 参考经度,纬度
  304. /// dto_err: 时差误差
  305. /// doa_err: 侧向误差
  306. /// eph_err: 星历位置误差
  307. /// level: gdop输出等级
  308. /// levlen:level 长度
  309. /// resCount:每一级的数据个数
  310. /// res :数据
  311. /// satllh :卫星位置 长度6
  312. /// 返回值:0 成功
  313. ///
  314. [DllImport(GDOPDll, EntryPoint = "GdopXDCXNoRef", CallingConvention = CallingConvention.Cdecl)]
  315. public static extern int GdopXDCXNoRef(string mainLines, Int64 captime, double[] cdbPos, double[] cxPos
  316. , double dtousErr, double doaErr, double ephLocErr, double[] level, int levlen, int[] resCount, out IntPtr res, double[] satllh);
  317. ///
  318. /// 获取XD_CX no ref GDOP
  319. /// mainxyz :xyz vx vy vz
  320. /// cdbPos: 地面站经度,纬度
  321. /// cxPos: 侧向站经度,纬度
  322. /// refPos: 参考经度,纬度
  323. /// dto_err: 时差误差
  324. /// doa_err: 侧向误差
  325. /// eph_err: 星历位置误差
  326. /// level: gdop输出等级
  327. /// levlen:level 长度
  328. /// resCount:每一级的数据个数
  329. /// res :数据
  330. /// satllh :卫星位置 长度6
  331. /// 返回值:0 成功
  332. ///
  333. [DllImport(GDOPDll, EntryPoint = "GdopXDCXNoRefByXyz", CallingConvention = CallingConvention.Cdecl)]
  334. public static extern int GdopXDCXNoRefByXyz(double[] mainxyz, double[] cdbPos, double[] cxPos
  335. , double dto_err, double doa_err, double eph_err
  336. , double[] level, int levlen, int[] resCount, out IntPtr res, double[] satllh);
  337. ///
  338. /// 获取XD_CX no ref GDOP
  339. /// cx1Pos: 侧向站经度,纬度
  340. /// cx2Pos: 侧向站经度,纬度
  341. /// doa_err1: 侧向1误差
  342. /// doa_err2: 侧向2误差
  343. /// level: gdop输出等级
  344. /// levlen:level 长度
  345. /// resCount:每一级的数据个数
  346. /// res :数据
  347. /// satllh :卫星位置 长度6
  348. /// 返回值:0 成功
  349. ///
  350. [DllImport(GDOPDll, EntryPoint = "Gdop2CX", CallingConvention = CallingConvention.Cdecl)]
  351. public static extern int Gdop2CX(double[] cx1Pos, double[] cx2Pos
  352. , double doaErr1, double doaErr2, double[] level, int levlen, int[] resCount, out IntPtr res);
  353. ///
  354. /// XD时差线
  355. /// main_sat_pos 卫星星历 xyz
  356. /// mbwx_rec_pos 目标接收站位置 llh
  357. /// ckwx_rec_pos 参考接收站位置 llh
  358. /// cdb_rec_pos 地面接收站位置 llh
  359. /// ref_pos 参考位置 llh
  360. /// target_dto 目标时差 llh
  361. /// ref_dto 参考时差 llh
  362. /// reslen 时差线个数
  363. /// res 值
  364. ///
  365. [DllImport(GDOPDll, EntryPoint = "SCX_XD", CallingConvention = CallingConvention.Cdecl)]
  366. public static extern int SCX_XD(double[] mainxyz, double[] mbrecPos, double[] ckrefPos, double[] cdbPos, double[] refPos,
  367. double target_dto, double ref_dto,ref int resCount, out IntPtr res);
  368. ///
  369. /// XD时差线
  370. /// main_sat_pos 卫星星历 xyz
  371. /// mbwx_rec_pos 目标接收站位置 llh
  372. /// cdb_rec_pos 地面接收站位置 llh
  373. /// target_dto 目标时差 llh
  374. /// ref_dto 参考时差 llh
  375. /// reslen 时差线个数
  376. /// res 值
  377. ///
  378. [DllImport(GDOPDll, EntryPoint = "SCX_XD_NoRef", CallingConvention = CallingConvention.Cdecl)]
  379. public static extern int SCX_XD_NoRef(double[] mainxyz, double[] mbrecPos, double[] cdbPos,
  380. double target_dto,ref int resCount, out IntPtr res);
  381. [DllImport(GDOPDll, EntryPoint = "FreeGDOPBuf", CallingConvention = CallingConvention.Cdecl)]
  382. public static extern void FreeGDOPBuf(IntPtr val);
  383. }
  384. }