美文网首页
STK组件:利用双行根数TLE做过境预报

STK组件:利用双行根数TLE做过境预报

作者: 奔跑伯爵 | 来源:发表于2020-08-14 08:37 被阅读0次
  1. 添加对三个dll的引用:AGI.Foundation.Core.dllAGI.Foundation.Models.dllAGI.Foundation.Platforms.dll
  2. 过境预报只能输出添加的约束条件下过境的起止时间,具体的点位数据是要另外加代码计算得到
  3. 完整代码如下
using AGI.Foundation;
using AGI.Foundation.Access;
using AGI.Foundation.Access.Constraints;
using AGI.Foundation.Celestial;
using AGI.Foundation.Coordinates;
using AGI.Foundation.Geometry;
using AGI.Foundation.Propagators;
using AGI.Foundation.Time;
using System;

namespace Example007
{
    /// <summary>
    /// 过境预报
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            string license = @"...有效的lic...";
            Licensing.ActivateLicense(license);

            // 定义需预报的时间区间
            JulianDate start = new JulianDate(new DateTime(2020, 8, 13, 0, 0, 0));
            JulianDate stop = new JulianDate(new DateTime(2020, 8, 14, 0, 0, 0));

            // 给定卫星根数
            string line1 = "1 25544U 98067A   20226.06311231  .00000634  00000-0  19556-4 0  9992";
            string line2 = "2 25544  51.6462  66.9823 0001637  29.7739 108.2756 15.49160058240839";

            // 创建卫星的运动点
            var sgp4 = new Sgp4Propagator(new TwoLineElementSet(line1 + "\n" + line2));
            PropagatorPoint satPoint = sgp4.CreatePoint();

            // 角度转弧度
            double d2r = Math.PI / 180;
            // 获取地球
            EarthCentralBody earth = CentralBodiesFacet.GetFromContext().Earth;

            // 预报相对于测站的方位、仰角和距离
            // 先定义测站位置
            var stationPoint = new PointCartographic(earth, new Cartographic(120 * d2r, 30 * d2r, 100));

            // 使用仰角约束
            var constraint = new ElevationAngleConstraint
            {
                MinimumValue = Trig.DegreesToRadians(10.0),
                MaximumValue = Constants.HalfPi,
                ConstrainedLink = new LinkInstantaneous(satPoint, stationPoint),
                ConstrainedLinkEnd = LinkRole.Receiver
            };

            AccessQueryResult result = constraint.GetEvaluator().Evaluate(new TimeInterval(start, stop));
            foreach(var ti in result.SatisfactionIntervals)
            {
                Console.WriteLine("{0:yyyy-MM-dd HH:mm:ss.fff}  {1:yyyy-MM-dd HH:mm:ss.fff}",
                    ti.Start.ToDateTime(), ti.Stop.ToDateTime());
            }

            Console.ReadKey();
        }
    }
}

相关文章

网友评论

      本文标题:STK组件:利用双行根数TLE做过境预报

      本文链接:https://www.haomeiwen.com/subject/ipwwdktx.html