Есть ли в скайфилде замена «readtle» для извлечения каждой записи из файлов TLE? - PullRequest
0 голосов
/ 19 мая 2019

Я хотел бы получить и проанализировать данные для отдельных спутников из файлов TLE на celestrak.com с помощью Python. Я нашел код, чтобы сделать это с pyephem, используя «readtle», но это не работает в Skyfield. Как я могу получить данные из файлов TLE в Skyfield?

pyephem по существу устарел. Итак, впервые в pyephem / skyfield, я решил использовать skyfield.

Я пытаюсь автоматически извлечь информацию TLE из файлов на celestrak.com. Я нашел код несколько лет назад, который делал это с помощью pyephem под python 2.x.x. Итак, я конвертирую код в Python 3.7.x.

Однако аспект readtle кода, используемого для извлечения отдельных записей из файлов TLE, не будет работать на небесном поле. Я обращаюсь к файлам с сервера celestrak.com.

Я также пытался установить pyephem, но получил ошибки. И я хотел бы остаться с Skyfield в любом случае.

Код, который я нашел, гласит:

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()

У кого-нибудь есть идеи?

...