EllipseController.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Threading.Tasks;
  7. using System.Web.Http;
  8. using DevExpress.Data.Svg;
  9. using DevExpress.Mvvm.Native;
  10. using XdCxRhDW.Api;
  11. using XdCxRhDW.Dto;
  12. using XdCxRhDW.Entity;
  13. using XdCxRhDW.Repostory;
  14. using XdCxRhDW.WebApi;
  15. namespace XdCxRhDW.App.Controllers
  16. {
  17. /// <summary>
  18. /// 误差椭圆相关接口
  19. /// </summary>
  20. public class EllipseController : BaseController
  21. {
  22. /// <summary>
  23. /// 两星一地误差椭圆(带参)
  24. /// </summary>
  25. /// <param name="dto"></param>
  26. /// <returns></returns>
  27. public async Task<AjaxResult<ErrEllipseResDto>> X2D1(ErrEllipseX2D1Dto dto)
  28. {
  29. return await Task.Run(() =>
  30. {
  31. double[] mainEcef = new double[3] { dto.MainX, dto.MainY, dto.MainZ };
  32. double[] adjaEcef = new double[3] { dto.AdjaX, dto.AdjaY, dto.AdjaZ };
  33. double[] cdbLoc = new double[2] { dto.CdbLon, dto.CdbLat };
  34. double[] refLoc = new double[2] { dto.RefLon, dto.RefLat };
  35. var res = ErrEllipseHepler.ErrorEllipse2X1D(dto.PosLon, dto.PosLat, mainEcef, adjaEcef, cdbLoc,
  36. refLoc, dto.DtoErrus, dto.EphErr, dto.OutputErrPoint, dto.Pe);
  37. return Success(res);
  38. });
  39. }
  40. /// <summary>
  41. /// 两星一地误差椭圆(无参)
  42. /// </summary>
  43. /// <param name="dto"></param>
  44. /// <returns></returns>
  45. public async Task<AjaxResult<ErrEllipseResDto>> X2D1NoRef(ErrEllipseX2D1NoRefDto dto)
  46. {
  47. return await Task.Run(() =>
  48. {
  49. double[] mainEcef = new double[3] { dto.MainX, dto.MainY, dto.MainZ };
  50. double[] adjaEcef = new double[3] { dto.AdjaX, dto.AdjaY, dto.AdjaZ };
  51. double[] cdbLoc = new double[2] { dto.CdbLon, dto.CdbLat };
  52. var res = ErrEllipseHepler.ErrorEllipse2X1DNoRef(dto.PosLon, dto.PosLat, mainEcef, adjaEcef,
  53. cdbLoc, dto.DtoErrus, dto.EphErr, dto.OutputErrPoint, dto.Pe);
  54. return Success(res);
  55. });
  56. }
  57. /// <summary>
  58. /// 低轨单星误差椭圆(单星没有参考)
  59. /// </summary>
  60. /// <param name="dto"></param>
  61. /// <returns></returns>
  62. public async Task<AjaxResult<ErrEllipseResDto>> X1Leo(ErrorEllipseLeoX1Dto dto)
  63. {
  64. return await Task.Run(() =>
  65. {
  66. ErrorEllipseX1Option option = new ErrorEllipseX1Option()
  67. {
  68. MsEph = dto.MsEph,
  69. NsEph1 = dto.NsEph1,
  70. NsEph2 = dto.NsEph2,
  71. SelectPoint = dto.SelectPoint,
  72. DfoErr = dto.DfoErr,
  73. EphPosErr = dto.EphPosErr,
  74. EphVelErr = dto.EphVelErr,
  75. fu = dto.fu,
  76. Pe = dto.Pe
  77. };
  78. var res = LeoErrorEllipseHelper.ErrorEllipseLeoX1(option, dto.OutputErrPoint);
  79. return Success(res);
  80. });
  81. }
  82. /// <summary>
  83. /// 低轨双星带参误差椭圆
  84. /// </summary>
  85. /// <param name="dto"></param>
  86. /// <returns></returns>
  87. public async Task<AjaxResult<ErrEllipseResDto>> X2Leo(ErrorEllipseLeoX2Dto dto)
  88. {
  89. return await Task.Run(() =>
  90. {
  91. ErrorEllipseX2Option option = new ErrorEllipseX2Option()
  92. {
  93. MsEph = dto.MsEph,
  94. NsEph = dto.NsEph,
  95. RefGeod = dto.RefGeod,
  96. SelectPoint = dto.SelectPoint,
  97. DtoErr = dto.DtoErrUs / 1e6,
  98. DfoErr = dto.DfoErr,
  99. EphPosErr = dto.EphPosErr,
  100. EphVelErr = dto.EphVelErr,
  101. fu1 = dto.fu1,
  102. fu2 = dto.fu2,
  103. Pe = dto.Pe
  104. };
  105. var res = LeoErrorEllipseHelper.ErrorEllipseLeoX2(option, dto.OutputErrPoint);
  106. return Success(res);
  107. });
  108. }
  109. /// <summary>
  110. /// 三星双时差带参误差椭圆(高轨和低轨均适用)
  111. /// </summary>
  112. /// <param name="dto"></param>
  113. /// <returns></returns>
  114. public async Task<AjaxResult<ErrEllipseResDto>> X3TwoDto(ErrEllipseX3Dto dto)
  115. {
  116. return await Task.Run(() =>
  117. {
  118. double[] mainEcef = new double[3] { dto.MainX, dto.MainY, dto.MainZ };
  119. double[] adja1Ecef = new double[3] { dto.Adja1X, dto.Adja1Y, dto.Adja1Z };
  120. double[] adja2Ecef = new double[3] { dto.Adja2X, dto.Adja2Y, dto.Adja2Z };
  121. double[] refLoc = new double[2] { dto.RefLon, dto.RefLat };
  122. var res = ErrEllipseHepler.ErrorEllipseX3(dto.PosLon, dto.PosLat, mainEcef, adja1Ecef, adja2Ecef,
  123. refLoc, dto.DtoErrus, dto.EphErr, dto.OutputErrPoint, dto.Pe);
  124. return Success(res);
  125. });
  126. }
  127. /// <summary>
  128. /// 三星双时差无参误差椭圆(高轨和低轨均适用)
  129. /// </summary>
  130. /// <param name="dto"></param>
  131. /// <returns></returns>
  132. public async Task<AjaxResult<ErrEllipseResDto>> X3TwoDtoNoRef(ErrEllipseX3NoRefDto dto)
  133. {
  134. return await Task.Run(() =>
  135. {
  136. double[] mainEcef = new double[3] { dto.MainX, dto.MainY, dto.MainZ };
  137. double[] adja1Ecef = new double[3] { dto.Adja1X, dto.Adja1Y, dto.Adja1Z };
  138. double[] adja2Ecef = new double[3] { dto.Adja2X, dto.Adja2Y, dto.Adja2Z };
  139. var res = ErrEllipseHepler.ErrorEllipseX3NoRef(dto.PosLon, dto.PosLat, mainEcef, adja1Ecef, adja2Ecef,
  140. dto.DtoErrus, dto.EphErr, dto.OutputErrPoint, dto.Pe);
  141. return Success(res);
  142. });
  143. }
  144. }
  145. }