using CliWrap; using CliWrap.Buffered; using Ips.Library.Basic; using Ips.Library.Entity; using System; using System.Collections.Generic; using System.Text; using System.Threading; using System.Threading.Tasks; namespace Ips.Pto { public class PtoUtils { internal static readonly string CliPath = PathUtil.GetAssemblyPath("ipscli", "pto", "pto.exe"); public static async Task> X3(PstItemOptions arg1, PstItemOptions arg2, int timeout = 60, CancellationToken token = default) { const string cmd = "loc x3"; var cli = Cli.Wrap(CliPath) .WithArguments(args => { args.Add(cmd); args.Add("--mseph1").Add(arg1.MainPlaGeo.ToString()); args.Add("--nsEph1").Add(arg1.AdjaPlaGeo.ToString()); args.Add("--msant1").Add(arg1.MainRecvGeo.ToString()); args.Add("--nsant1").Add(arg1.AdjaRecvGeo.ToString()); args.Add("--dtotar1").Add(arg1.TarCrResult.Dto); args.Add("--mseph2").Add(arg2.MainPlaGeo.ToString()); args.Add("--nseph2").Add(arg2.AdjaPlaGeo.ToString()); args.Add("--msant2").Add(arg2.MainRecvGeo.ToString()); args.Add("--nsant2").Add(arg2.AdjaRecvGeo.ToString()); args.Add("--dtotar2").Add(arg2.TarCrResult.Dto); }); var res = await cli.ExecuteBufferedAsync(token.LinkTimeout(timeout)); var dwResult = PosResult.FromString(res.StandardOutput); return ExeResult.Create(dwResult, cli.Arguments, res.StartTime, res.ExitTime, res.ExitCode, res.StandardError); } public static async Task> X3Ref(PstItemOptions arg1, PstItemOptions arg2, int timeout = 60, CancellationToken token = default) { const string cmd = "loc x3ref"; var cli = Cli.Wrap(CliPath) .WithArguments(args => { args.Add(cmd); args.Add("--mseph1").Add(arg1.MainPlaGeo.ToString()); args.Add("--nsEph1").Add(arg1.AdjaPlaGeo.ToString()); args.Add("--dtotar1").Add(arg1.TarCrResult.Dto.ToString()); args.Add("--refgeod1").Add(arg1.RftGeo.ToString()); args.Add("--dtoref1").Add(arg1.AdjaRfCrResult.Dto - arg1.MainRfCrResult.Dto); args.Add("--mseph2").Add(arg2.MainPlaGeo.ToString()); args.Add("--nsEph2").Add(arg2.AdjaPlaGeo.ToString()); args.Add("--dtotar2").Add(arg2.TarCrResult.Dto.ToString()); args.Add("--refgeod2").Add(arg2.RftGeo.ToString()); args.Add("--dtoref2").Add(arg2.AdjaRfCrResult.Dto - arg2.MainRfCrResult.Dto); if (arg1.MainRecvGeo != null) args.Add("--msAnt1").Add(arg1.MainRecvGeo.ToString()); if (arg1.AdjaRecvGeo != null) args.Add("--nsAnt1").Add(arg1.AdjaRecvGeo.ToString()); if (arg2.MainRecvGeo != null) args.Add("--msAnt2").Add(arg2.MainRecvGeo.ToString()); if (arg2.AdjaRecvGeo != null) args.Add("--nsAnt2").Add(arg2.AdjaRecvGeo.ToString()); }); var res = await cli.ExecuteBufferedAsync(token.LinkTimeout(timeout)); var dwResult = PosResult.FromString(res.StandardOutput); return ExeResult.Create(dwResult, cli.Arguments, res.StartTime, res.ExitTime, res.ExitCode, res.StandardError); } public static Task> X4(PstItemOptions arg1, PstItemOptions arg2, PstItemOptions arg3, int timeout = 60, CancellationToken token = default ) { PstItemOptions newArg1 = new PstItemOptions(); newArg1.MainPlaGeo = arg1.AdjaPlaGeo; newArg1.MainRecvGeo = arg1.AdjaRecvGeo; newArg1.AdjaPlaGeo = arg2.AdjaPlaGeo; newArg1.AdjaRecvGeo = arg2.AdjaRecvGeo; newArg1.TarCrResult = new CorResult() { Dto = arg2.TarCrResult.Dto - arg1.TarCrResult.Dto, Dfo = arg2.TarCrResult.Dfo - arg1.TarCrResult.Dfo, Snr = (arg2.TarCrResult.Snr + arg1.TarCrResult.Snr) / 2 }; PstItemOptions newArg2 = new PstItemOptions(); newArg2.MainPlaGeo = arg1.AdjaPlaGeo; newArg2.MainRecvGeo = arg1.AdjaRecvGeo; newArg2.AdjaPlaGeo = arg3.AdjaPlaGeo; newArg2.AdjaRecvGeo = arg3.AdjaRecvGeo; newArg2.TarCrResult = new CorResult() { Dto = arg3.TarCrResult.Dto - arg1.TarCrResult.Dto, Dfo = arg3.TarCrResult.Dfo - arg1.TarCrResult.Dfo, Snr = (arg3.TarCrResult.Snr + arg1.TarCrResult.Snr) / 2 }; return X3(newArg1, newArg2, timeout, token); } public static Task> X4Ref(PstItemOptions arg1, PstItemOptions arg2, PstItemOptions arg3, int timeout = 60, CancellationToken token = default ) { PstItemOptions newArg1 = new PstItemOptions(); newArg1.MainPlaGeo = arg1.AdjaPlaGeo; newArg1.MainRecvGeo = arg1.AdjaRecvGeo; newArg1.AdjaPlaGeo = arg2.AdjaPlaGeo; newArg1.AdjaRecvGeo = arg2.AdjaRecvGeo; newArg1.TarCrResult = new CorResult() { Dto = arg2.TarCrResult.Dto - arg1.TarCrResult.Dto, Dfo = arg2.TarCrResult.Dfo - arg1.TarCrResult.Dfo, Snr = (arg2.TarCrResult.Snr + arg1.TarCrResult.Snr) / 2 }; newArg1.RftGeo = arg1.RftGeo; newArg1.MainRfCrResult = arg1.AdjaRfCrResult; newArg1.AdjaRfCrResult = arg2.AdjaRfCrResult; PstItemOptions newArg2 = new PstItemOptions(); newArg2.MainPlaGeo = arg1.AdjaPlaGeo; newArg2.MainRecvGeo = arg1.AdjaRecvGeo; newArg2.AdjaPlaGeo = arg3.AdjaPlaGeo; newArg2.AdjaRecvGeo = arg3.AdjaRecvGeo; newArg2.TarCrResult = new CorResult() { Dto = arg3.TarCrResult.Dto - arg1.TarCrResult.Dto, Dfo = arg3.TarCrResult.Dfo - arg1.TarCrResult.Dfo, Snr = (arg3.TarCrResult.Snr + arg1.TarCrResult.Snr) / 2 }; newArg2.RftGeo = arg2.RftGeo; newArg1.MainRfCrResult = arg1.AdjaRfCrResult; newArg1.AdjaRfCrResult = arg3.AdjaRfCrResult; return X3Ref(newArg1, newArg2, timeout, token); } public static async Task> X1D2(PstItemOptions xdArg1, PstItemOptions xdArg2, GeoZone zone = null, int timeout = 60, CancellationToken token = default) { const string cmd = "loc x1d2"; var cli = Cli.Wrap(CliPath) .WithArguments(args => { args.Add(cmd); args.Add("--mseph").Add(xdArg1.MainPlaGeo.ToString()); args.Add("--msant1").Add(xdArg1.MainRecvGeo.ToString()); args.Add("--nsant1").Add(xdArg1.AdjaRecvGeo.ToString()); args.Add("--dtotar1").Add(xdArg1.TarCrResult.Dto.ToString()); args.Add("--refgeod1").Add(xdArg1.RftGeo.ToString()); args.Add("--msdtoref1").Add(xdArg1.MainRfCrResult.Dto.ToString()); args.Add("--msant2").Add(xdArg2.MainRecvGeo.ToString()); args.Add("--nsant2").Add(xdArg2.AdjaRecvGeo.ToString()); args.Add("--dtotar2").Add(xdArg2.TarCrResult.Dto.ToString()); args.Add("--refgeod2").Add(xdArg2.RftGeo.ToString()); args.Add("--msdtoref2").Add(xdArg2.MainRfCrResult.Dto.ToString()); if (zone != null) args.Add("-z").Add(zone.ToString()); }); var res = await cli.ExecuteBufferedAsync(token.LinkTimeout(timeout)); var dwResult = PosResult.FromString(res.StandardOutput); return ExeResult.Create(dwResult, cli.Arguments, res.StartTime, res.ExitTime, res.ExitCode, res.StandardError); } public static Task> X1D2(PstItemOptions arg1, PstItemOptions arg2, double range, int timeout = 60) { GeoZone zone = new GeoZone() { LonMin = Math.Min(arg1.AdjaRecvGeo.Lon - range, arg2.AdjaRecvGeo.Lon - range), LonMax = Math.Min(arg1.AdjaRecvGeo.Lon + range, arg2.AdjaRecvGeo.Lon + range), LatMin = Math.Min(arg1.AdjaRecvGeo.Lat - range, arg2.AdjaRecvGeo.Lat - range), LatMax = Math.Min(arg1.AdjaRecvGeo.Lat + range, arg2.AdjaRecvGeo.Lat + range) }; return X1D2(arg1, arg2, zone, timeout); } public static async Task> X2D1(PstItemOptions sxArg, PstItemOptions xdArg, GeoZone zone = null, int timeout = 60, CancellationToken token = default) { const string cmd = "loc x2d1"; var cli = Cli.Wrap(CliPath) .WithArguments(args => { args.Add(cmd); args.Add("--mseph").Add(sxArg.MainPlaGeo.ToString()); args.Add("--nseph").Add(sxArg.AdjaPlaGeo.ToString()); args.Add("--msant1").Add(sxArg.MainRecvGeo.ToString()); args.Add("--nsant1").Add(sxArg.AdjaRecvGeo.ToString()); args.Add("--dtotar1").Add(sxArg.TarCrResult.Dto.ToString()); args.Add("--msant2").Add(xdArg.MainRecvGeo.ToString()); args.Add("--nsant2").Add(xdArg.AdjaRecvGeo.ToString()); args.Add("--dtotar2").Add(xdArg.TarCrResult.Dto.ToString()); args.Add("--refgeod").Add(sxArg.RftGeo.ToString()); args.Add("--msdtoref1").Add(sxArg.MainRfCrResult.Dto.ToString()); args.Add("--nsdtoref").Add(sxArg.AdjaRfCrResult.Dto.ToString()); args.Add("--msdtoref2").Add(xdArg.MainRfCrResult.Dto.ToString()); if (zone != null) args.Add("-z").Add(zone.ToString()); }); var res = await cli.ExecuteBufferedAsync(token.LinkTimeout(timeout)); var dwResult = PosResult.FromString(res.StandardOutput); return ExeResult.Create(dwResult, cli.Arguments, res.StartTime, res.ExitTime, res.ExitCode, res.StandardError); } public static Task> X2D1(PstItemOptions sxArg, PstItemOptions xdArg, double range, int timeout = 60) { GeoZone zone = new GeoZone() { LonMin = xdArg.AdjaRecvGeo.Lon - range, LonMax = xdArg.AdjaRecvGeo.Lon + range, LatMin = xdArg.AdjaRecvGeo.Lat - range, LatMax = xdArg.AdjaRecvGeo.Lat + range }; return X2D1(sxArg, xdArg, zone, timeout); } } }