是否可以替换skyfield中的“ readtle”以从TLE文件中提取每个条目?

时间:2019-05-19 16:22:50

标签: astronomy pyephem skyfield

我想使用python从celestrak.com的TLE文件中提取并解析单个卫星的数据。我找到了使用“ readtle”使用pyephem这样做的代码,但这在skyfield中不起作用。如何从Skyfield中的所有文件中提取数据?

pyephem本质上已被弃用。因此,对于pyephem / skyfield,我选择使用skyfield。

我正在尝试自动从celestrak.com的文件中提取TLE信息。我发现几年前使用pyephem在python 2.x.x下执行此操作的代码。因此,我将代码转换为Python3.7.x。

但是,用于从TLE文件中提取单个条目的代码的拼写方面在skyfield上不起作用。我正在从celestrak.com服务器访问文件。

我也尝试安装pyephem,但出现错误。而且,无论如何,我都想留下来。

我发现的代码为:

class Satellite:
    def __init__(self, name, l1, l2):
        self.e        = ephem.readtle(name, l1, l2)
    def compute(self):
        self.e.compute(datetime.datetime.utcnow())
        self.long   = math.degrees(float(self.e.sublong))
        self.lat    = math.degrees(float(self.e.sublat))
        self.height = abs(int(self.e.elevation))
        r = 6378150 + self.height
        self.r = r / 1000000.0
        self.x      = -cos(radians(self.lat)) * cos(radians(self.long)) * self.r
        self.y      = sin(radians(self.lat)) * self.r
        self.z      = cos(radians(self.lat)) * sin(radians(self.long)) * self.r
        self.vlists  = sat_shape
        self.label = pyglet.text.Label(self.e.name, y=15, anchor_x="center", color=(255,255,255,200))

    def draw(self):
        glLoadIdentity()
        glTranslatef(0,0,-zoom+6.37815)
        glRotatef(ro, 1, 0, 0)
        glRotatef(rocc, 0, 0, 1)
        glTranslatef(0,0,-6.37815)
        glRotatef(-angle_y, 1, 0, 0)
        glRotatef(angle_x, 0, 1, 0)
        glTranslatef(self.x,self.y,self.z)
        glColor3f(1,0,0)
        glScalef(zoom/100.0, zoom/100.0, zoom/100.0)
        for v in self.vlists:
            v.draw(GL_TRIANGLE_STRIP)
        glScalef(0.02, 0.02, 0.02)
        glRotatef(-angle_x, 0, 1, 0)
        glRotatef(angle_y, 1, 0, 0)
        glRotatef(-rocc, 0, 0, 1)
        glRotatef(-ro, 1, 0, 0)
        self.label.draw()
        self.draw_line()

有人有什么想法吗?

1 个答案:

答案 0 :(得分:0)

是的,您可以使用Skyfield的加载程序直接从Celestrak加载TLE文件:

from skyfield.api import Topos, load

stations_url = 'http://celestrak.com/NORAD/elements/stations.txt'
satellites = load.tle(stations_url)
satellite = satellites['ISS (ZARYA)']
print(satellite)
  

EarthSatellite'ISS(ZARYA)'number = 25544 epoch = 2014-01-20T22:23:04Z

documentation中提供了更多信息。