本文介绍有关使用pyorbital进行近地轨道卫星的相关计算(例如卫星的位置,过境预报) 的一些方法。所述技术已经应用到本站的德累斯顿实验站中。

1 获取两行轨道根数(TLE)数据

两行轨道根数是一种经常更新的参数文件,用来近似描述各种近地轨道卫星的轨道。 这个文件的格式是北美防空司令部(NORAD)的发明,也被美国国家航空航天局(NASA)使用。 很多网站(例如heavens-above.com)和软件也利用这一模型进行计算。

互联网上能找到的TLE文件的下载一般见于Celestrak

一个典型的TLE文件包含若干个卫星的轨道参数。每个卫星使用三行表示:第一行是卫星名, 第二行(以1开头)和第三行(以2开头)是具体的参数。例如:

METEOSAT-7
1 24932U 97049B   15038.12362774  .00000051  00000-0  00000+0 0  9993
2 24932   9.4729  45.6572 0001152 245.1346 308.1607  1.00270848 63842
NOAA 15
1 25338U 98030A   15037.56233892  .00000206  00000-0  10596-3 0  9997
2 25338  98.7683  36.1524 0010794 182.1810 287.1918 14.25560800870234
METEOSAT-8 (MSG-1)
1 27509U 02040B   15037.16203692  .00000013  00000-0  00000+0 0  9997
2 27509   3.2966  61.5551 0002800 181.1889 315.2413  1.00276238 45647
KALPANA-1 (METSAT 1)
1 27525U 02043A   15036.79891809 -.00000088  00000-0  00000+0 0  9992
2 27525   4.8356  61.5313 0013887 217.4404 218.0699  1.00272233 45449
INSAT-3A
1 27714U 03013A   15037.98333479 -.00000265  00000-0  00000+0 0  9993
2 27714   0.0624 259.4117 0000723 118.4333 206.4059  1.00271690 43356

2 使用pyorbital进行计算

首先,需要在打算运行这一计算的计算机上安装python和pyorbital。安装pyorbital可以通过 pip安装:

$ sudo pip install pyorbital

在如下例子中,如非特殊说明,输入的角度都是角度制:

  • 对于高度角范围是0到90度(地平线-天顶),
  • 对于方位角是0到360度(北-东-南-西),
  • 对于纬度是-90到90度(南半球-赤道-北半球),
  • 对于经度是-180到180度(西半球-本初子午线-东半球)。

2.1 计算卫星在某一时刻的位置

示例代码如下:

from datetime import datetime # 用来获取系统时间
from pyorbital import orbital # 导入pyorbital的计算功能

nowDatetime = datetime.utcnow() # 获得当前计算机上当前时刻的UTC时间

# SATNAME和TLE_FILENAME变量分别指定卫星名称(和TLE文件中对应),和TLE文件名
orbit = orbital.Orbital(SATNAME, TLE_FILENAME)
coordinates = orbit.get_lonlatalt(nowDatetime)

# coordinates 是一个python的tuple类型,有三个float类型的元素,依次是卫星当前的经度、纬度和高度(千米)。

如需指定一个不同的时刻来进行计算,需要自己构建一个datetime,请阅读Python的文档

2.2 列出卫星未来的过境

类似2.1的代码初始化得到orbit示例,然后使用如下代码:

OBSERV_PARAM=(108.95, 34.27, 410.3) # 按照顺序指定观察者坐标,分别是经度,纬度和海拔
PASS_PERIOD=24 # 以小时为单位的预测时长
passes = orbit.get_next_passes(NOWTIME, PASS_PERIOD, *OBSERV_PARAM)

这样得到的passes是一个列表(list)类型,每项是一个有3个datetime类型的tuple, 代表一次过境,每个tuple里面的3个变量, 分别表示卫星从地平线升起、达到最大高度角和从地平线落下的时刻。

根据2.1的方法,可以用这些时刻来计算得到卫星此时在地球上的经纬度和高度坐标。 也可以如下计算相对于指定观察者的坐标(方位角和高度角)。

2.3 由给定时刻和观察者坐标计算卫星的方位角和高度角

给定一个datetime类型的时刻,可以用如下方法得到卫星的相对观察者的位置参数:

rise, emax, fall = passes[0] # 这种方法将从2.2得到的passes列表的首项(passes[0])打散(这一项是tuple类型)成3个datetime时刻。
risePos = sat.get_observer_look(rise, *OBSERV_PARAM)
fallPos = sat.get_observer_look(fall, *OBSERV_PARAM)

# 这样risePos和fallPos都分别具有(方位角, 高度角)的形式。