

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 사용자 지정 에페메리스 데이터 제공
<a name="providing-custom-ephemeris-data"></a>

**중요**  
 에페메리스 API는 현재 프리뷰 상태입니다 

 에페메리스 API에 대한 액세스는 필요에 따라 제공됩니다. 사용자 지정 에페메리스 데이터를 업로드하는 기능이 필요한 경우를 통해 AWS Support 티켓을 개설하세요[AWS Support Center Console](https://console.aws.amazon.com/support). 당사 팀은 고객과 협력하여 특정 요구 사항에 맞게이 기능을 활성화합니다.

## 개요
<a name="w2aac28c17b7"></a>

 Ephemeris API를 사용하면 위성과 함께 사용하기 위해 사용자 지정 에페메리스를 AWS Ground Station 에 업로드할 수 있습니다. 이러한 에페메리스는 [스페이스 트랙](https://www.space-track.org/)의 기본 에페메리스를 재정의합니다( 참조[기본 에페메리스 데이터](default-ephemeris-data.md)). Orbit Ephemeris Message(OEM), 2줄 요소(TLE) 및 방위각 고도 형식으로 에페메리스 데이터 수신을 지원합니다.

 AWS Ground Station 는 에페메리스를 [개별화된 사용 데이터](https://aws.amazon.com/service-terms)로 취급합니다. 이 선택적 기능을 사용하는 경우 AWS는 에페메리스 데이터를 사용하여 문제 해결 지원을 제공합니다.

 사용자 지정 에페메리스를 업로드하면 추적 품질을 개선하고, [스페이스 트랙](https://www.space-track.org/) 에페메리스를 사용할 수 없는 작업을 처리하고 AWS Ground Station, 조작을 고려할 수 있습니다.

 잘못된 에페메리스 문제를 해결하려면 다음을 참조하세요. [잘못된 에페메리스 문제 해결](troubleshooting-invalid-ephemerides.md) 

## 예:에서 고객 제공 에페메리스 사용 AWS Ground Station
<a name="w2aac28c17b9"></a>

 에서 고객 제공 에페메리스를 사용하는 방법에 대한 자세한 지침은 [에서 고객 제공 에페메리스 사용 AWS Ground Station](https://aws.amazon.com/blogs/publicsector/using-customer-provided-ephemerides-with-aws-ground-station/) 및 관련 GitHub 리포지토리 [aws-samples/aws-groundstation-cpe](https://github.com/aws-samples/aws-groundstation-cpe)를 AWS Ground Station참조하세요.

# TLE 에페메리스 데이터 제공
<a name="providing-tle-ephemeris-data"></a>

**중요**  
 에페메리스 API는 현재 프리뷰 상태입니다 

 에페메리스 API에 대한 액세스는 필요에 따라 제공됩니다. 사용자 지정 에페메리스 데이터를 업로드하는 기능이 필요한 경우를 통해 AWS Support 티켓을 개설하세요[AWS Support Center Console](https://console.aws.amazon.com/support). 당사 팀은 고객과 협력하여 특정 요구 사항에 맞게이 기능을 활성화합니다.

## 개요
<a name="w2aac28c17c11b7"></a>

 2줄 요소(TLE) 세트는 위성 궤도를 설명하기 위한 표준화된 형식입니다. Ephemeris API를 사용하면 위성과 함께 사용하기 위해 TLE 에페메리스를 AWS Ground Station 에 업로드할 수 있습니다. 이러한 에페메리스는 [스페이스 트랙](https://www.space-track.org/)의 기본 에페메리스를 재정의합니다( 참조[기본 에페메리스 데이터](default-ephemeris-data.md)).

 AWS Ground Station 는 에페메리스를 [개별화된 사용 데이터](https://aws.amazon.com/service-terms)로 처리합니다. 이 선택적 기능을 사용하는 경우 AWS는 에페메리스 데이터를 사용하여 문제 해결 지원을 제공합니다.

 사용자 지정 TLE 에페메리스를 업로드하면 추적 품질을 개선하고, [스페이스 트랙](https://www.space-track.org/) 에페메리스를 사용할 수 없는 초기 작업을 처리하고 AWS Ground Station, 조작을 고려할 수 있습니다.

**참고**  
 위성 카탈로그 번호가 할당되기 전에 사용자 지정 에페메리스를 제공하는 경우 TLE의 `00000` 위성 카탈로그 번호 필드와 TLE의 국제 지정자 필드의 `000` 시작 번호 부분에 `24000A`를 사용할 수 있습니다(예: 2024년에 출시된 차량).  
 TLEs. [https://en.wikipedia.org/wiki/Two-line_element_set](https://en.wikipedia.org/wiki/Two-line_element_set) 

## TLE 에페메리스 생성
<a name="w2aac28c17c11b9"></a>

 TLE 에페메리스는 API의 [CreateEphemeris](https://docs.aws.amazon.com/ground-station/latest/APIReference/API_CreateEphemeris.html) 작업을 사용하여 생성할 수 있습니다 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를 통해 2줄 요소(TLE) 세트 에페메리스 생성
<a name="w2aac28c17c11c11"></a>

 AWS SDKs 및 CLI를 사용하여 [CreateEphemeris](https://docs.aws.amazon.com/ground-station/latest/APIReference/API_CreateEphemeris.html) 호출을 AWS Ground Station 통해 에페메리스를 로 설정한 두 줄 요소(TLE)를 업로드할 수 있습니다. 이 에페메리스는 위성의 기본 에페메리스 데이터 대신 사용됩니다( 참조[기본 에페메리스 데이터](default-ephemeris-data.md)). 이 예제에서는 [AWS SDK for Python(Boto3)](https://docs.aws.amazon.com/pythonsdk)을 사용하여이 작업을 수행하는 방법을 보여줍니다.

 TLE 세트는 하나 이상의 TLE를 함께 묶어 연속 궤적을 구성하는 JSON 형식의 객체입니다. 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 세트는 다음과 같이 AWS Ground Station boto3 클라이언트를 통해 업로드할 수 있습니다.

```
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를 사용하여 ephemeris 상태를 폴링할 수 있습니다.

```
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`되고 고객 응대를 예약하고 실행하는 데 사용할 수 있게 되기 전에 비동기 검증 워크플로를 거쳐야 하기 때문입니다.

 위의 예제`25994`에서 TLEs 세트의 모든 TLE에 있는 NORAD ID는 위성이 [Space-Track](https://www.space-track.org/) 데이터베이스에 할당된 NORAD ID와 일치해야 합니다.

## 예: S3 버킷에서 TLE 에페메리스 데이터 업로드
<a name="w2aac28c17c11c13"></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']}")
```

# OEM 에페메리스 데이터 제공
<a name="providing-oem-ephemeris-data"></a>

**중요**  
 에페메리스 API는 현재 프리뷰 상태입니다 

 에페메리스 API에 대한 액세스는 필요에 따라 제공됩니다. 사용자 지정 에페메리스 데이터를 업로드하는 기능이 필요한 경우를 통해 AWS Support 티켓을 개설하세요[AWS Support Center Console](https://console.aws.amazon.com/support). 당사 팀은 고객과 협력하여 특정 요구 사항에 맞게이 기능을 활성화합니다.

## 개요
<a name="w2aac28c17c13b7"></a>

 Orbit Ephemeris Message(OEM)는 우주선 궤적 데이터를 나타내는 표준화된 형식입니다. Ephemeris API를 사용하면 OEM 에페메리스를 AWS Ground Station 에 업로드하여 위성과 함께 사용할 수 있습니다. 이러한 에페메리스는 [스페이스 트랙](https://www.space-track.org/)의 기본 에페메리스를 재정의합니다( 참조[기본 에페메리스 데이터](default-ephemeris-data.md)).

 AWS Ground Station 는 에페메리스를 [개별화된 사용 데이터](https://aws.amazon.com/service-terms)로 취급합니다. 이 선택적 기능을 사용하는 경우 AWS 는 에페메리스 데이터를 사용하여 문제 해결 지원을 제공합니다.

 사용자 지정 OEM 에페메리스를 업로드하면 추적 품질을 개선하고, [스페이스 트랙](https://www.space-track.org/) 에페메리스를 사용할 수 없는 초기 작업을 처리하고 AWS Ground Station, 조작을 고려할 수 있습니다.

**참고**  
 위성 카탈로그 번호가 위성에 할당되기 전에 사용자 지정 에페메리스를 제공하는 경우 OEM의 `satelliteId` `OBJECT_ID` 부분에를 사용할 수 있습니다.  
 OEMs의 형식에 대한 자세한 내용은 단원을 참조하십시오[OEM 에페메리스 형식](#oem-ephemeris-format).

## OEM 에페메리스 형식
<a name="oem-ephemeris-format"></a>

 AWS Ground Station 는 몇 가지 추가 제한과 함께 [CCSDS 표준에](https://ccsds.org/Pubs/502x0b3e1.pdf) 따라 OEM 고객 제공 에페메리스를 처리합니다. OEM 파일은 KVN 형식이어야 합니다. 다음 표에는 OEM의 다양한 필드와가 CCSDS 표준과 어떻게 AWS Ground Station 다른지 요약되어 있습니다.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/ground-station/latest/ug/providing-oem-ephemeris-data.html)

 \$1에서 지원하지 않는 행 AWS Ground Station 이 제공된 OEM에 포함된 경우 OEM은 검증에 실패합니다.

 에 대한 CCSDS 표준과의 중요한 편차는 다음과 AWS Ground Station 같습니다.
+ `CCSDS_OEM_VERS`는 여야 합니다`2.0`.
+ `REF_FRAME`는 `EME2000` 또는 여야 합니다` ITRF2000`.
+ `REF_FRAME_EPOCH`는에서 지원되지 않습니다 AWS Ground Station.
+ `CENTER_NAME`는 여야 합니다`Earth`.
+ `TIME_SYSTEM`는 여야 합니다`UTC`.
+ `INTERPOLATION` 및 `INTERPOLATION_DEGREE`는 모두 AWS Ground Station 고객 제공 에페메리스에 필요합니다.

## KVN 형식의 OEM 에페메리스 예제
<a name="w2aac28c17c13c11"></a>

 다음은 JPSS-1 퍼블릭 브로드캐스터 위성에 대한 KVN 형식의 OEM 에페메리스의 잘린 예입니다.

```
CCSDS_OEM_VERS = 2.0

COMMENT Orbit data are consistent with planetary ephemeris DE-430

CREATION_DATE  = 2024-07-22T05:20:59
ORIGINATOR     = Raytheon-JPSS/CGS

META_START
OBJECT_NAME          = J1
OBJECT_ID            = 2017-073A
CENTER_NAME          = Earth
REF_FRAME            = EME2000
TIME_SYSTEM          = UTC
START_TIME           = 2024-07-22T00:00:00.000000
STOP_TIME            = 2024-07-22T00:06:00.000000
INTERPOLATION        = Lagrange
INTERPOLATION_DEGREE = 5
META_STOP

2024-07-22T00:00:00.000000   5.905147360000000e+02  -1.860082793999999e+03  -6.944807075000000e+03  -5.784245796000000e+00   4.347501391999999e+00  -1.657256863000000e+00
2024-07-22T00:01:00.000000   2.425572045154201e+02  -1.595860765983339e+03  -7.030938457373539e+03  -5.810660250794190e+00   4.457103652219009e+00  -1.212889340333023e+00
2024-07-22T00:02:00.000000  -1.063224256538050e+02  -1.325569732497146e+03  -7.090262617183503e+03  -5.814973972202444e+00   4.549739160042560e+00  -7.639633689161465e-01
2024-07-22T00:03:00.000000  -4.547973959231161e+02  -1.050238305712201e+03  -7.122556683227951e+03  -5.797176562437553e+00   4.625064829516728e+00  -3.121687831090774e-01
2024-07-22T00:04:00.000000  -8.015427368657785e+02  -7.709137891269565e+02  -7.127699477194810e+03  -5.757338007808417e+00   4.682800822515077e+00   1.407953645161997e-01
2024-07-22T00:05:00.000000  -1.145240083085062e+03  -4.886583601179489e+02  -7.105671911254255e+03  -5.695608435738609e+00   4.722731329786999e+00   5.932259682105052e-01
2024-07-22T00:06:00.000000  -1.484582479061495e+03  -2.045451985605701e+02  -7.056557069672793e+03  -5.612218005854990e+00   4.744705579872771e+00   1.043421397392599e+00
```

## OEM 에페메리스 생성
<a name="w2aac28c17c13c13"></a>

 OEM 에페메리스는 API의 [CreateEphemeris](https://docs.aws.amazon.com/ground-station/latest/APIReference/API_CreateEphemeris.html) 작업을 사용하여 생성할 수 있습니다 AWS Ground Station . 이 작업은 요청 본문 또는 지정된 S3 버킷의 데이터를 사용하여 에페메리스를 업로드합니다.

 한 가지 주의할 점은 에피메리스를 업로드하면 에피메리스가 ` VALIDATING`로 설정되고 비동기 워크플로가 시작되어 에피메리스를 검증하고 이로부터 잠재적 접촉을 생성하는 비동기 워크플로가 시작된다는 점입니다. 임시 저장소가 이 워크플로를 통과한 후 `ENABLED`가 된 후에만 접촉에 사용됩니다. [DescribeEphemeris](https://docs.aws.amazon.com/ground-station/latest/APIReference/API_DescribeEphemeris.html)에서 에페메리스 상태를 폴링하거나 CloudWatch 이벤트를 사용하여 에페메리스의 상태 변경을 추적해야 합니다.

 잘못된 에페메리스 문제를 해결하려면 다음을 참조하세요. [잘못된 에페메리스 문제 해결](troubleshooting-invalid-ephemerides.md) 

## 예: S3 버킷에서 OEM 에페메리스 데이터 업로드
<a name="w2aac28c17c13c15"></a>

 버킷 및 객체 키를 가리켜 S3 버킷에서 OEM 에페메리스 파일을 직접 업로드할 수도 있습니다. AWS Ground Station 는 사용자를 대신하여 객체를 검색합니다. 의 저장 데이터 암호화에 대한 자세한 내용은 단원을 AWS Ground Station 참조하십시오[에 대한 저장 데이터 암호화 AWS Ground Station](security.encryption-at-rest.md).

 다음은 S3 버킷에서 OEM 에페메리스 파일을 업로드하는 예제입니다 

```
import boto3
from datetime import datetime, timedelta, timezone

# 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.oem"

# Create sample OEM data in KVN format
oem_data = """CCSDS_OEM_VERS = 2.0

COMMENT Orbit data are consistent with planetary ephemeris DE-430

CREATION_DATE  = 2024-07-22T05:20:59
ORIGINATOR     = Raytheon-JPSS/CGS

META_START
OBJECT_NAME          = J1
OBJECT_ID            = 2017-073A
CENTER_NAME          = Earth
REF_FRAME            = EME2000
TIME_SYSTEM          = UTC
START_TIME           = 2024-07-22T00:00:00.000000
STOP_TIME            = 2024-07-22T00:06:00.000000
INTERPOLATION        = Lagrange
INTERPOLATION_DEGREE = 5
META_STOP

2024-07-22T00:00:00.000000   5.905147360000000e+02  -1.860082793999999e+03  -6.944807075000000e+03  -5.784245796000000e+00   4.347501391999999e+00  -1.657256863000000e+00
2024-07-22T00:01:00.000000   2.425572045154201e+02  -1.595860765983339e+03  -7.030938457373539e+03  -5.810660250794190e+00   4.457103652219009e+00  -1.212889340333023e+00
2024-07-22T00:02:00.000000  -1.063224256538050e+02  -1.325569732497146e+03  -7.090262617183503e+03  -5.814973972202444e+00   4.549739160042560e+00  -7.639633689161465e-01
2024-07-22T00:03:00.000000  -4.547973959231161e+02  -1.050238305712201e+03  -7.122556683227951e+03  -5.797176562437553e+00   4.625064829516728e+00  -3.121687831090774e-01
2024-07-22T00:04:00.000000  -8.015427368657785e+02  -7.709137891269565e+02  -7.127699477194810e+03  -5.757338007808417e+00   4.682800822515077e+00   1.407953645161997e-01
2024-07-22T00:05:00.000000  -1.145240083085062e+03  -4.886583601179489e+02  -7.105671911254255e+03  -5.695608435738609e+00   4.722731329786999e+00   5.932259682105052e-01
2024-07-22T00:06:00.000000  -1.484582479061495e+03  -2.045451985605701e+02  -7.056557069672793e+03  -5.612218005854990e+00   4.744705579872771e+00   1.043421397392599e+00
"""

# Upload sample OEM data to S3
print(f"Uploading OEM data to s3://{bucket_name}/{object_key}")

s3_client.put_object(
    Bucket=bucket_name, Key=object_key, Body=oem_data, ContentType="text/plain"
)

print("OEM data uploaded successfully to S3")

# Create OEM ephemeris from S3
print("Creating OEM ephemeris from S3...")

s3_oem_ephemeris = ground_station_client.create_ephemeris(
    name="2024-07-22 S3 OEM Upload",
    satelliteId="fde41049-14f7-413e-bd7b-EXAMPLE01",
    enabled=True,
    expirationTime=datetime.now(timezone.utc) + timedelta(days=5),
    priority=2,
    ephemeris={"oem": {"s3Object": {"bucket": bucket_name, "key": object_key}}},
)

print(f"Created OEM ephemeris with ID: {s3_oem_ephemeris['ephemerisId']}")
```

 다음은 이전 예제 코드 블록에 업로드된 OEM 에페메리스에 대해 호출되는 [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-EXAMPLE02",
  "priority": 2,
  "status": "VALIDATING",
  "suppliedData": {
    "oem": {
      "sourceS3Object": {
          "bucket": "ephemeris-bucket-for-testing",
          "key": "test_data.oem"
      }
    }
  }
}
```

# 방위각 고도 에페메리스 데이터 제공
<a name="providing-azimuth-elevation-ephemeris-data"></a>

**중요**  
 방위각 고도 에페메리스 기능은 현재 미리 보기 상태이며 명시적 온보딩이 필요합니다.  
 방위각 고도 에페메리스 기능은 제한된 수의 사전 결정되고 특수한 사용 사례에 대해 엄격한 액세스 제어 하에 있습니다. 액세스는 표준 고객 제공 임시 기능에 비해 훨씬 더 제한적입니다. 승인된 사용 사례 및 액세스 요청 프로세스에 대한 자세한 내용은를 통해 AWS Support 티켓을 개설하세요[AWS Support Center Console](https://console.aws.amazon.com/support). 전문화된 사용 사례에 대한 승인 프로세스를 안내해 드립니다.

## 개요
<a name="w2aac28c17c15b5"></a>

 방위각 고도 에페메리스는 위성 궤도 정보를 제공하지 않고 안테나 방향 지정을 직접 지정하는 방법을 제공합니다. 위성의 궤도를 설명하는 에페메리스 데이터를 업로드하는 대신 시간 태그가 지정된 방위각과 고도 각도를 제공하여 안테나에 접촉 전체에서 정확히 어디를 가리킬지 알려줍니다.

 AWS Ground Station 는 에페메리스를 [개별화된 사용 데이터](https://aws.amazon.com/service-terms)로 취급합니다. 이 선택적 기능을 사용하는 경우 AWS는 에페메리스 데이터를 사용하여 문제 해결 지원을 제공합니다.

 이 접근 방식은 다음 시나리오에 특히 유용합니다.
+ *초기 작업 지원:* 정확한 궤도 데이터를 사용할 수 없거나 궤도 파라미터가 빠르게 변화하는 시작 및 초기 궤도 단계(LEOP) 중.
+ *사용자 지정 포인팅 패턴:* 안테나 테스트 또는 비표준 작업을 위한 특정 포인팅 시퀀스 구현.

**참고**  
 방위각 고도 에페메리스를 사용하는 경우 연락처 예약 요청에서 위성 ARN을 생략할 수 있습니다. 위성 ARN이 생략되지 않은 경우에도 여전히 접촉 데이터의 일부로 포함되지만 방위각 고도 에페메리스는 에페메리스 우선 순위 확인을 수행하는 대신 안테나를 가리키는 데 사용됩니다. 방위각 고도 에페메리스는 특정 지상국과 연결되며 해당 위치에 대한 안테나 방향이 정의됩니다.

## 방위각 고도 에페메리스 데이터 형식
<a name="w2aac28c17c15b7"></a>

 방위각 고도 에페메리스 데이터는 세그먼트로 구성된 시간 태그 방위각 및 고도 값으로 구성됩니다. 각 세그먼트에는 특정 시간 범위를 포함하는 일련의 방위각과 고도 각도가 포함되어 있습니다.

 방위각 고도 에페메리스 데이터의 주요 구성 요소는 다음과 같습니다.
+ *Ground Station:*이 방위 고도 에페메리스가 사용될 특정 지상국입니다.
+ *각도 단위:* 각도(`DEGREE_ANGLE` 또는 )의 측정 단위입니다`RADIAN`.
+ *세그먼트:* 방위각 및 고도 각도의 시간 경계 모음 하나 이상입니다.
+ *시간 태그가 지정된 각도:* 연결된 타임스탬프가 있는 개별 방위각 및 고도 값입니다.

 각 세그먼트에는 다음이 필요합니다.
+ 참조 에포크(세그먼트의 기본 시간)
+ 유효한 시간 범위(세그먼트의 시작 및 종료 시간)
+ 시간 태그가 지정된 방위각/상승 페어 5개 이상

 방위각 고도 제약 조건: 
+ 각도: -180°\$1360°의 방위각
+ 라디안 단위의 방위각: -π \$1 2π
+ 각도 상승: -90°\$190°
+ 라디안 단위의 상승: -π/2에서 π/2로
+ 시간 값은 각 세그먼트 내에서 오름차순이어야 합니다.
+ 세그먼트는 시간이 겹치지 않아야 합니다.

 자세한 내용은 [CreateEphemeris](https://docs.aws.amazon.com/ground-station/latest/APIReference/API_CreateEphemeris.html) API 설명서 및 [TimeAzEl](https://docs.aws.amazon.com/ground-station/latest/APIReference/API_TimeAzEl.html) 데이터 유형을 참조하세요.

## 방위각 고도 에페메리스 생성
<a name="w2aac28c17c15b9"></a>

 방위각 고도 에페메리스는 동일한 [CreateEphemeris](https://docs.aws.amazon.com/ground-station/latest/APIReference/API_CreateEphemeris.html) API 작업을 사용하지만 `azEl` 에페메리스 유형을 사용하여 생성됩니다. TLE와 OEM 에페메리스의 주요 차이점은 다음과 같습니다.
+ `groundStation` 파라미터를 지정해야 합니다.
+ 요청에서 `satelliteId` 파라미터를 생략해야 합니다.
+ 우선 순위 설정은 적용되지 않습니다(각 방위각 고도 에페메리스는 지상국에만 해당됨).
+ 4차 Lagrange 보간을 지원하려면 각 세그먼트에 방위각/상승 지점이 5개 이상 포함되어야 합니다.
+ 추가 제한 및 요구 사항은 [CreateEphemeris](https://docs.aws.amazon.com/ground-station/latest/APIReference/API_CreateEphemeris.html) API 설명서에 자세히 설명되어 있습니다.

 한 가지 주의할 점은 에피메리스를 업로드하면 에피메리스가 `VALIDATING`로 설정되고 비동기 워크플로가 시작되어 에피메리스를 검증하고 이로부터 잠재적 접촉을 생성하는 비동기 워크플로가 시작된다는 점입니다. 에페메리스는이 워크플로를 통과하고 상태가가 된 후에만 연락처에 사용됩니다`ENABLED`. 에페메리스 상태에 대해 [DescribeEphemeris](https://docs.aws.amazon.com/ground-station/latest/APIReference/API_DescribeEphemeris.html)를 폴링하거나 CloudWatch 이벤트를 사용하여 에페메리스의 상태 변경을 추적해야 합니다.

 잘못된 에페메리스 문제를 해결하려면 다음을 참조하세요. [잘못된 에페메리스 문제 해결](troubleshooting-invalid-ephemerides.md) 

## 예: API를 통해 방위각 고도 에페메리스 생성
<a name="w2aac28c17c15c11"></a>

 다음 예제에서는 AWS SDK for Python(Boto3)을 사용하여 방위각 고도 에페메리스를 생성하는 방법을 보여줍니다.

```
import boto3

# Create AWS Ground Station client
ground_station_client = boto3.client("groundstation")

# Create azimuth elevation ephemeris
azimuth_elevation_ephemeris = ground_station_client.create_ephemeris(
    name="Azimuth Elevation for Ohio Ground Station",
    ephemeris={
        "azEl": {
            "groundStation": "Ohio 1",
            "data": {
                "azElData": {
                    "angleUnit": "DEGREE_ANGLE",
                    "azElSegmentList": [
                        {
                            "referenceEpoch": "2024-03-15T10:00:00Z",
                            "validTimeRange": {
                                "startTime": "2024-03-15T10:00:00Z",
                                "endTime": "2024-03-15T10:15:00Z",
                            },
                            "azElList": [
                                {"dt": 0.0, "az": 45.0, "el": 10.0},
                                {"dt": 180.0, "az": 50.0, "el": 15.0},
                                {"dt": 360.0, "az": 55.0, "el": 20.0},
                                {"dt": 540.0, "az": 60.0, "el": 25.0},
                                {"dt": 720.0, "az": 65.0, "el": 30.0},
                                {"dt": 900.0, "az": 70.0, "el": 35.0},
                            ],
                        }
                    ],
                }
            },
        }
    },
)

print(f"Created ephemeris with ID: {azimuth_elevation_ephemeris['ephemerisId']}")
```

 이 예시는 다음과 같이 설정되어 있습니다.
+ 방위각 고도 데이터는 "Ohio 1" 지상국과 연결됩니다.
+ 각도는 도 단위로 지정됩니다.
+ 세그먼트는 15분 동안 진행됩니다.
+ `dt` 값은 참조 에포크의 원자 초 오프셋입니다.
+ 방위각/상승 쌍 6개가 제공됩니다(최소 5개).

## 예: S3에서 방위각 고도 데이터 업로드
<a name="w2aac28c17c15c13"></a>

 더 큰 데이터 세트의 경우 S3 버킷에서 방위각 고도 데이터를 업로드할 수 있습니다.

```
import boto3
import json

# Create AWS clients
s3_client = boto3.client("s3")
ground_station_client = boto3.client("groundstation")

# Define S3 bucket and key
bucket_name = "azimuth-elevation-bucket"
object_key = "singapore-azimuth-elevation.json"

# Create sample azimuth elevation data
azimuth_elevation_data = {
    "angleUnit": "DEGREE_ANGLE",
    "azElSegmentList": [
        {
            "referenceEpoch": "2024-03-15T10:00:00Z",
            "validTimeRange": {
                "startTime": "2024-03-15T10:00:00Z",
                "endTime": "2024-03-15T10:15:00Z",
            },
            "azElList": [
                {"dt": 0.0, "az": 45.0, "el": 10.0},
                {"dt": 180.0, "az": 50.0, "el": 15.0},
                {"dt": 360.0, "az": 55.0, "el": 20.0},
                {"dt": 540.0, "az": 60.0, "el": 25.0},
                {"dt": 720.0, "az": 65.0, "el": 30.0},
                {"dt": 900.0, "az": 70.0, "el": 35.0},
            ],
        },
        {
            "referenceEpoch": "2024-03-15T10:15:00Z",
            "validTimeRange": {
                "startTime": "2024-03-15T10:15:00Z",
                "endTime": "2024-03-15T10:30:00Z",
            },
            "azElList": [
                {"dt": 0.0, "az": 70.0, "el": 35.0},
                {"dt": 180.0, "az": 75.0, "el": 40.0},
                {"dt": 360.0, "az": 80.0, "el": 45.0},
                {"dt": 540.0, "az": 85.0, "el": 50.0},
                {"dt": 720.0, "az": 90.0, "el": 55.0},
                {"dt": 900.0, "az": 95.0, "el": 50.0},
            ],
        },
    ],
}

# Upload sample data to S3
print(f"Uploading azimuth elevation data to s3://{bucket_name}/{object_key}")

s3_client.put_object(
    Bucket=bucket_name,
    Key=object_key,
    Body=json.dumps(azimuth_elevation_data, indent=2),
    ContentType="application/json",
)
print("Sample data uploaded successfully to S3")

# Create azimuth elevation ephemeris from S3
print("Creating azimuth elevation ephemeris from S3...")

s3_azimuth_elevation_ephemeris = ground_station_client.create_ephemeris(
    name="Large Azimuth Elevation Dataset",
    ephemeris={
        "azEl": {
            "groundStation": "Singapore 1",
            "data": {"s3Object": {"bucket": bucket_name, "key": object_key}},
        }
    },
)

print(f"Created ephemeris with ID: {s3_azimuth_elevation_ephemeris['ephemerisId']}")
```

 S3 객체에는 직접 업로드 예제와 동일한 형식의 방위각 고도 데이터가 있는 JSON 구조가 포함되어야 합니다.

## 방위 고도 에페메리스를 사용하여 연락처 예약
<a name="w2aac28c17c15c15"></a>

 방위각 고도 에페메리스를 사용하여 고객 응대를 예약하는 경우 프로세스는 TLE 및 OEM 에페메리스와 다릅니다.

1. [CreateEphemeris](https://docs.aws.amazon.com/ground-station/latest/APIReference/API_CreateEphemeris.html)를 사용하여 방위각 고도 에페메리스 생성

1. 에페메리스가 `ENABLED` 상태에 도달할 때까지 기다립니다.

1. 추적 재정의와 함께 [ReserveContact](https://docs.aws.amazon.com/ground-station/latest/APIReference/API_ReserveContact.html)를 사용하여 고객 응대 예약

 방위각 고도 에페메리스가 있는 고객 응대를 예약하는 예: 

```
import boto3
from datetime import datetime
import time

# Create AWS Ground Station client
ground_station_client = boto3.client("groundstation")

# First, create an azimuth elevation ephemeris
print("Creating azimuth elevation ephemeris...")

create_ephemeris_response = ground_station_client.create_ephemeris(
    name="Azimuth Elevation for Contact Reservation",
    ephemeris={
        "azEl": {
            "groundStation": "Ohio 1",
            "data": {
                "azElData": {
                    "angleUnit": "DEGREE_ANGLE",
                    "azElSegmentList": [
                        {
                            "referenceEpoch": "2024-03-15T10:00:00Z",
                            "validTimeRange": {
                                "startTime": "2024-03-15T10:00:00Z",
                                "endTime": "2024-03-15T10:15:00Z",
                            },
                            "azElList": [
                                {"dt": 0.0, "az": 45.0, "el": 10.0},
                                {"dt": 180.0, "az": 50.0, "el": 15.0},
                                {"dt": 360.0, "az": 55.0, "el": 20.0},
                                {"dt": 540.0, "az": 60.0, "el": 25.0},
                                {"dt": 720.0, "az": 65.0, "el": 30.0},
                                {"dt": 900.0, "az": 70.0, "el": 35.0},
                            ],
                        }
                    ],
                }
            },
        }
    },
)

ephemeris_id = create_ephemeris_response["ephemerisId"]
print(f"Created ephemeris with ID: {ephemeris_id}")

# Wait for ephemeris to become ENABLED
print("Waiting for ephemeris to become ENABLED...")

while True:
    status = ground_station_client.describe_ephemeris(ephemerisId=ephemeris_id)[
        "status"
    ]
    if status == "ENABLED":
        print("Ephemeris is ENABLED")
        break
    elif status in ["INVALID", "ERROR"]:
        raise RuntimeError(f"Ephemeris failed: {status}")
    time.sleep(5)

# Reserve contact with azimuth elevation ephemeris
print("Reserving contact...")

contact = ground_station_client.reserve_contact(
    # Note: satelliteArn is omitted when using azimuth elevation ephemeris
    missionProfileArn="arn:aws:groundstation:us-east-2:111122223333:mission-profile/example-mission-profile",
    groundStation="Ohio 1",
    startTime=datetime(2024, 3, 15, 10, 0, 0),
    endTime=datetime(2024, 3, 15, 10, 15, 0),
    trackingOverrides={"programTrackSettings": {"azEl": {"ephemerisId": ephemeris_id}}},
)

print(f"Reserved contact with ID: {contact['contactId']}")
```

**참고**  
 방위각 고도 에페메리스와의 접촉을 예약할 때 `satelliteArn` 파라미터를 생략할 수 있습니다. 안테나는 접촉 중에 지정된 방위각 및 고도 각도를 따릅니다.

## 사용 가능한 연락처 나열
<a name="w2aac28c17c15c17"></a>

 방위각 고도 에페메리스를 사용하는 경우 [ListContacts](https://docs.aws.amazon.com/ground-station/latest/APIReference/API_ListContacts.html) API에는 특정 파라미터가 필요합니다.
+ 요청에서 `satelliteArn` 파라미터를 생략할 수 있습니다.
+ 사용할 에페메리스를 지정하려면 방위각 고도 에페메리스 ID와 함께 `ephemeris` 파라미터를 제공해야 합니다.
+ 제공된 방위각 및 고도 각도가 요청된 지상국의 [사이트 마스크](https://docs.aws.amazon.com/ground-station/latest/ug/locations.site-masks.html)보다 높을 때 사용 가능한 접촉 창이 표시됩니다.
+ 여전히 `groundStation` 및를 제공해야 합니다. `missionProfileArn` 

 방위각 고도 에페메리스를 생성하고 여기에 사용 가능한 연락처를 나열하는 예: 

```
import boto3
from datetime import datetime, timezone
import time

# Create AWS Ground Station client
ground_station_client = boto3.client("groundstation")

# Step 1: Create azimuth elevation ephemeris
print("Creating azimuth elevation ephemeris...")
ephemeris_response = ground_station_client.create_ephemeris(
    name="Stockholm AzEl Ephemeris",
    ephemeris={
        "azEl": {
            "groundStation": "Stockholm 1",
            "data": {
                "azElData": {
                    "angleUnit": "DEGREE_ANGLE",
                    "azElSegmentList": [
                        {
                            "referenceEpoch": "2024-04-01T12:00:00Z",
                            "validTimeRange": {
                                "startTime": "2024-04-01T12:00:00Z",
                                "endTime": "2024-04-01T12:30:00Z",
                            },
                            "azElList": [
                                {"dt": 0.0, "az": 30.0, "el": 15.0},
                                {"dt": 360.0, "az": 45.0, "el": 30.0},
                                {"dt": 720.0, "az": 60.0, "el": 45.0},
                                {"dt": 1080.0, "az": 75.0, "el": 35.0},
                                {"dt": 1440.0, "az": 90.0, "el": 20.0},
                                {"dt": 1800.0, "az": 105.0, "el": 10.0},
                            ],
                        }
                    ],
                }
            },
        }
    },
)

ephemeris_id = ephemeris_response["ephemerisId"]
print(f"Created ephemeris: {ephemeris_id}")

# Step 2: Wait for ephemeris to become ENABLED
print("Waiting for ephemeris to become ENABLED...")
while True:
    describe_response = ground_station_client.describe_ephemeris(
        ephemerisId=ephemeris_id
    )
    status = describe_response["status"]

    if status == "ENABLED":
        print("Ephemeris is ENABLED")
        break
    elif status in ["INVALID", "ERROR"]:
        # Check for validation errors
        if "invalidReason" in describe_response:
            print(f"Ephemeris validation failed: {describe_response['invalidReason']}")
        raise RuntimeError(f"Ephemeris failed with status: {status}")

    print(f"Current status: {status}, waiting...")
    time.sleep(5)

# Step 3: List available contacts using the azimuth elevation ephemeris
print("Listing available contacts with azimuth elevation ephemeris...")

# Convert epoch timestamps to datetime objects
start_time = datetime.fromtimestamp(1760710513, tz=timezone.utc)
end_time = datetime.fromtimestamp(1760883313, tz=timezone.utc)

contacts_response = ground_station_client.list_contacts(
    startTime=start_time,
    endTime=end_time,
    groundStation="Stockholm 1",
    statusList=["AVAILABLE"],
    ephemeris={"azEl": {"id": ephemeris_id}},
    # satelliteArn is optional
    satelliteArn="arn:aws:groundstation::111122223333:satellite/a88611b0-f755-404e-b60d-57d8aEXAMPLE",
    missionProfileArn="arn:aws:groundstation:eu-north-1:111122223333:mission-profile/966b72f6-6d82-4e7e-b072-f8240EXAMPLE",
)

# Process the results
if contacts_response["contactList"]:
    print(f"Found {len(contacts_response['contactList'])} available contacts:")
    for contact in contacts_response["contactList"]:
        print(f"  - Contact from {contact['startTime']} to {contact['endTime']}")
        print(
            f"    Max elevation: {contact.get('maximumElevation', {}).get('value', 'N/A')}°"
        )
else:
    print("No available contacts found for the specified azimuth elevation ephemeris")
```

**참고**  
 접촉 기간을 결정하는 데 사용할 방위각 고도 에페메리스를 지정하기 위해 접촉을 나열할 때 방위각 고도 ID가 있는 `ephemeris` 파라미터를 제공해야 합니다. `satelliteArn`가 포함된 경우 고객 응대 데이터와 연결되지만 방위각 고도 에페메리스는 에페메리스 우선 순위 확인을 수행하는 대신 안테나를 가리키는 데 사용됩니다.