在分析多个地面站对某个卫星目标的可见性时,如果只考虑用单站可见性进行分析,会有可见弧段重叠,不能给出可见弧段的整体情况。比如站1:13:45-13:55可见,战2:13:50-13:57可见,两个站总的可见弧长为13:45~13:57。要分析一组地面站对卫星的可见情况,则需要先建立由地面站组成的Constellation,然后建立Chain,即可获取相关数据。
下面上代码:
uiap = actxserver(‘STK11.application’);
root = uiap.Personality2;
root.NewScenario(‘constellation’);
sc = root.CurrentScenario;
sat = sc.Children.New(18,‘mysat’);
sat.Propagator.Propagate;
fac_con = sc.Children.New(‘eConstellation’,‘faconstellation’);
for j = 1:8
facname = [‘fac_’,num2str(j)];
fac = sc.Children.New(‘eFacility’,facname);
fac.Position.AssignGeodetic(sign(rand(1)-0.5)*rand(1)*50,(rand(1)-0.5)*rand(1)*180,0);
%设置地面站最小仰角、最大作用距离
facConstraints = fac.AccessConstraints;
elevationCstr = facConstraints.AddConstraint(‘eCstrElevationAngle’);
elevationCstr.EnableMin = 1;
elevationCstr.Min = 8;
rangeCstr = facConstraints.AddConstraint(‘eCstrRange’);
rangeCstr.EnableMax= 1;
rangeCstr.Max = 2000;
%向Constellation添加地面站对象
fac_con.Objects.AddObject(fac);
end
%建立Chain对象
facsatchain = sc.Children.New(‘eChain’,‘faccon2sat’);
facsatchain.Objects.AddObject(fac_con);
facsatchain.Objects.AddObject(sat);
%读取所有的可见弧段
allintervals= facsatchain.vgt.EventIntervalLists.Item(‘CompleteChainAccessIntervals’).FindIntervals;
output_interval = cell(allintervals.Intervals.Count,1);
for i =1:allintervals.Intervals.Count
output_interval{i} = {[‘第’,num2str(i),‘可见弧段:’],allintervals.Intervals.Item(i-1).Start,allintervals.Intervals.Item(i-1).Stop};
end
以上代码就完成了Constellation建立,Chain建立,以及读取Complete Chain Access弧段的功能。代码经过了验证,大家可以放心使用。