「ISSは今どこを飛んでいるのか?」「今夜Starlinkの列を見るには何時にどの方向を見ればいいのか?」— これらの問いに答えるためには、衛星の軌道情報とそれを伝播する計算モデルが必要です。
世界中の衛星追跡は、TLE(Two-Line Element、二行軌道要素)と呼ばれるわずか2行のテキストデータと、SGP4(Simplified General Perturbations 4)と呼ばれる伝播モデルに基づいています。米国宇宙コマンド(USSPACECOM)は地上のレーダー網と光学望遠鏡で約36,000個の宇宙物体を追跡し、その軌道情報をTLE形式で公開しています。
TLEとSGP4は1960年代から使われている「枯れた技術」ですが、その理解は衛星工学の基礎として今なお重要です。
TLEとSGP4を理解すると、以下のことが可能になります。
- 衛星の現在位置の計算: 任意の時刻における衛星の地球固定座標での位置を求める
- 衛星の可視性予測: 地上のある地点から衛星が見える時間帯と方向を計算する
- コンステレーション管理: 数百機の衛星群の配置状況をリアルタイムで把握する
本記事の内容
- 衛星カタログとTLEの歴史
- TLEフォーマットの詳細な読み方
- SGP4モデルの概要(解析的摂動理論)
- J2-J4項とドラッグ項の物理
- Pythonのsgp4ライブラリを使った位置計算
- ISSの軌跡の可視化
- 地上局からの可視性判定
- TLEの精度と限界
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
衛星カタログとTLEの歴史
NORADカタログ
1957年のスプートニク打ち上げ以降、米国はすべての人工宇宙物体を追跡・カタログ化するシステムを構築しました。NORAD(North American Aerospace Defense Command)が管理するカタログでは、各物体に一意の番号(カタログ番号、NORAD ID)が割り当てられます。たとえば、ISS(Zarya モジュール)のカタログ番号は25544です。
現在この役割は第18宇宙防衛隊(18 SDS)が担い、データはSpace-Trackウェブサイト(space-track.org)や一般向けのCelestrak(celestrak.org)で公開されています。
TLEの歴史
TLE形式は1960年代にNORADが開発したデータフォーマットで、80桁のパンチカード2枚に軌道情報を収めることを前提に設計されました。パンチカード時代の遺産ですが、そのコンパクトさと世界的な普及から、60年以上経った今でも衛星追跡の標準フォーマットとして使われ続けています。
重要な点は、TLEはSGP4モデルとセットで使うことが前提だということです。TLEに含まれる軌道要素は、SGP4の内部処理で使われる「平均軌道要素」(mean elements)であり、一般的な瞬時軌道要素(osculating elements)とは異なります。TLEの軌道要素をそのまま二体問題のケプラー伝播に使うと、正確な結果は得られません。
TLEの基本的な背景がわかったところで、次にTLEの各フィールドの意味を一つずつ見ていきましょう。
TLEフォーマットの読み方
TLEの構造
TLEは0行目(オプション)、1行目、2行目の最大3行で構成されます。以下はISSのTLEの例です(データは例示用)。
ISS (ZARYA)
1 25544U 98067A 24001.50000000 .00016717 00000-0 10270-3 0 9993
2 25544 51.6400 247.4627 0006703 130.5360 229.6208 15.49815135439123
1行目の詳細
1 25544U 98067A 24001.50000000 .00016717 00000-0 10270-3 0 9993
| 桁位置 | 内容 | ISS例での値 | 意味 |
|---|---|---|---|
| 1 | 行番号 | 1 | 1行目であることを示す |
| 3-7 | カタログ番号 | 25544 | NORAD衛星カタログ番号 |
| 8 | 分類 | U | U=非機密, C=機密, S=秘密 |
| 10-17 | 国際識別符号 | 98067A | 98年67番目の打ち上げ、A=最初の物体 |
| 19-32 | エポック | 24001.50000000 | 2024年の1.5日目(1月1日12:00 UTC) |
| 34-43 | 平均運動1次導関数 | .00016717 | $\dot{n}/2$ [rev/day²] — ドラッグ効果 |
| 45-52 | 平均運動2次導関数 | 00000-0 | $\ddot{n}/6$ — SGP4では通常未使用 |
| 54-61 | B*ドラッグ項 | 10270-3 | $B^* = 0.10270 \times 10^{-3}$ — 大気抵抗パラメータ |
| 63 | エフェメリスタイプ | 0 | 0=SGP4 |
| 65-68 | 要素セット番号 | 999 | 通算の更新番号 |
| 69 | チェックサム | 3 | 各桁の数字の和の mod 10 |
2行目の詳細
2 25544 51.6400 247.4627 0006703 130.5360 229.6208 15.49815135439123
| 桁位置 | 内容 | ISS例での値 | 意味 |
|---|---|---|---|
| 1 | 行番号 | 2 | 2行目 |
| 3-7 | カタログ番号 | 25544 | 1行目と同じ |
| 9-16 | 傾斜角 | 51.6400 | $i$ [度] |
| 18-25 | 昇交点赤経 | 247.4627 | $\Omega$ [度] |
| 27-33 | 離心率 | 0006703 | $e = 0.0006703$(先頭の「0.」は省略) |
| 35-42 | 近地点引数 | 130.5360 | $\omega$ [度] |
| 44-51 | 平均近点角 | 229.6208 | $M$ [度] |
| 53-63 | 平均運動 | 15.49815135 | $n$ [rev/day] |
| 64-68 | 通算周回数 | 43912 | エポック時の通算周回数 |
| 69 | チェックサム | 3 |
主要パラメータの解釈
平均運動 $n$: 1日あたりの周回数です。ISSの場合15.50回/日なので、周期は約92.9分、高度は約415 kmと計算できます。
$$ T = \frac{86400}{n} \, \text{[s]}, \quad a = \left(\frac{\mu T^2}{4\pi^2}\right)^{1/3} $$
B*ドラッグ項: 大気抵抗の効果を表すパラメータです。
$$ B^* = \frac{\rho_0 C_D A}{2m} $$
単位は $R_E^{-1}$(地球半径の逆数)です。Bが大きいほど大気抵抗の影響が大きい衛星です。ISSのBは $\sim 10^{-4}$、高軌道衛星では $\sim 10^{-5}$ 以下です。
平均運動の1次導関数: 大気抵抗による軌道の縮小速度を表します。正の値は平均運動が増加(周期が短縮、高度が低下)していることを意味します。
TLEの各フィールドが理解できたところで、次にこのデータをどう使って衛星の位置を計算するかを見ていきましょう。それがSGP4モデルです。
SGP4モデルの概要
解析的摂動理論
SGP4は解析的(analytical)な軌道伝播モデルです。数値積分のように微分方程式を1ステップずつ解くのではなく、摂動の効果を解析的な公式(閉じた形の数式)で計算します。
SGP4の計算手順は大まかに以下の通りです。
- TLEの平均軌道要素をエポック時の値として読み込む
- セキュラー項(永年変動)を計算: J2, J4, 大気抵抗の永年効果
- 長周期項を計算: J3の効果による離心率と近地点引数の周期変動
- 短周期項を計算: 1軌道以内の周期変動
- 平均要素 + セキュラー + 長周期 + 短周期 → 瞬時(osculating)軌道要素に変換
- 軌道要素から地心慣性座標(ECI)の位置・速度を計算
J2-J4摂動項
SGP4が考慮する地球非球形の項は $J_2$、$J_3$、$J_4$ です。
J2項($J_2 = 1.08263 \times 10^{-3}$)は最も重要で、以下の永年変動を引き起こします。
昇交点赤経の回帰:
$$ \dot{\Omega} = -\frac{3}{2}n J_2 \left(\frac{R_E}{p}\right)^2 \cos i $$
近地点引数の移動:
$$ \dot{\omega} = \frac{3}{4}n J_2 \left(\frac{R_E}{p}\right)^2 (5\cos^2 i – 1) $$
平均近点角の変化(平均運動の修正):
$$ \delta n = \frac{3}{4}n J_2 \left(\frac{R_E}{p}\right)^2 \sqrt{1-e^2}(3\cos^2 i – 1) $$
J3項($J_3 = -2.54 \times 10^{-6}$)は地球の南北非対称性を表し、主に離心率と近地点引数に長周期の変動を引き起こします。
J4項($J_4 = -1.62 \times 10^{-6}$)はJ2の高次補正で、永年変動の精度を向上させます。
大気抵抗モデル
SGP4の大気抵抗モデルは非常に簡略化されたもので、TLEに含まれるB*パラメータと平均運動の導関数 $\dot{n}$ を使います。大気密度の詳細なモデル(NRLMSISE-00など)は使わず、冪級数展開による解析的な近似を行います。
具体的には、半長軸の永年変化を
$$ \dot{a}_{\text{drag}} \propto -B^* \rho(a) a^2 $$
として、密度を高度の指数関数で近似した解析解を使います。この近似は粗いですが、TLEが定期的(数日ごと)に更新されることを前提としているため、短期的な精度は十分です。
SDP4(深宇宙)
軌道周期が225分以上(高度約5,900 km以上)の衛星には、SGP4の拡張版であるSDP4(Simplified Deep-space Perturbations)が使われます。SDP4はJ2-J4に加えて、月と太陽の第三体摂動と太陽輻射圧も考慮します。
実際にはsgp4ライブラリが軌道周期に基づいてSGP4とSDP4を自動的に切り替えるため、利用者が意識する必要はありません。
SGP4の理論的背景が理解できたところで、Pythonで実際にTLEデータを使った軌道計算を行いましょう。
PythonでのSGP4による位置計算
sgp4ライブラリの基本
Pythonのsgp4ライブラリを使えば、TLEデータから衛星の位置をすぐに計算できます。
import numpy as np
import matplotlib.pyplot as plt
from datetime import datetime, timedelta
# sgp4ライブラリのインポート
# pip install sgp4 でインストール
from sgp4.api import Satrec, WGS72
from sgp4 import exporter
# --- ISS (ZARYA) のTLE(例示用データ) ---
tle_line1 = "1 25544U 98067A 24001.50000000 .00016717 00000-0 10270-3 0 9993"
tle_line2 = "2 25544 51.6400 247.4627 0006703 130.5360 229.6208 15.49815135439123"
# SGP4衛星オブジェクトの作成
satellite = Satrec.twoline2rv(tle_line1, tle_line2, WGS72)
# エポック情報の確認
epoch_year = satellite.epochyr
epoch_days = satellite.epochdays
print(f"エポック: {epoch_year}年 {epoch_days:.4f}日")
print(f"傾斜角: {np.degrees(satellite.inclo):.4f}°")
print(f"離心率: {satellite.ecco:.7f}")
print(f"平均運動: {satellite.no_kozai * 1440 / (2*np.pi):.8f} rev/day")
# 周期と高度の推定
n_rad_min = satellite.no_kozai # [rad/min]
T_min = 2 * np.pi / n_rad_min # 周期 [分]
mu_km = 398600.4418 # [km^3/s^2]
a_km = (mu_km * (T_min * 60 / (2 * np.pi))**2)**(1/3)
h_km = a_km - 6378.137
print(f"周期: {T_min:.1f} 分")
print(f"推定高度: {h_km:.0f} km")
位置計算
from sgp4.api import jday
def propagate_tle(satellite, start_datetime, duration_hours, dt_seconds=60):
"""
TLE/SGP4で衛星の位置を計算
Returns:
times: datetime配列
positions: ECI座標 [km] (N, 3)
velocities: ECI速度 [km/s] (N, 3)
"""
times = []
positions = []
velocities = []
current = start_datetime
end = start_datetime + timedelta(hours=duration_hours)
while current <= end:
jd, fr = jday(current.year, current.month, current.day,
current.hour, current.minute,
current.second + current.microsecond / 1e6)
error_code, r, v = satellite.sgp4(jd, fr)
if error_code == 0:
times.append(current)
positions.append(r) # [km]
velocities.append(v) # [km/s]
current += timedelta(seconds=dt_seconds)
return times, np.array(positions), np.array(velocities)
# --- 24時間の位置計算 ---
start = datetime(2024, 1, 1, 12, 0, 0) # エポック時刻
times, pos_eci, vel_eci = propagate_tle(satellite, start, 24, dt_seconds=30)
print(f"計算点数: {len(times)}")
print(f"位置の範囲 [km]:")
print(f" X: {pos_eci[:,0].min():.0f} ~ {pos_eci[:,0].max():.0f}")
print(f" Y: {pos_eci[:,1].min():.0f} ~ {pos_eci[:,1].max():.0f}")
print(f" Z: {pos_eci[:,2].min():.0f} ~ {pos_eci[:,2].max():.0f}")
r_mag = np.linalg.norm(pos_eci, axis=1)
h_eci = r_mag - 6378.137
print(f" 高度: {h_eci.min():.1f} ~ {h_eci.max():.1f} km")
ISSの軌跡を地図上に描く
ECI座標を地理座標(緯度・経度)に変換して、衛星の地上軌跡(Ground Track)を描きます。
def eci_to_geodetic(r_eci, datetime_utc):
"""
ECI座標 → 地理座標(緯度・経度・高度)
簡易版: グリニッジ恒星時でz軸回転
"""
# グリニッジ恒星時(GMST)の概算
# J2000からのユリウス世紀
jd = (datetime_utc - datetime(2000, 1, 1, 12, 0, 0)).total_seconds() / 86400.0
jd += 2451545.0
T = (jd - 2451545.0) / 36525.0
# GMST [度]
gmst_deg = 280.46061837 + 360.98564736629 * (jd - 2451545.0) + \
0.000387933 * T**2 - T**3 / 38710000.0
gmst_deg = gmst_deg % 360
gmst_rad = np.radians(gmst_deg)
# ECI → ECEF(z軸回りの回転)
cos_g = np.cos(gmst_rad)
sin_g = np.sin(gmst_rad)
x_ecef = cos_g * r_eci[0] + sin_g * r_eci[1]
y_ecef = -sin_g * r_eci[0] + cos_g * r_eci[1]
z_ecef = r_eci[2]
# ECEF → 地理座標
r_xy = np.sqrt(x_ecef**2 + y_ecef**2)
lat = np.degrees(np.arctan2(z_ecef, r_xy))
lon = np.degrees(np.arctan2(y_ecef, x_ecef))
alt = np.sqrt(x_ecef**2 + y_ecef**2 + z_ecef**2) - 6378.137
return lat, lon, alt
# --- 地理座標への変換 ---
lats = np.zeros(len(times))
lons = np.zeros(len(times))
alts = np.zeros(len(times))
for k in range(len(times)):
lats[k], lons[k], alts[k] = eci_to_geodetic(pos_eci[k], times[k])
# --- 地上軌跡(Ground Track)の描画 ---
fig, ax = plt.subplots(figsize=(14, 7))
# 経度の不連続を処理(-180/+180の折り返し)
lon_plot = lons.copy()
for k in range(1, len(lon_plot)):
if abs(lon_plot[k] - lon_plot[k-1]) > 180:
lon_plot[k] = np.nan # 線を途切れさせる
# 地上軌跡のプロット
ax.scatter(lon_plot, lats, c=np.arange(len(lats)), cmap='viridis',
s=1, alpha=0.7)
# 出発点をマーク
ax.plot(lons[0], lats[0], 'r*', markersize=12, label='Start')
# 地図の装飾
ax.set_xlim(-180, 180)
ax.set_ylim(-90, 90)
ax.set_xlabel('Longitude [deg]')
ax.set_ylabel('Latitude [deg]')
ax.set_title('ISS Ground Track (24 hours)')
ax.set_aspect('equal')
# 傾斜角の範囲を示す
ax.axhline(y=51.64, color='red', linestyle='--', alpha=0.3, label='Inclination limit')
ax.axhline(y=-51.64, color='red', linestyle='--', alpha=0.3)
ax.legend()
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('iss_ground_track.png', dpi=150, bbox_inches='tight')
plt.show()
この地上軌跡から、ISSの軌道の特徴が明確に読み取れます。
-
軌跡は正弦波のような形状 — 傾斜角51.64°に対応して、緯度は±51.64°の範囲を振動します。1周ごとに地球の自転の影響で軌跡が西に約22.5°ずれています。
-
24時間で約16周 — 平均運動が15.5 rev/dayなので、1日で約15.5回の周回軌跡が描かれています。軌跡が地球全体をカバーしているのは、ISSの軌道傾斜角が比較的大きいためです。
-
緯度の範囲は傾斜角で決まる — 赤い破線で示された傾斜角の限界(±51.64°)を軌跡が超えることはありません。これは軌道力学の基本的な性質です。
地上局からの可視性判定
次に、ある地上局からISSが見えるかどうかを判定します。仰角(elevation angle)が一定値以上であれば「可視」と判断します。
def compute_elevation(sat_pos_eci, station_lat, station_lon, station_alt,
obs_datetime):
"""
地上局から見た衛星の仰角を計算
Parameters:
sat_pos_eci: 衛星のECI位置 [km]
station_lat: 観測局の緯度 [度]
station_lon: 観測局の経度 [度]
station_alt: 観測局の高度 [km]
obs_datetime: 観測時刻
Returns:
elevation: 仰角 [度]
azimuth: 方位角 [度]
"""
# GMST
jd = (obs_datetime - datetime(2000, 1, 1, 12, 0, 0)).total_seconds() / 86400
jd += 2451545.0
T = (jd - 2451545.0) / 36525.0
gmst_deg = 280.46061837 + 360.98564736629 * (jd - 2451545.0) + \
0.000387933 * T**2 - T**3 / 38710000.0
gmst_rad = np.radians(gmst_deg % 360)
# 観測局のECEF座標
lat_r = np.radians(station_lat)
lon_r = np.radians(station_lon)
r_station = 6378.137 + station_alt
x_ecef_s = r_station * np.cos(lat_r) * np.cos(lon_r)
y_ecef_s = r_station * np.cos(lat_r) * np.sin(lon_r)
z_ecef_s = r_station * np.sin(lat_r)
# 観測局のECI座標
cos_g, sin_g = np.cos(gmst_rad), np.sin(gmst_rad)
x_eci_s = cos_g * x_ecef_s - sin_g * y_ecef_s
y_eci_s = sin_g * x_ecef_s + cos_g * y_ecef_s
z_eci_s = z_ecef_s
# 相対ベクトル(ECI)
rho_eci = sat_pos_eci - np.array([x_eci_s, y_eci_s, z_eci_s])
# ECI → SEZ(South-East-Zenith)座標
lst = gmst_rad + lon_r # 地方恒星時
cos_lat = np.cos(lat_r)
sin_lat = np.sin(lat_r)
cos_lst = np.cos(lst)
sin_lst = np.sin(lst)
# 回転行列 ECI → SEZ
rho_s = (sin_lat * cos_lst * rho_eci[0] +
sin_lat * sin_lst * rho_eci[1] -
cos_lat * rho_eci[2])
rho_e = (-sin_lst * rho_eci[0] +
cos_lst * rho_eci[1])
rho_z = (cos_lat * cos_lst * rho_eci[0] +
cos_lat * sin_lst * rho_eci[1] +
sin_lat * rho_eci[2])
rho_mag = np.sqrt(rho_s**2 + rho_e**2 + rho_z**2)
# 仰角と方位角
elevation = np.degrees(np.arcsin(rho_z / rho_mag))
azimuth = np.degrees(np.arctan2(rho_e, -rho_s)) % 360
return elevation, azimuth
# --- 東京(種子島宇宙センター)からのISS可視性 ---
station_lat = 30.4 # 緯度 [度]
station_lon = 131.0 # 経度 [度]
station_alt = 0.05 # 高度 [km]
station_name = "Tanegashima"
# 24時間の仰角を計算
elevations = np.zeros(len(times))
azimuths = np.zeros(len(times))
for k in range(len(times)):
elevations[k], azimuths[k] = compute_elevation(
pos_eci[k], station_lat, station_lon, station_alt, times[k])
# 可視パス(仰角 > 10°)の検出
min_elevation = 10.0 # 最低仰角 [度]
visible = elevations > min_elevation
# --- 可視性プロット ---
fig, axes = plt.subplots(2, 1, figsize=(14, 8))
# 仰角の時系列
t_hours = np.array([(t - times[0]).total_seconds() / 3600 for t in times])
axes[0].plot(t_hours, elevations, 'b-', linewidth=0.5, alpha=0.7)
axes[0].fill_between(t_hours, min_elevation, elevations,
where=visible, alpha=0.3, color='green',
label='Visible (el > 10°)')
axes[0].axhline(y=min_elevation, color='red', linestyle='--',
alpha=0.5, label=f'Min elevation ({min_elevation}°)')
axes[0].axhline(y=0, color='gray', linestyle='-', alpha=0.3)
axes[0].set_xlabel('Time [hours from epoch]')
axes[0].set_ylabel('Elevation [deg]')
axes[0].set_title(f'ISS Elevation from {station_name}')
axes[0].legend()
axes[0].grid(True, alpha=0.3)
axes[0].set_ylim(-90, 90)
# 可視パスの最大仰角
pass_starts = []
in_pass = False
for k in range(len(visible)):
if visible[k] and not in_pass:
pass_starts.append(k)
in_pass = True
elif not visible[k] and in_pass:
in_pass = False
# 可視パスの詳細
axes[1].set_visible(False)
pass_info = "=== 可視パス一覧 ===\n"
for i, start_idx in enumerate(pass_starts[:8]):
# パスの終了を探す
end_idx = start_idx
while end_idx < len(visible) and visible[end_idx]:
end_idx += 1
max_el = elevations[start_idx:end_idx].max()
max_el_idx = start_idx + np.argmax(elevations[start_idx:end_idx])
pass_info += (f"Pass {i+1}: "
f"{times[start_idx].strftime('%H:%M')} - "
f"{times[min(end_idx, len(times)-1)].strftime('%H:%M')} UTC, "
f"Max El = {max_el:.1f}°\n")
print(pass_info)
plt.tight_layout()
plt.savefig('iss_visibility.png', dpi=150, bbox_inches='tight')
plt.show()
この可視性解析から、衛星追跡の実際の運用に関する重要な知見が得られます。
-
ISSは1日に数回「通過」する — 緑色で示された可視パスが1日に数回発生しています。各パスの持続時間は通常5〜10分程度です。
-
仰角が高いパスほど好条件 — 最大仰角が60°以上のパスは観測に適しており、30°以下のパスは大気の影響で見づらくなります。
-
可視条件は複合的 — ここでは仰角のみで判定しましたが、実際には太陽光の照射条件(衛星に太陽光が当たっている且つ地上が暗い)も必要です。
TLEの精度と限界
精度
TLE/SGP4による位置予測の精度は、エポックからの経過時間に強く依存します。
| エポックからの経過 | 位置精度(目安) |
|---|---|
| 数時間以内 | 1〜5 km |
| 1日 | 5〜20 km |
| 3日 | 20〜50 km |
| 1週間 | 50〜100 km以上 |
精度が急速に悪化するのは、SGP4モデルの限界(簡略化された大気モデル、第三体摂動の近似)と、TLEの元となる観測データの精度に起因します。
限界
TLE/SGP4には以下の根本的な限界があります。
- 精度の限界: 高精度な軌道決定(GPS搭載衛星など)の精度はcmオーダーですが、TLEはkmオーダーにとどまる
- 更新頻度への依存: TLEは定期的に更新されることを前提としており、古いTLEは急速に精度が劣化する
- マヌーバの非考慮: 衛星が軌道修正を行った場合、マヌーバ前のTLEは使えなくなる
- 平均要素: TLEの軌道要素はSGP4の内部定義による「平均要素」で、他のモデルでの使用には変換が必要
代替フォーマット
近年は、TLEに代わる新しいフォーマットも登場しています。
OMM(Orbit Mean-Elements Message): CCSDS(宇宙データ標準化諮問委員会)が定義したXML/JSON形式のフォーマット。TLEと同じ平均要素を含みつつ、より拡張性の高い構造を持つ。Space-Trackではすでに提供開始。
OEM(Orbit Ephemeris Message): 瞬時軌道要素や状態ベクトルの時系列を含むフォーマット。精密軌道データの交換に使用。
しかし、TLE/SGP4は60年以上の実績と世界的な普及度から、当面は衛星追跡の基盤であり続けるでしょう。
まとめ
本記事では、TLEとSGP4による衛星軌道計算の実用的手法を解説しました。
- TLEフォーマット: 2行80桁のテキストに6つの平均軌道要素、B*ドラッグ項、平均運動の導関数を格納。SGP4モデルとセットで使うことが前提
- SGP4モデル: J2-J4とドラッグの効果を解析的に計算する軌道伝播モデル。数値積分なしで任意の時刻の衛星位置を高速に計算できる
- J2摂動: 昇交点の回帰と近地点の移動を引き起こす最大の摂動。SGP4の主要な永年項
- B*ドラッグ項: TLEに含まれる大気抵抗パラメータ。SGP4の大気モデルは簡略化されているが、定期的なTLE更新を前提とすれば実用的
- 位置精度: エポックから数時間で1〜5 km、1週間で50〜100 km以上に劣化。高精度が必要な用途にはGPSベースの精密軌道が必要
- 可視性判定: ECI→地理座標→仰角/方位角の変換で地上局からの可視性を判定できる
次のステップとして、以下の記事も参考にしてください。