博主发现STK里面有覆盖面的定义,也可以满足我的要求,而且在后面的覆盖计算中这个会更加简单,一起学习一下
覆盖面定义
为覆盖添加网格约束
uiap = actxserver('STK11.application');
uiap.Visible = 1;
root = uiap.Personality2;
root.NewScenario('exam');
disp('NewScenario');
scenario = root.CurrentScenario;
coverage = scenario.Children.New('eCoverageDefinition', 'MyCoverage');
facility = scenario.Children.New('eFacility', 'MyFacility');
% IAgCoverageDefinition coverage: Coverage object
coverage.PointDefinition.GridClass = 'eGridClassFacility';
coverage.PointDefinition.UseGridSeed = true;
coverage.PointDefinition.SeedInstance = 'Facility/MyFacility';
disp('done');
计算覆盖率
coverage.ComputeAccesses;
命令行中输入该语句即可;
创建一个新的CoverageDefinition(在当前场景中心体上)
uiap = actxserver('STK11.application');
uiap.Visible = 1;
root = uiap.Personality2;
root.NewScenario('exam');
disp('NewScenario');
scenario = root.CurrentScenario;
% IAgScenario scenario: Scenario object
% Create new Coverage Definition and set the Bounds to an area target
areaTarget = scenario.Children.New('eAreaTarget', 'MyAreaTarget');
root.BeginUpdate();
boundary = {39.26, 115.25;
39.26, 117.30;
41.03, 117.30;
41.03, 115.25};
areaTarget.CommonTasks.SetAreaTypePattern(boundary);
root.EndUpdate();
satellite = scenario.Children.New('eSatellite', 'MySatellite');
coverage = scenario.Children.New('eCoverageDefinition', 'MyCoverage');
coverage.Grid.BoundsType = 'eBoundsCustomRegions';
covGrid = coverage.Grid;
bounds = covGrid.Bounds;
bounds.AreaTargets.Add('AreaTarget/MyAreaTarget');
% Define the Grid Resolution
Res = covGrid.Resolution;
Res.LatLon = .5; % deg
% Set the satellite as the Asset
coverage.AssetList.Add('Satellite/MySatellite');
这一块代码实现了我将之前我设置的北京Area Target转为Coverage Definition,并生成卫星(这里卫星只是简单定义一下,后面会为其设置六根数等),将此卫星添加为覆盖资源,这里我再附上一些命令行代码,可以做出一些验证
%在STK窗口中,使得卫星显现出来
satellite.Propagator.Propagate();
%将网格点分辨率设置,将LatLon类型改为Distance类型,并设置50Km设立一个网格点
covGrid.ResolutionType = 'eResolutionDistance';
covGrid.Resolution.Distance = 50;
设置覆盖率的高级设置
% IAgCoverageDefinition coverage: Coverage object
advanced = coverage.Advanced;
advanced.AutoRecompute = false;
advanced.DataRetention = 'eAllData';
advanced.SaveMode = 'eSaveAccesses';
在这里我想给大家分享一个实用的技巧,.get .invoke这两个命令可以帮助我们理解,上例子
coverage.get
% 命令行输入命令,得到下面的信息
%我对其中的Advanced感兴趣,那么可以输入
coverage.Advanced.get
%得到下面的信息
coverage.invoke
得到函数的使用方法
将覆盖区间设置为对象的可用性分析区间
% IAgSatellite satellite: Satellite object
% IAgCoverageDefinition coverage: Coverage object
satVGT = satellite.Vgt;
AvailTimeSpan = satVGT.EventIntervals.Item('AvailabilityTimeSpan');
IntResult = AvailTimeSpan.FindInterval;
coverage.Interval.AnalysisInterval.SetStartAndStopTimes(IntResult.Interval.Start, IntResult.Interval.Stop)