pyhton调用STK常用代码

pyhton调用STK常用代码

使用python创建STK新实例

从零开始创建脚本
设置python的工作区

from win32api import GetSystemMetrics

导入com类型接口

from comtypes.client import CreateObject

创建句柄,root语句执行后,comtypes 库会自动创建包含 STKUtil 和 STK Objects 的 gen 文件夹,即comtypes.gen

uiApplication=CreateObject("STK11.Application") #type(uiApplication) 为 <class 'comtypes.POINTER(_IAgUiApplication)'>

设置STK界面是否可见

uiApplication.Visible=True  
uiApplication.UserControl=True

获取STK根对象,root类型: IAgStkObjectRoot
Personality2 返回STK对象模型的根对象的新实例 IAgStkObjectRoot 接口,假如是 Personality, 打开现有STK对象

root = uiApplication.Personality2 
from comtypes.gen import STKUtil
from comtypes.gen import STKObjects

创建仿真场景

创建新的场景
type(scenario) 为 <class ‘comtypes.POINTER(IAgStkObject)’>

root.NewScenario("Python_Starter")
scenario = root.CurrentScenario #获取当前场景

设置仿真时间
COM组件编程 对象转换 用 “QueryInterface”
“+n{Unit}” 输入时间增量仅对“StopTime结束时间”有效,并定义添加到开始时间的时间长度
n是一个整数, {Unit}取值: Day, Days, Hour, Hours, Hr, Hrs, Min, Mins, Minute, Minutes, Sec, Secs, Second, Seconds

scenario2 = scenario.QueryInterface(STKObjects.IAgScenario)
scenario2.SetTimePeriod('Today','+24hr')

STK对象模型的根对象root调用方法: 重置仿真时间
Rewind 本身是 IAgAnimation 的方法
type(root) 为 <class ‘comtypes.POINTER(_IAgStkObjectRoot)’>

root.Rewind();

创建目标

设置地面站目标,scenario 类型为 IAgStkObject
Children属性: 返回当前对象的直接后代的集合,返回类型为IAgStkObjectCollection
IAgStkObjectCollection.New 方法: 使用指定的类和实例名称创建STK对象
COM对象模型编程中的命名技巧:
则强制转换时,为QueryInterface(STKObjects.IAgTarget)
只需将前缀 e 改为前缀 IAg

target = scenario.Children.New(STKObjects.eTarget,"GroundTarget");
target2 = target.QueryInterface(STKObjects.IAgTarget)

设置位置坐标
Position 是只读属性, 但“COM对象编程”时,其接口类型为 IAgPosition
通过 IAgPosition 接口的 AssignGeodetic( Lat, # 纬度 Lon, # 经度 Alt # 海拔高度 )

target2.Position.AssignGeodetic(50,-100,0)

插入卫星,satellite 的类型 为 IAgStkObject

satellite = scenario.Children.New(STKObjects.eSatellite, "LeoSat")

卫星轨道外推,使用 IAgStkObjectRoot 接口 的 ExecuteCommand 方法

root.ExecuteCommand('SetState */Satellite/LeoSat Classical TwoBody "' + scenario2.StartTime + '" "'+ scenario2.StopTime +'" 60 ICRF "'+ scenario2.StartTime + '" 7200000.0 0.0 90 0.0 0.0 0.0')

计算卫星和地面站的可见性

使用 IAgStkObject 接口计算两个 STK 对象之间的访问

access = satellite.GetAccessToObject(target)
access.ComputeAccess()
accessDP = access.DataProviders.Item('Access Data')
accessDP2 = accessDP.QueryInterface(STKObjects.IAgDataPrvInterval)
results = accessDP2.Exec(scenario2.StartTime, scenario2.StopTime)
accessStartTimes = results.DataSets.GetDataSetByName('Start Time').GetValues()
accessStopTimes = results.DataSets.GetDataSetByName('Stop Time').GetValues()

也可以用以下代码设置开始和停止时间

accessIntervals = access.ComputedAccessIntervalTimes
accessDataProvider = access.DataProviders.Item('Access Data')
accessDataProvider2 = accessDataProvider.QueryInterface(STKObjects.IAgDataPrvInterval)
dataProviderElements = ['Start Time', 'Stop Time']

for i in range(0,accessIntervals.Count):
times = accessIntervals.GetInterval(i)
	 print(times)

计算access

satelliteDP = satellite.DataProviders.Item('LLA State')
satelliteDP2 = satelliteDP.QueryInterface(STKObjects.IAgDataProviderGroup)
satelliteDP3 = satelliteDP2.Group.Item('Fixed')
satelliteDP4 = satelliteDP3.QueryInterface(STKObjects.IAgDataPrvTimeVar)
rptElements = ['Time', 'Lat', 'Lon', 'Alt']

satellitDPTimeVar = satelliteDP4.ExecElements(accessStartTimes,accessStopTimes, 60, rptElements)
satelliteAltitude = satellitDPTimeVar.DataSets.GetDataSetByName('Alt').GetValues()
print(satelliteAltitude)
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值