STK二次开发之MATLAB 覆盖面定义

博主发现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)

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值