STK9中自建数据库批量插入地面设施(Facility)

本文介绍了如何在STK(System Tool Kit)中创建自定义地面设施数据库,以便于在不同场景中重复使用预定义的设施。通过分析STK自带的数据库文件格式,构建了包含北京、上海、深圳、乌鲁木齐四个城市的地面站数据库,并详细展示了创建过程和测试步骤。此外,还探讨了拓展应用,如自定义城市数据库和将自定义数据添加到STK默认数据库中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说明

STK版本:9.2.2

需求

在STK场景中经常需要插入地面设施(Facility)对象,地面设施对象的基本包括:纬度、经度和高度,STK提供了一个数据库可以方便的进行选择,快捷插入预定义的地面设施。

在自己的需求中,经常要插入的地面设施不在STK自带的数据库中,构建不同的场景时,同一个地面设施需要重复输入对象属性数据,非常不方便。经测试,发现STK支持自己构建数据库(文件),通过自己构建的数据库(文件)方便快捷的插入自己预定义的地面设施。

数据准备

假设有如下4个地面站:北京、上海、深圳、乌鲁木齐,各地面站经纬度如下表。

序号

地面站

纬度

经度

1

北京(BeiJing)

39°54’20’’N(39.90°)

116°25’29’’E(116.40°)

2

上海(ShangHai)

31°12’00’’N(31.23°)

121°26’00’’E(121.47°)

3

深圳(ShenZhen)

22°38’00’’N(22.55°)

114°10’00’’E(114.05°)

4

乌鲁木齐(Urumqi)

43°46’00’’N(43.82°)

87°36’00’’E(87.62°)

注:上表中的数据为网络搜索得到,各地(城市)的经纬度实际是一个变化的范围,上表中的数据仅为参考

STK地面设施数据库(文件)分析

