当前位置: 首页 > news >正文

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)

相关文章:

  • 【vue3】嵌套的 effect 与 effect 栈
  • 【spring】@ControllerAdvice注解学习
  • 【设计模式】桥接模式
  • 小皮面板中访问不了本地的sqli网站---解决方法
  • 【Andoird开发】android获取蓝牙权限,搜索蓝牙设备MAC
  • Reactor设计模式
  • P3128 [USACO15DEC] Max Flow P题解(树上差分,最近公共祖先,图论)
  • Golang | Leetcode Golang题解之第111题二叉树的最小深度
  • Python | Leetcode Python题解之第111题二叉树的最小深度
  • Python基础学习笔记(七)——元组
  • python从入门到精通02
  • SELINUX=enforcing时无法启动httpd服务的解决方案(semanage命令以及setroubleshoot-server插件的妙用)
  • 门禁-jenkins的构建状态同步到gitlab提交流水线
  • C++中的模板类的定义与使用
  • win11 通过防火墙设置-开通本地端口
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • Android单元测试 - 几个重要问题
  • ECMAScript6(0):ES6简明参考手册
  • emacs初体验
  • EOS是什么
  • Git 使用集
  • JavaScript标准库系列——Math对象和Date对象(二)
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • JS基础之数据类型、对象、原型、原型链、继承
  • Median of Two Sorted Arrays
  • Mysql数据库的条件查询语句
  • quasar-framework cnodejs社区
  • vue 个人积累(使用工具,组件)
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • webpack入门学习手记(二)
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 爱情 北京女病人
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 前端相关框架总和
  • 使用common-codec进行md5加密
  • 数据结构java版之冒泡排序及优化
  • 微服务核心架构梳理
  • 我看到的前端
  • 在Unity中实现一个简单的消息管理器
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • # 飞书APP集成平台-数字化落地
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (JS基础)String 类型
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (一)VirtualBox安装增强功能
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (转)shell调试方法
  • (转)socket Aio demo
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包