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]
и умножьте это на расстояние до Земли. Есть два вопроса:
- Правильно ли это делать?
- Есть ли более быстрый способ без загрузки '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
?) - но, надеюсь, документация заставит вас двигаться!