python互联(读取已存在的access信息)--pycharm
# %%import
import datetime
import os
import time
from tqdm import tqdm
import pandas as pd
from win32api import GetSystemMetrics
#import win32com.client
from comtypes.gen import STKObjects
from comtypes.client import CreateObject, GetActiveObject, GetEvents, CoGetObject, ShowEvents
# %%
# 创建数据存储路径
target_excel_dir = r'F:/python file/STK/stk01'
if not os.path.exists(target_excel_dir):
os.makedirs(target_excel_dir)
# %%run stk
# Get reference to running STK instance
app = CreateObject("STK11.Application")
app.Visible = True
app.UserControl=True
# Get our IAgStkObjectRoot interface
root = app.Personality2
root.Load('F:\STKwork\Scenario6\Scenario2.sc')
root.UnitPreferences.SetCurrentUnit("DateFormat", "EpSec")#不然UTCG只能读取最后时间段的信息
#root.UnitPreferences.SetCurrentUnit("DateFormat", "UTCG")
scenario = root.CurrentScenario
scenario2 = scenario.QueryInterface(STKObjects.IAgScenario)
'''
# creat a new scenario
# IAgStkObjectRoot root: STK Object Model Root
root.NewScenario('Beidou3G2') # 场景名称不能有空格等非法字符
root.UnitPreferences.SetCurrentUnit('DateFormat', 'UTCG')
# 设置场景时间
root.CurrentScenario.StartTime = '8 Jun 2020 16:00:00.00'
root.CurrentScenario.StopTime = '10 Jun 2020 04:00:00.00'
# %%定义函数创建卫星并导出数据
# path_tle:D:/xxx/xxx.txt存储目标的tle文件夹
'''
def Compute_access(access,Transmitter_name,Reciver_name):
access.ComputeAccess()
print(access)
accessDP = access.DataProviders.GetDataPrvTimeVarFromPath("AER Data/Default")
#accessDP2 = accessDP.QueryInterface(STKObjects.IAgDataPrvTimeVar)
elements = ["Time", "Range"]
accessResults = accessDP.ExecElements(scenario2.StartTime, scenario2.StopTime, 300 ,elements)
Times = accessResults.DataSets.GetDataSetByName('Time').GetValues() # 时间
Range = accessResults.DataSets.GetDataSetByName('Range').GetValues()
print(len(Times))
Data = pd.DataFrame(columns=('Time (UTC)','Range (km)'))
for j in range(0, len(Times)):
t = Times[j]
ran = Range[j]
Data = Data.append(pd.DataFrame(
{'Time (UTC)': [t],
'Range (km)': [ran]}),
ignore_index=True)
#print(Data.head())
# 存储Data
Data.to_excel(target_excel_dir + '/' + Transmitter_name+'-'+Reciver_name+'.xlsx',
'sheet1', float_format='%.3f', index=False)
return Times,Range
# %%执行函数
path_tle = r'F:/python file/STK/irdium75.txt'
t1 = scenario2.StartTime
t2 = scenario2.StopTime
# 你也可以自定义计算卫星参数的时间区间,但需要在场景时间范围内。
t3 = '12 May 2022 04:00:00.00'
t4 = '13 May 2022 04:00:00.00'
# 可以用root多次设置场景时间
access_list = scenario2.GetExistingAccesses()
#access_list = root.CurrentScenario.Children.GetElements(STKObjects.eAccess)
for access_path in tqdm(access_list):
Transmitter_name = access_path[0].split('/')[-1]
Reciver_name = access_path[1].split('/')[-1]
access = scenario2.GetAccessBetweenObjectsByPath(access_path[0], access_path[1])
print(Transmitter_name,Reciver_name)
#compute_access(Transmitter_name,Reciver_name, t1, t2,access)
accessStartTimes,accessStopTimes = Compute_access(access,Transmitter_name,Reciver_name)
print(accessStartTimes,accessStopTimes)
#createSatellite(path_tle,t1,t2)
运行后会生成多个excel文件,命名为sat1-sat2.xlsx