本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
提供 TLE 星历数据
重要
星历 API 当前处于预览状态
星历 API 的访问权限仅在需要时提供。<如果您需要能够上传自定义星历数据,则应联系 aws-groundstation@amazon.com。>
概述
双线元素 (TLE) 集是描述卫星轨道的标准化格式。Ephemeris API 允许将 TLE 星历表上传到卫星上以供卫星使用。 AWS Ground Station 这些星历表覆盖了 Space-Track 中的默认星历表(参见:)。
AWS Ground Station 将星历视为个性化
上传自定义 TLE 星历表可以提高跟踪质量,处理没有 Spac
注意
在为卫星分配卫星目录编号之前提供自定义星历时,您可以使用 00000 TLE的卫星目录编号字段,以及 000 TLE国际标号字段的发射编号部分(例如,24000A用于2024年发射的飞行器)。
有关格式的更多信息 TLEs,请参阅双行元素集
创建 TLE 星历表
可以使用 API 中的CreateEphemeris操作创建 TLE 星历表。 AWS Ground Station 此操作将使用请求正文或指定 S3 存储桶中的数据上传星历。
请务必注意,上传星历会将星历设置为 VALIDATING 并启动异步工作流程,该工作流程将验证您的星历并生成可能联络。只有当星历通过此工作流程并成为 ENABLED 后,才会将其用于联络。您应该轮DescribeEphemeris询星历状态或使用 CloudWatch 事件来跟踪星历的状态变化。
要对无效的星历进行故障排除,请参阅:对无效的星历进行故障排除
示例:通过 API 创建双行元素 (TLE) 集星历表
和 CLI 可用于通过调用将双行元素 (TLE) 集星历表 AWS Ground Station 上传到。 AWS SDKs CreateEphemeris该星历将用于代替卫星的默认星历数据(参见)。默认星历数据此示例展示了如何使用适用于 Python 的AWS SDK (Boto3) 来执行此操作。
TLE 集是一个 JSON 格式的对象,它将一个或多个串在 TLEs 一起以构造连续的轨迹。TLE 集合 TLEs 中的必须形成一个连续的集合,我们可以用它来构造轨迹(即在 TLE 集合 TLEs 中没有时间间隔)。下面显示了一个 TLE 集示例:
[ { "tleLine1": "1 25994U 99068A 20318.54719794 .00000075 00000-0 26688-4 0 9997", "tleLine2": "2 25994 98.2007 30.6589 0001234 89.2782 18.9934 14.57114995111906", "validTimeRange": { "startTime": 12345, "endTime": 12346 } }, { "tleLine1": "1 25994U 99068A 20318.54719794 .00000075 00000-0 26688-4 0 9997", "tleLine2": "2 25994 98.2007 30.6589 0001234 89.2782 18.9934 14.57114995111906", "validTimeRange": { "startTime": 12346, "endTime": 12347 } } ]
注意
TLE 集合 TLEs 中的时间范围必须完全匹配才能成为有效的连续轨迹。
TLE 集可以通过 bot AWS Ground Station o3 客户端上传,如下所示:
import boto3 from datetime import datetime, timedelta, timezone # Create AWS Ground Station client ground_station_client = boto3.client("groundstation") # Create TLE ephemeris tle_ephemeris = ground_station_client.create_ephemeris( name="Example Ephemeris", satelliteId="2e925701-9485-4644-b031-EXAMPLE01", enabled=True, expirationTime=datetime.now(timezone.utc) + timedelta(days=3), priority=2, ephemeris={ "tle": { "tleData": [ { "tleLine1": "1 25994U 99068A 20318.54719794 .00000075 00000-0 26688-4 0 9997", "tleLine2": "2 25994 98.2007 30.6589 0001234 89.2782 18.9934 14.57114995111906", "validTimeRange": { "startTime": datetime.now(timezone.utc), "endTime": datetime.now(timezone.utc) + timedelta(days=7), }, } ] } }, ) print(f"Created TLE ephemeris with ID: {tle_ephemeris['ephemerisId']}")
此调用将返回一个 ephemeriSid,将来可用于引用星历表。例如,我们可以使用上面调用中提供的EphemeriSid来轮询星历的状态:
import boto3 from datetime import datetime, timedelta, timezone import time # Create AWS Ground Station client ground_station_client = boto3.client("groundstation") # First, create a TLE ephemeris print("Creating TLE ephemeris...") tle_ephemeris = ground_station_client.create_ephemeris( name="Example TLE Ephemeris for Description", satelliteId="2e925701-9485-4644-b031-EXAMPLE01", enabled=True, expirationTime=datetime.now(timezone.utc) + timedelta(days=3), priority=2, ephemeris={ "tle": { "tleData": [ { "tleLine1": "1 25994U 99068A 20318.54719794 .00000075 00000-0 26688-4 0 9997", "tleLine2": "2 25994 98.2007 30.6589 0001234 89.2782 18.9934 14.57114995111906", "validTimeRange": { "startTime": datetime.now(timezone.utc), "endTime": datetime.now(timezone.utc) + timedelta(days=7), }, } ] } }, ) ephemeris_id = tle_ephemeris["ephemerisId"] print(f"Created TLE ephemeris with ID: {ephemeris_id}") # Describe the ephemeris immediately to check initial status print("Describing ephemeris...") response = ground_station_client.describe_ephemeris(ephemerisId=ephemeris_id) print(f"Ephemeris ID: {response['ephemerisId']}") print(f"Name: {response['name']}") print(f"Status: {response['status']}")
下面提供了 DescribeEphemeris 操作的响应示例
{ "creationTime": 1620254718.765, "enabled": true, "name": "Example Ephemeris", "ephemerisId": "fde41049-14f7-413e-bd7b-EXAMPLE01", "priority": 2, "status": "VALIDATING", "suppliedData": { "tle": { "ephemerisData": "[{\"tleLine1\": \"1 25994U 99068A 20318.54719794 .00000075 00000-0 26688-4 0 9997\",\"tleLine2\": \"2 25994 98.2007 30.6589 0001234 89.2782 18.9934 14.57114995111906\",\"validTimeRange\": {\"startTime\": 1620254712000,\"endTime\": 1620859512000}}]" } } }
建议轮询DescribeEphemeris路径或使用 CloudWatch 事件来跟踪上传的星历表的状态,因为它必须经过异步验证工作流程,然后才能设置为并可用于安排ENABLED和执行联系人。
请注意,在上面的示例中,TLE 集合 TLEs 中所有的 NORAD ID 必须与25994在 SpaceTrack 数据库中为您的卫星分配的 NORAD ID 相匹配。
示例:从 S3 存储桶上传 TLE 星历数据
也可以通过指向 S3 存储桶和对象密钥直接从 S3 存储桶上传 TLE 星历表文件。 AWS Ground Station 将代表您取回对象。中详细介绍了有关静态数据加密的信息 AWS Ground Station ,请参阅:静态数据加密 AWS Ground Station。
以下是从 S3 存储桶上传 TLE 星历文件的示例
import boto3 from datetime import datetime, timedelta, timezone import json # Create AWS clients s3_client = boto3.client("s3") ground_station_client = boto3.client("groundstation") # Define S3 bucket and key bucket_name = "ephemeris-bucket" object_key = "test_data.tle" # Create sample TLE set data # Note: For actual satellites, use real TLE data from sources like Space-Track tle_set_data = [ { "tleLine1": "1 25994U 99068A 20318.54719794 .00000075 00000-0 26688-4 0 9997", "tleLine2": "2 25994 98.2007 30.6589 0001234 89.2782 18.9934 14.57114995111906", "validTimeRange": { "startTime": datetime.now(timezone.utc), "endTime": datetime.now(timezone.utc) + timedelta(days=3), }, }, { "tleLine1": "1 25994U 99068A 20321.54719794 .00000075 00000-0 26688-4 0 9998", "tleLine2": "2 25994 98.2007 33.6589 0001234 89.2782 18.9934 14.57114995112342", "validTimeRange": { "startTime": datetime.now(timezone.utc) + timedelta(days=3), "endTime": datetime.now(timezone.utc) + timedelta(days=7), }, }, ] # Convert to JSON string for upload tle_json = json.dumps(tle_set_data, indent=2) # Upload sample TLE data to S3 print(f"Uploading TLE set data to s3://{bucket_name}/{object_key}") s3_client.put_object( Bucket=bucket_name, Key=object_key, Body=tle_json, ContentType="application/json" ) print("TLE set data uploaded successfully to S3") print(f"Uploaded {len(tle_set_data)} TLE entries covering 7 days") # Create TLE ephemeris from S3 print("Creating TLE ephemeris from S3...") s3_tle_ephemeris = ground_station_client.create_ephemeris( name="2022-11-05 S3 TLE Upload", satelliteId="fde41049-14f7-413e-bd7b-EXAMPLE01", enabled=True, expirationTime=datetime.now(timezone.utc) + timedelta(days=5), priority=2, ephemeris={"tle": {"s3Object": {"bucket": bucket_name, "key": object_key}}}, ) print(f"Created TLE ephemeris with ID: {s3_tle_ephemeris['ephemerisId']}")