创建一个区域目标(在当前场景的中心体上)
root.ExecuteCommand('New / */AreaTarget MyAreaTarget');
帮助文档中可见命令的详细解释:
从一个纬度/长度/高度的列表中定义区域目标的边界和位置
root.ExecuteCommand('SetBoundary */AreaTarget/MyAreaTarget Pattern LatLon 3 48.897 18.637 46.534 13.919 44.147 21.476');
这里详细解释一下这个命令:
SetBoundary <ATObjectPath> {Type} <Parameters>
这个就是 SetBoundary命令的形式,其中<ATObjectPath>对应着例子中的*/AreaTarget/MyAreaTarget,以表明对谁进行操作,Type有如下类型:
{Type} | <Parameter> |
Pattern | [{PointType}] <NumPoints> {PointDefn} |
Ellipse | <SemiMajorAxis> <SemiMinorAxis> <Bearing> |
这里以Pattern为例(Ellipse其实就是椭圆,参数也很简单,两个距离一个角度,给出一个例子,如下),如果{Type}是<Pattern>,所定义的区域将通过连接第一个到最后一个点;<NumPoints>就是点的个数;其实{PointType}还有一种UTM,大家可以自己探索
root.ExecuteCommand('SetUnits / km'); %Default Connect Units are meters
root.ExecuteCommand('SetBoundary */AreaTarget/MyAreaTarget Ellipse 85.25 80.75 44');
{PointType} | {PointDefn} | Description |
LatLon | <Latitude> <Longitude> | 输入每个点的纬度和经度,默认单位是度 |
列出一个区域目标中的所有点,返回一个白空间分隔的字符向量
patternPoints = root.ExecuteCommand('GetBoundary */AreaTarget/MyAreaTarget');
打印出所有的点
%String的格式为'48.897000 deg 18.637000 deg',所以需要第一和第三元素,因为MATLAB标准分隔符是空格
for j = 1:patternPoints.Count - 1
LLAData = strread(patternPoints.Item(j), '%s');
fprintf(['Lat: ' LLAData{1} ' deg Lon: ' LLAData{3} ' deg \n\n']);
end
应用
uiap = actxserver('STK11.application');
root = uiap.Personality2;
root.NewScenario('mysce');
scen = root.CurrentScenario;
root.ExecuteCommand('New / */AreaTarget MyAreaTarget');
root.ExecuteCommand('SetBoundary */AreaTarget/MyAreaTarget Pattern LatLon 3 48.897 18.637 46.534 13.919 44.147 21.476');
patternPoints = root.ExecuteCommand('GetBoundary */AreaTarget/MyAreaTarget');
for j = 1:patternPoints.Count - 1
LLAData = strread(patternPoints.Item(j), '%s');
fprintf(['Lat: ' LLAData{1} ' deg Lon: ' LLAData{3} ' deg \n\n']);
end
结果如图: