Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как преобразовать координаты Земли с центром в инерциальной системе координат (ECI) в координаты с фиксированной координатой по центру Земли (ECEF) AstroPy? Другой?

Автор вопроса: RoseОтветов: 1

У меня есть векторы положения (x, y, z) и скорости (Vx, Vy, Vz) в центрированных по центру Земли инерциальных координатах (ECI) для спутниковой орбиты, и в конечном итоге я хочу получить геодезические координаты (широта, долгота и высота) .

Согласно этому другие Вопрос о переполнении стека кажется, что мне нужно преобразовать в координаты Земли по центру Земли (ECEF) в качестве промежуточного шага (поэтому ECI -> ECEF -> Lat / Lon / Alt).

Я знаю, что ECI и ECEF имеют одну и ту же исходную точку (центр масс Земли) и одну и ту же ось z, которая указывает на Северный полюс. Однако я не уверен, какие фактические уравнения или корректировки мне нужно сделать, чтобы преобразовать ECI в ECEF.

В противном случае, если бы кто-нибудь знал о каких-либо консервированных преобразованиях в Astropy или о чем-то подобном, это было бы даже лучше. (Я не видел ECI в качестве опции для Astro Py или Space Py).

Вот код, который я использую для создания орбиты и получения векторов положения и скорости.

from scipy.constants import kilo
import orbital
from orbital import earth, KeplerianElements, Maneuver, plot, utilities
from orbital.utilities import Position, Velocity
import matplotlib.pyplot as plt
import numpy as np

orbitPineapple = KeplerianElements.with_period(5760, body=earth,
e=0.05, i=(np.deg2rad(0)), arg_pe=(np.deg2rad(30)))
plot(orbitPineapple)
plt.show()
print(orbitPineapple.r)
print(orbitPineapple.v)

Выход: Положение (x = 5713846,540659178, y = 3298890,8383577876, z = 0,0) Скорость (x = -3982,305479346745, y = 6897,555421488496, z = 0,0)

  • Не могли бы вы включить некоторые типовые исходные данные и ожидаемые результаты? Это значительно упростит поиск решения, которое действительно работает для вас. MSeifert 27.09.2017
  • Я отредактирую свой вопрос, включив в него код, который я использую для создания орбиты и получения векторов положения и скорости. Rose 27.09.2017
  • Итак, прямо сейчас у меня есть координаты и скорость в ECI для образца орбиты спутника. Положение (x = 5713846,540659178, y = 3298890,8383577876, z = 0,0) Скорость (x = -3982,305479346745, y = 6897,555421488496, z = 0,0), и я хочу получить широту, долготу и высоту спутника, когда он находится в одном месте. должность. Я прочитал, что мне сначала нужно преобразовать ECI в ECEF, чтобы преобразовать в lat и lon. Проблема в том, что ECI - это фиксированная система координат, которая не вращается вместе с Землей, как ECEF и lat / lon / alt. Я не знаю, как преобразовать ECI в ECEF. Rose 27.09.2017
  • ECI и ECEF не используют одну и ту же ось Z: ECEF обычно имеет ось Z, заданную малой осью эллипсоида, наилучшим образом подходящего к Земле (WGS84), и эта ось как прецессирует, так и немного колеблется относительно фиксированной Z -ось в ECI. ECI и ECEF могут совместно использовать ось Z в определенный момент времени (например, в полдень 1 января 2000 года по земному времени для J2000). M Kloster 03.05.2021

pythonastropycoordinate-transformationcoordinate-systemscoordinate

Ответы

Ответ 1 · рейтинг 4 · Stuart P Littlefair

Существует несколько различных инерциальных систем отсчета с центром в Земле, и ответ зависит от того, в какой из них у вас есть координаты.

Самый распространенный - это так называемый J2000; который определяется относительно ориентации Земли 1 января 2000 года. Другой распространенный - GCRF, который почти такой же (с точностью до 80 миллисекунд).

Если это один из этих двух, у вас должна быть возможность создать объект астропии EarthLocation и получить доступ к атрибутам lat, lon и height следующим образом

from astropy import coordinates as coord
from astropy import units as u
from astropy.time import Time
now = Time('2017-09-27 12:22:00')
# position of satellite in GCRS or J20000 ECI:
cartrep = coord.CartesianRepresentation(x=5713846.540659178,
                                        y=3298890.8383577876,
                                        z=0., unit=u.m)
gcrs = coord.GCRS(cartrep, obstime=now)
itrs = gcrs.transform_to(coord.ITRS(obstime=now))
loc = coord.EarthLocation(*itrs.cartesian.cartrep )
print(loc.lat, loc.lon, loc.height)

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы