PtoUtils.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. using CliWrap;
  2. using CliWrap.Buffered;
  3. using Ips.Library.Basic;
  4. using Ips.Library.Entity;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Text;
  8. using System.Threading;
  9. using System.Threading.Tasks;
  10. namespace Ips.Pto
  11. {
  12. public class PtoUtils
  13. {
  14. internal static readonly string CliPath = PathUtil.GetAssemblyPath("ipscli", "pto", "pto.exe");
  15. public static async Task<ExeResult<PosResult>> X3(PstItemOptions arg1, PstItemOptions arg2, int timeout = 60, CancellationToken token = default)
  16. {
  17. const string cmd = "loc x3";
  18. var cli = Cli.Wrap(CliPath)
  19. .WithArguments(args =>
  20. {
  21. args.Add(cmd);
  22. args.Add("--mseph1").Add(arg1.MainPlaGeo.ToString());
  23. args.Add("--nsEph1").Add(arg1.AdjaPlaGeo.ToString());
  24. args.Add("--msant1").Add(arg1.MainRecvGeo.ToString());
  25. args.Add("--nsant1").Add(arg1.AdjaRecvGeo.ToString());
  26. args.Add("--dtotar1").Add(arg1.TarCrResult.Dto);
  27. args.Add("--mseph2").Add(arg2.MainPlaGeo.ToString());
  28. args.Add("--nseph2").Add(arg2.AdjaPlaGeo.ToString());
  29. args.Add("--msant2").Add(arg2.MainRecvGeo.ToString());
  30. args.Add("--nsant2").Add(arg2.AdjaRecvGeo.ToString());
  31. args.Add("--dtotar2").Add(arg2.TarCrResult.Dto);
  32. });
  33. var res = await cli.ExecuteBufferedAsync(token.LinkTimeout(timeout));
  34. var dwResult = PosResult.FromString(res.StandardOutput);
  35. return ExeResult.Create(dwResult, cli.Arguments, res.StartTime, res.ExitTime, res.ExitCode, res.StandardError);
  36. }
  37. public static async Task<ExeResult<PosResult>> X3Ref(PstItemOptions arg1, PstItemOptions arg2, int timeout = 60, CancellationToken token = default)
  38. {
  39. const string cmd = "loc x3ref";
  40. var cli = Cli.Wrap(CliPath)
  41. .WithArguments(args =>
  42. {
  43. args.Add(cmd);
  44. args.Add("--mseph1").Add(arg1.MainPlaGeo.ToString());
  45. args.Add("--nsEph1").Add(arg1.AdjaPlaGeo.ToString());
  46. args.Add("--dtotar1").Add(arg1.TarCrResult.Dto.ToString());
  47. args.Add("--refgeod1").Add(arg1.RftGeo.ToString());
  48. args.Add("--dtoref1").Add(arg1.AdjaRfCrResult.Dto - arg1.MainRfCrResult.Dto);
  49. args.Add("--mseph2").Add(arg2.MainPlaGeo.ToString());
  50. args.Add("--nsEph2").Add(arg2.AdjaPlaGeo.ToString());
  51. args.Add("--dtotar2").Add(arg2.TarCrResult.Dto.ToString());
  52. args.Add("--refgeod2").Add(arg2.RftGeo.ToString());
  53. args.Add("--dtoref2").Add(arg2.AdjaRfCrResult.Dto - arg2.MainRfCrResult.Dto);
  54. if (arg1.MainRecvGeo != null)
  55. args.Add("--msAnt1").Add(arg1.MainRecvGeo.ToString());
  56. if (arg1.AdjaRecvGeo != null)
  57. args.Add("--nsAnt1").Add(arg1.AdjaRecvGeo.ToString());
  58. if (arg2.MainRecvGeo != null)
  59. args.Add("--msAnt2").Add(arg2.MainRecvGeo.ToString());
  60. if (arg2.AdjaRecvGeo != null)
  61. args.Add("--nsAnt2").Add(arg2.AdjaRecvGeo.ToString());
  62. });
  63. var res = await cli.ExecuteBufferedAsync(token.LinkTimeout(timeout));
  64. var dwResult = PosResult.FromString(res.StandardOutput);
  65. return ExeResult.Create(dwResult, cli.Arguments, res.StartTime, res.ExitTime, res.ExitCode, res.StandardError);
  66. }
  67. public static Task<ExeResult<PosResult>> X4(PstItemOptions arg1, PstItemOptions arg2, PstItemOptions arg3, int timeout = 60, CancellationToken token = default
  68. )
  69. {
  70. PstItemOptions newArg1 = new PstItemOptions();
  71. newArg1.MainPlaGeo = arg1.AdjaPlaGeo;
  72. newArg1.MainRecvGeo = arg1.AdjaRecvGeo;
  73. newArg1.AdjaPlaGeo = arg2.AdjaPlaGeo;
  74. newArg1.AdjaRecvGeo = arg2.AdjaRecvGeo;
  75. newArg1.TarCrResult = new CorResult()
  76. {
  77. Dto = arg2.TarCrResult.Dto - arg1.TarCrResult.Dto,
  78. Dfo = arg2.TarCrResult.Dfo - arg1.TarCrResult.Dfo,
  79. Snr = (arg2.TarCrResult.Snr + arg1.TarCrResult.Snr) / 2
  80. };
  81. PstItemOptions newArg2 = new PstItemOptions();
  82. newArg2.MainPlaGeo = arg1.AdjaPlaGeo;
  83. newArg2.MainRecvGeo = arg1.AdjaRecvGeo;
  84. newArg2.AdjaPlaGeo = arg3.AdjaPlaGeo;
  85. newArg2.AdjaRecvGeo = arg3.AdjaRecvGeo;
  86. newArg2.TarCrResult = new CorResult()
  87. {
  88. Dto = arg3.TarCrResult.Dto - arg1.TarCrResult.Dto,
  89. Dfo = arg3.TarCrResult.Dfo - arg1.TarCrResult.Dfo,
  90. Snr = (arg3.TarCrResult.Snr + arg1.TarCrResult.Snr) / 2
  91. };
  92. return X3(newArg1, newArg2, timeout, token);
  93. }
  94. public static Task<ExeResult<PosResult>> X4Ref(PstItemOptions arg1, PstItemOptions arg2, PstItemOptions arg3, int timeout = 60, CancellationToken token = default
  95. )
  96. {
  97. PstItemOptions newArg1 = new PstItemOptions();
  98. newArg1.MainPlaGeo = arg1.AdjaPlaGeo;
  99. newArg1.MainRecvGeo = arg1.AdjaRecvGeo;
  100. newArg1.AdjaPlaGeo = arg2.AdjaPlaGeo;
  101. newArg1.AdjaRecvGeo = arg2.AdjaRecvGeo;
  102. newArg1.TarCrResult = new CorResult()
  103. {
  104. Dto = arg2.TarCrResult.Dto - arg1.TarCrResult.Dto,
  105. Dfo = arg2.TarCrResult.Dfo - arg1.TarCrResult.Dfo,
  106. Snr = (arg2.TarCrResult.Snr + arg1.TarCrResult.Snr) / 2
  107. };
  108. newArg1.RftGeo = arg1.RftGeo;
  109. newArg1.MainRfCrResult = arg1.AdjaRfCrResult;
  110. newArg1.AdjaRfCrResult = arg2.AdjaRfCrResult;
  111. PstItemOptions newArg2 = new PstItemOptions();
  112. newArg2.MainPlaGeo = arg1.AdjaPlaGeo;
  113. newArg2.MainRecvGeo = arg1.AdjaRecvGeo;
  114. newArg2.AdjaPlaGeo = arg3.AdjaPlaGeo;
  115. newArg2.AdjaRecvGeo = arg3.AdjaRecvGeo;
  116. newArg2.TarCrResult = new CorResult()
  117. {
  118. Dto = arg3.TarCrResult.Dto - arg1.TarCrResult.Dto,
  119. Dfo = arg3.TarCrResult.Dfo - arg1.TarCrResult.Dfo,
  120. Snr = (arg3.TarCrResult.Snr + arg1.TarCrResult.Snr) / 2
  121. };
  122. newArg2.RftGeo = arg2.RftGeo;
  123. newArg1.MainRfCrResult = arg1.AdjaRfCrResult;
  124. newArg1.AdjaRfCrResult = arg3.AdjaRfCrResult;
  125. return X3Ref(newArg1, newArg2, timeout, token);
  126. }
  127. public static async Task<ExeResult<PosResult>> X1D2(PstItemOptions xdArg1, PstItemOptions xdArg2, GeoZone zone = null, int timeout = 60, CancellationToken token = default)
  128. {
  129. const string cmd = "loc x1d2";
  130. var cli = Cli.Wrap(CliPath)
  131. .WithArguments(args =>
  132. {
  133. args.Add(cmd);
  134. args.Add("--mseph").Add(xdArg1.MainPlaGeo.ToString());
  135. args.Add("--msant1").Add(xdArg1.MainRecvGeo.ToString());
  136. args.Add("--nsant1").Add(xdArg1.AdjaRecvGeo.ToString());
  137. args.Add("--dtotar1").Add(xdArg1.TarCrResult.Dto.ToString());
  138. args.Add("--refgeod1").Add(xdArg1.RftGeo.ToString());
  139. args.Add("--msdtoref1").Add(xdArg1.MainRfCrResult.Dto.ToString());
  140. args.Add("--msant2").Add(xdArg2.MainRecvGeo.ToString());
  141. args.Add("--nsant2").Add(xdArg2.AdjaRecvGeo.ToString());
  142. args.Add("--dtotar2").Add(xdArg2.TarCrResult.Dto.ToString());
  143. args.Add("--refgeod2").Add(xdArg2.RftGeo.ToString());
  144. args.Add("--msdtoref2").Add(xdArg2.MainRfCrResult.Dto.ToString());
  145. if (zone != null)
  146. args.Add("-z").Add(zone.ToString());
  147. });
  148. var res = await cli.ExecuteBufferedAsync(token.LinkTimeout(timeout));
  149. var dwResult = PosResult.FromString(res.StandardOutput);
  150. return ExeResult.Create(dwResult, cli.Arguments, res.StartTime, res.ExitTime, res.ExitCode, res.StandardError);
  151. }
  152. public static Task<ExeResult<PosResult>> X1D2(PstItemOptions arg1, PstItemOptions arg2, double range, int timeout = 60)
  153. {
  154. GeoZone zone = new GeoZone()
  155. {
  156. LonMin = Math.Min(arg1.AdjaRecvGeo.Lon - range, arg2.AdjaRecvGeo.Lon - range),
  157. LonMax = Math.Min(arg1.AdjaRecvGeo.Lon + range, arg2.AdjaRecvGeo.Lon + range),
  158. LatMin = Math.Min(arg1.AdjaRecvGeo.Lat - range, arg2.AdjaRecvGeo.Lat - range),
  159. LatMax = Math.Min(arg1.AdjaRecvGeo.Lat + range, arg2.AdjaRecvGeo.Lat + range)
  160. };
  161. return X1D2(arg1, arg2, zone, timeout);
  162. }
  163. public static async Task<ExeResult<PosResult>> X2D1(PstItemOptions sxArg, PstItemOptions xdArg, GeoZone zone = null, int timeout = 60, CancellationToken token = default)
  164. {
  165. const string cmd = "loc x2d1";
  166. var cli = Cli.Wrap(CliPath)
  167. .WithArguments(args =>
  168. {
  169. args.Add(cmd);
  170. args.Add("--mseph").Add(sxArg.MainPlaGeo.ToString());
  171. args.Add("--nseph").Add(sxArg.AdjaPlaGeo.ToString());
  172. args.Add("--msant1").Add(sxArg.MainRecvGeo.ToString());
  173. args.Add("--nsant1").Add(sxArg.AdjaRecvGeo.ToString());
  174. args.Add("--dtotar1").Add(sxArg.TarCrResult.Dto.ToString());
  175. args.Add("--msant2").Add(xdArg.MainRecvGeo.ToString());
  176. args.Add("--nsant2").Add(xdArg.AdjaRecvGeo.ToString());
  177. args.Add("--dtotar2").Add(xdArg.TarCrResult.Dto.ToString());
  178. args.Add("--refgeod").Add(sxArg.RftGeo.ToString());
  179. args.Add("--msdtoref1").Add(sxArg.MainRfCrResult.Dto.ToString());
  180. args.Add("--nsdtoref").Add(sxArg.AdjaRfCrResult.Dto.ToString());
  181. args.Add("--msdtoref2").Add(xdArg.MainRfCrResult.Dto.ToString());
  182. if (zone != null)
  183. args.Add("-z").Add(zone.ToString());
  184. });
  185. var res = await cli.ExecuteBufferedAsync(token.LinkTimeout(timeout));
  186. var dwResult = PosResult.FromString(res.StandardOutput);
  187. return ExeResult.Create(dwResult, cli.Arguments, res.StartTime, res.ExitTime, res.ExitCode, res.StandardError);
  188. }
  189. public static Task<ExeResult<PosResult>> X2D1(PstItemOptions sxArg, PstItemOptions xdArg, double range, int timeout = 60)
  190. {
  191. GeoZone zone = new GeoZone()
  192. {
  193. LonMin = xdArg.AdjaRecvGeo.Lon - range,
  194. LonMax = xdArg.AdjaRecvGeo.Lon + range,
  195. LatMin = xdArg.AdjaRecvGeo.Lat - range,
  196. LatMax = xdArg.AdjaRecvGeo.Lat + range
  197. };
  198. return X2D1(sxArg, xdArg, zone, timeout);
  199. }
  200. }
  201. }