

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 提供 TLE 星历数据
<a name="providing-tle-ephemeris-data"></a>

**重要**  
 星历 API 当前处于预览状态 

 星历 API 的访问权限仅在需要时提供。如果您需要能够上传自定义星历数据，请通过以下方式开 AWS 支持 票。[AWS Support Center Console](https://console.aws.amazon.com/support)我们的团队将与您合作，为您的特定要求启用此功能。

## 概述
<a name="w2aac28c17c11b7"></a>

 Two-line 元素 (TLE) 集是描述卫星轨道的标准格式。星历表API允许将TLE星历上传到以用于卫星。 AWS Ground Station 这些星历表会覆盖来自（参见:）的默认星历。[ Space-Track ](https://www.space-track.org/) [默认星历数据](default-ephemeris-data.md)

 AWS Ground Station 将星历视为[个性化使用数据。](https://aws.amazon.com/service-terms)如果您使用此可选功能，AWS 将使用您的星历数据来提供故障排除支持。

 上传自定义 TLE 星历表可以提高跟踪质量，处理没有星历[Space-Track](https://www.space-track.org/)表可用的早期行动，并 AWS Ground Station记录演习。但是，TLE 精度受到传播模型的限制，并且会随着时间的推移而降低。要在更长的时间跨度内获得更高保真度的星历数据，请考虑使用 OEM 格式（参见）。[提供 OEM 星历数据](providing-oem-ephemeris-data.md)

**注意**  
 在为卫星分配卫星目录号之前提供自定义星历表时，您可以使用TLE `00000` 的卫星目录号字段以及 `000` TLE国际标志字段的发射号部分（例如 `24000A` 2024年发射的运载工具）。  
 有关 TLE 格式的更多信息，请参阅[Two-line 元素集](https://en.wikipedia.org/wiki/Two-line_element_set)。

## Alpha-5 TLE 中的卫星目录号
<a name="w2aac28c17c11b9"></a>

 Two-Line 元素集 (TLE) 使用固定宽度的格式，其中卫星目录号字段（第 1 行和第 2 行的第 3—7 列）限制为 5 位数，支持的最大值为 99,999。为了表示超出此限制的卫星目录号，美国太空部队开发了[Alpha-5](https://www.space-track.org/documentation#tle-alpha5)编码方案。 Alpha-5 用字母字符（A—Z，不包括 I 和 O，以避免与数字 1 和 0 混淆）替换卫星目录编号字段的第一位数字。这使现有固定宽度的TLE格式中可表示的卫星目录号的范围从100,000扩大到339,999。

 Alpha-5 纯粹是 TLE 文本格式的显示编码。基础数字卫星目录号不变。 AWS Ground Station API 中的`noradSatelliteID`字段仍然是整数——诸如`ListSatellites`和之类的 API 响应`GetSatellite`继续返回数字卫星目录号，而不是 Alpha-5 编码形式。 Alpha-5 编码仅与 TLE 文本行本身相关。

 AWS Ground Station 支持包含 Alpha-5 编码卫星编号的 TLE 星历。当您通过[CreateEphemeris](https://docs.aws.amazon.com/ground-station/latest/APIReference/API_CreateEphemeris.html)操作上传 TLE 时，请 AWS Ground Station 正确解析 Alpha-5 编码的卫星编号并在内部将其解析为相应的整数卫星目录号。完全支持卫星目录号在（100,000—339,999） Alpha-5 范围内的卫星。

 以下是卫星目录编号为 100,000 的卫星的 TLE 设置示例。 Alpha-5 编码表示为`A0000`每行 TLE 的第 3—7 列：

```
[
    {
        "tleLine1": "1 A0000U 26001A   26120.50000000  .00000072  00000-0  24500-4 0  9991",
        "tleLine2": "2 A0000  97.4500  85.2300 0012345  45.6789 314.5678 15.20000000 10013",
        "validTimeRange": {
            "startTime": 1777680000,
            "endTime": 1778284800
        }
    }
]
```

 有关 Alpha-5 编码方案的更多信息，请参阅[Space-Track Alpha-5文档](https://www.space-track.org/documentation#tle-alpha5)。

## 创建 TLE 星历表
<a name="w2aac28c17c11c11"></a>

 可以使用 API 中的[CreateEphemeris](https://docs.aws.amazon.com/ground-station/latest/APIReference/API_CreateEphemeris.html)操作创建 TLE 星历。 AWS Ground Station 此操作将使用请求正文或指定 S3 存储桶中的数据上传星历。

 请务必注意，上传星历会将星历设置为 `VALIDATING` 并启动异步工作流程，该工作流程将验证您的星历并生成可能联络。只有当星历通过此工作流程并成为 `ENABLED` 后，才会将其用于联络。您应该轮[DescribeEphemeris](https://docs.aws.amazon.com/ground-station/latest/APIReference/API_DescribeEphemeris.html)询星历状态或使用 CloudWatch 事件来跟踪星历表的状态变化。

 要对无效的星历表进行故障排除，请参阅：[对无效的星历进行故障排除](troubleshooting-invalid-ephemerides.md)

## 示例：通过 API 创建两行元素 (TLE) 集星历
<a name="w2aac28c17c11c13"></a>

 AWS 软件开发工具包和 CLI 可用于通过调用上传两行元素 (TLE) 设置的星历表。 AWS Ground Station [ CreateEphemeris ](https://docs.aws.amazon.com/ground-station/latest/APIReference/API_CreateEphemeris.html)该星历表将用于代替卫星的默认星历数据（参见）。[默认星历数据](default-ephemeris-data.md)此示例说明如何使用[AWS 适用于 Python 的软件开发工具包 (Boto3) 执行此操作。](https://docs.aws.amazon.com/pythonsdk)

 TLE 集是 JSON 格式的对象，可将一个或多个 TLE 串在一起以构造连续轨迹。TLE 集中的 TLE 必须形成一个连续集，我们可以用它来构造轨迹（即 TLE 集中的 TLE 之间没有时间间隔）。下面显示了一个 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 集中 TLE 的时间范围必须完全匹配才能成为有效的连续轨迹。

 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 来轮询星历表的状态：

```
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](https://docs.aws.amazon.com/ground-station/latest/APIReference/API_DescribeEphemeris.html) 操作的响应示例 

```
{
  "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](https://docs.aws.amazon.com/ground-station/latest/APIReference/API_DescribeEphemeris.html)路径或使用 CloudWatch 事件来跟踪上传的星历表的状态，因为该星历必须经过异步验证工作流程，然后才能将其设置为可用于安排`ENABLED`和执行联系人。

 请注意，在上面的示例中，TLE 集合中所有 TLE `25994` 中的 NORAD ID 必须与您的卫星在数据库中分配的 NORAD ID 相匹配。[ Space-Track ](https://www.space-track.org/)

## 示例：从 S3 存储桶上传 TLE 星历数据
<a name="w2aac28c17c11c15"></a>

 也可以通过指向存储桶和对象密钥直接从 S3 存储桶上传 TLE 星历文件。 AWS Ground Station 将代表你检索对象。有关静态数据加密的信息详 AWS Ground Station 见：[静态数据加密 AWS Ground Station](security.encryption-at-rest.md)。

 以下是从 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']}")
```