ECEF для J2000 с использованием Skyfield

Скажем, у меня есть (ECEF) широта, долгота и расстояние до Земли для объекта в определенное время. Мне нужно получить его координаты J2000. Что я делаю

import skyfield.api
planets = skyfield.api.load('de421.bsp')
earth = planets['earth']
ts = skyfield.api.load.timescale()
sat = earth + skyfield.api.Topos(latitude_degrees=latitude, longitude_degrees=longitude)
obs = earth.at(ts.utc(time)).observe(sat)
x, y, z = obs.km

Тогда я бы нормализовал [x, y, z] и умножьте это на расстояние до Земли. Есть два вопроса:

  1. Правильно ли это делать?
  2. Есть ли более быстрый способ без загрузки 'de421.bsp'?

1 ответ

Решение

Результат должен быть точным, но на самом деле есть более простой способ - ваша догадка, о которой вы должны спросить, действительно была правильной! Попробуйте прочитать раздел "Создание положения спутника" документации по спутнику Земли:

http://rhodesmill.org/skyfield/earth-satellites.html

Я думаю, вы обнаружите, что можете сделать что-то подобное для достижения того же результата:

sat = skyfield.api.Topos(latitude_degrees=latitude, longitude_degrees=longitude)
x, y, z = sat.at(ts.utc(time)).position.km

Но я не уверен точно, как будет выглядеть ваш код, так как я нигде не вижу в вашем коде расстояние до Земли, о котором вы говорили, и ваш код ссылается на sa переменная, которая не используется иначе (возможно, вы имели в виду sat?) - но, надеюсь, документация заставит вас двигаться!

Другие вопросы по тегам