# 创建一个新的卫星对象# scenario.Children.New(type, name): 在场景的子对象中添加新对象# type: AgESTKObjectType.eSatellite# name: MySatellitesatellite=scenario.Children.New(AgESTKObjectType.eSatellite,"MySatellite")# 设置传播器类型# SetPropagatorType(type)# type: AgEVePropagatorType.ePropagatorTwoBody (两体传播器)satellite.SetPropagatorType(AgEVePropagatorType.ePropagatorTwoBody)# 获取传播器实例propagator=satellite.Propagator# 从传播器中获取初始轨道状态的表示 (location / velocity)orbitState=propagator.InitialState.Representation# 转换为经典轨道状态 (更适合进行传统的轨道分析和计算)orbitStateClassical=orbitState.ConvertTo(AgEOrbitStateType.eOrbitStateClassical)'''这部分是轨道参数的设置,纯地理学名词,暂略'''# Set SMA and eccentricityorbitStateClassical.SizeShapeType=AgEClassicalSizeShape.eSizeShapeSemimajorAxissizeShape=orbitStateClassical.SizeShapesizeShape.Eccentricity=0sizeShape.SemiMajorAxis=8000# Set inclination and argument of perigeeorientation=orbitStateClassical.Orientationorientation.Inclination=25orientation.ArgOfPerigee=0# Set RAAN and true anomalyorientation.AscNodeType=AgEOrientationAscNode.eAscNodeRAANraan=orientation.AscNoderaan.Value=0orbitStateClassical.LocationType=AgEClassicalLocation.eLocationTrueAnomalytrueAnomaly=orbitStateClassical.LocationtrueAnomaly.Value=0# 导入轨道状态到传播器# 传播器传播# Assign orbit state and propagate satelliteorbitState.Assign(orbitStateClassical)propagator.Propagate()
Note
创建一个新的卫星对象
初始化传播器
获取传播器实例
根据实例中的数据初始化轨道
自定义参数表示轨道
将轨道状态导入传播器
传播器传播状态
创建设施并计算访问权限
Python
1 2 3 4 5 6 7 8 9101112131415161718
# 在当前场景中创建一个新的设施对象,名称为 "MyFacility"facility=scenario.Children.New(AgESTKObjectType.eFacility,"MyFacility")# 设置设施的地理位置 (纬,经,高)facility.Position.AssignGeodetic(28.62,-80.62,0.03)# 计算卫星与刚刚创建的设施之间的访问权限# 返回值 access 包含了“访问计算”的相关信息access=satellite.GetAccessToObject(facility)# 根据卫星的轨道和设施的位置,确定卫星在给定时间段内是否能够“看到”该设施access.ComputeAccess()# 建立“地面站”与对应“LEO卫星”的链路连接# Get access interval data and print results# 提取并打印在指定时间范围内的所有有效访问间隔stkRoot.UnitPreferences.SetCurrentUnit("Time","Min")accessDataProvider=access.DataProviders.GetDataPrvIntervalFromPath("Access Data")elements=["Start Time","Stop Time","Duration"]accessResults=accessDataProvider.ExecElements(scenario.StartTime,scenario.StopTime,elements)
打印访问结果到控制台
Python
1 2 3 4 5 6 7 8 910
# 获取 StartTime / StopTime / DurationstartTimes=accessResults.DataSets.GetDataSetByName("Start Time").GetValues()stopTimes=accessResults.DataSets.GetDataSetByName("Stop Time").GetValues()durations=accessResults.DataSets.GetDataSetByName("Duration").GetValues()print("\nAccess Intervals")foriinrange(len(startTimes)):print("{a:<29s}{b:<29s}{c:<4.2f}".format(a=startTimes[i],b=stopTimes[i],c=durations[i]))print("\nThe maximum access duration is {a:4.2f} minutes.".format(a=max(durations)))
对应结果
Text Only
1 2 3 4 5 6 7 8 9101112
Access Intervals
Start Time Stop Time Duration (min)
1 Aug 2020 16:25:03.475805187 1 Aug 2020 16:51:07.039122204 26.06
1 Aug 2020 18:33:25.466968796 1 Aug 2020 18:57:49.382137265 24.40
1 Aug 2020 20:43:39.293864757 1 Aug 2020 21:02:22.893522448 18.73
2 Aug 2020 07:42:48.464807220 2 Aug 2020 07:58:38.079188917 15.83
2 Aug 2020 09:46:27.097228442 2 Aug 2020 10:09:58.224122333 23.52
2 Aug 2020 11:52:44.502495801 2 Aug 2020 12:18:34.702365047 25.84
2 Aug 2020 14:00:19.322304548 2 Aug 2020 14:26:38.819331701 26.32
The maximum access duration is 26.32 minutes.
--- Access computation: 6.141 sec Total time: 64.791 sec ---
创建星座与链对象并计算访问权限
Python
1 2 3 4 5 6 7 8 91011
# 卸载初始卫星satellite.Unload()# 创建一个名为 “SatConstellation” 的星座对象constellation=scenario.Children.New(AgESTKObjectType.eConstellation,"SatConstellation")# ... (4 orbit, each with 8 satellites)# 循环创建多个卫星并将其添加到星座中# 创建链对象,将星座与设施添加到链中,并计算访问权限# Insert the constellation of Satellites with specific parameters...chain.ComputeAccess()
# 创建覆盖对象coverageDefinition=scenario.Children.New(AgESTKObjectType.eCoverageDefinition,"CoverageDefinition")grid.BoundsType=AgECvBounds.eBoundsCustomRegions# Add US shapefile to bounds# 边界是USA (自输入对应的文件)bounds=coverageDefinition.Grid.Boundsifplatform.system()=="Linux":install_path=os.getenv("STK_INSTALL_DIR")else:importwinregregistry=winreg.ConnectRegistry(None,winreg.HKEY_LOCAL_MACHINE)key=winreg.OpenKey(registry,r"Software\AGI\STK\12.0")install_path=winreg.QueryValueEx(key,"InstallHome")bounds.RegionFiles.Add(os.path.join(install_path[0],r"Data/Shapefiles/Countries/United_States_of_America\United_States_of_America.shp",))# set resolution...coverageDefinition.ComputeAccesses()
可视化效果 (图中紫色区域, 即美国国界)
输出覆盖率计算结果并关闭STK
Python
1 2 3 4 5 6 7 8 91011
minAccessDuration=fomResults.DataSets.GetDataSetByName("Minimum").GetValues()[0]maxAccessDuration=fomResults.DataSets.GetDataSetByName("Maximum").GetValues()[0]avgAccessDuration=fomResults.DataSets.GetDataSetByName("Average").GetValues()[0]print("\nThe minimum coverage duration is {a:4.2f} min.".format(a=minAccessDuration))print("The maximum coverage duration is {a:4.2f} min.".format(a=maxAccessDuration))print("The average coverage duration is {a:4.2f} min.".format(a=avgAccessDuration))stkRoot.CloseScenario()stk.ShutDown()print("\nClosed STK successfully.")
对应结果
Text Only
1234
The minimum coverage duration is 20.91 min.
The maximum coverage duration is 24.43 min.
The average coverage duration is 23.65 min.
--- Coverage computation: 17.676 sec Total time: 96.185 sec ---