GDOPAPi.cs 14 KB

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