找到安装目录下STK附带的本地地面设施数据库文件(stkFacility.fd),该文件是一个文本文件,直接打开后,查看其格式,文件每一行代表一个预定的地面设施,如下图(本例截取了中间几行代表性数据):

 根据STK官网(https://help.agi.com/stk/)的在线手册,对stkFacility.fd的说明如下:

 分析:每行数据由6列、89个字符组成,每列的意义分别为:设施名称、(数据来源的)网络、纬度(单位:°)、经度(单位:°)、高度(m)、中心体(均默认为Earth),各列的长度见图(一目了然)。

构建自己的地面设施数据库

参照STK规范构建自己的地面设施数据库,例如命名为customFacility.fd,内容如下图:

 说明:

  1. 文本文件格式选择保存为“ANSI/ASCII”;
  2. 所有的数据库来源(第2列)均设置为‘Other’;
  3. 所有的(海拔)高度均设置为:0。

测试

启动STK,新建场景。

主菜单:插入 -> 新建,弹出“Insert STK Objects”对话框。

选择‘Facility,在右侧‘Select A Method’中,选择‘Select From Facility Database’。

点击‘Insert’按钮,在弹出的对话框中点击‘Advanced…’按钮,如下图所示:

         在弹出的对话框中,点击选择数据库文件按钮,如下图。然后选择自己定义的地面设施数据库文件(例如本例中的customFacility.fd),然后点击‘OK’按钮。

回到‘Insert From Facility DataBase’界面,记住要点击界面上的‘Search’按钮,重新执行搜索,OK!大功告成,而且,STK的数据文件及界面居然支持中文!(坏消息是插入对象后对象浏览窗口的对象名称为乱码,虽然可以将对象名更改为中文,但在STK的三维窗口中仍然会显示乱码,乱码问题的解决不在本文讨论范围),结果如下图。

 OK!现在可以愉快的选择自己想要插入的地面设施了,而且,在不同的场景中可以方便地复用。

拓展

-> 也可以通过自定义城市数据库(在插入对象操作中选择‘Select From City Database’)完成地面设施的定制。

-> 可以将自定义的地面设施直接添加到STK自带的数据库文件(stkFacility.fd)中,好处是少一个文件,缺点是需要在一个长长的列表中查找或搜索定位。

-> STK中的其他对象应该也是支持通过自定义数据库的方式进行快捷的对象插入操作(尚未亲测)。

-> 如果需要把自定义的文件作为默认的地面设施数据库文件,则需要把文件拷贝到STK默认的数据库文件目录(通过搜索定位,或者通过修改STK的配置调整默认数据库文件的位置)。

-> 虽然本场景是基于STK 9.2定制的,可以推断的是,在更高版本的STK中也是支持的,只是界面和操作略有不同。

### 在STK批量选择卫星下的传感器并添加至CoverageDefinition Assets 在STK环境中,为了实现批量选择卫星下的传感器并将这些传感器添加到`CoverageDefinition`中的`Assets`部分,可以采用脚本化的方式简化操作流程。具体方法如下: #### 使用VBA或C#进行自动化处理 对于复杂场景下多个卫星及其携带的多种类型的传感器而言,编写一段VBA或C#代码来遍历所有指定条件匹配的对象集合是一种高效手段。 ```csharp // 假设已经获取了当前打开的Scenario对象 scenarioObj var satellites = scenarioObj.GetObjectsByClass(AgESTKObjectType.eSatellite); foreach (IAgSatellite sat in satellites) { foreach (IAgSensor sensor in sat.Sensors) { coverageDef.Assets.Add(sensor); // 将符合条件的sensor加入到coverage definition assets列表里 } } ``` 这段代码展示了如何循环访问每一个卫星,并进一步迭代其下属的所有传感器实例,最终将它们逐一追加给定的覆盖率定义资产组内[^1]。 #### 利用MATLAB接口控制STK 如果倾向于利用MATLAB作为主要开发平台,则可以通过COM组件连接方式与STK交互完成相同任务。下面给出了一段简单的示例代码片段用于说明此过程: ```matlab % 获取stk应用程序句柄 appHandle 和 当前scenario handle scenHandle appHandle = actxserver('AgStkObjectLibrary.Application'); scenHandle = appHandle.CurrentScenario; satellites = scenHandle.Children.Item(1).Children; % 这里的Item(1)代表第一个类目即卫星类别 for i=1:satellites.Count satellite = satellites.Item(i); sensors = satellite.Children; for j=1:sensors.Count sensor = sensors.Item(j); if isa(sensor,'IAgSensor') && contains(char(sensor.Name),'特定名称模式') covDef = ... ; % 定义好要关联的目标Coverage Definition 对象 covDef.Assets.Add(sensor); end end end clear appHandle scenHandle; ``` 上述代码实现了通过筛选具有特定命名规则的传感器来进行批量化管理的目的[^2]。 #### Python-STK联合仿真的应用 当涉及到更复杂的逻辑判断或是长时间运行的任务调度时,Python提供了更为灵活的数据结构支持和丰富的第三方库资源。借助于Python-STK API能够轻松构建起一套完整的自动化框架用来辅助日常科研工作。 ```python from AGI.STKUtil import * from AGI.StkObjects import * stkRoot = StkRoot() # 创建根节点对象 scenario = stkRoot.CurrentScenario # 取得当前活动的情景 sats = [obj for obj in scenario.Children if isinstance(obj, AgSatellite)] for sat in sats: sensors = [child for child in sat.Children if isinstance(child, AgSensor)] for sensor in sensors: try: cov_def = ... # 初始化或查找已存在的Coverage Definition 实体 cov_def.Assets.Add(sensor.Path) # 向cov_def的assets属性传入路径字符串形式表示的sensor实体引用 except Exception as e: print(f"Error occurred while adding {sensor.Name}: ", str(e)) ``` 该段Python代码同样完成了对多颗卫星上搭载的不同种类传感设备的一次性配置更新动作[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值