AstroPy: как преобразовать объект SkyCoord в кадре GCRS в топоцентрический кадр? - PullRequest
0 голосов
/ 14 декабря 2018

In AstroPy метод get_sun() возвращает экваториальные координаты Солнца в виде объекта SkyCoord в системе координат GCRS.Как я могу преобразовать эти координаты в топоцентрический кадр, чтобы получить топоцентрические экваториальные координаты Солнца?

Я посмотрел на метод transform_to(), но этоне предлагает топоцентрическую структуру.Где-то в документах я видел это утверждение: «Классами фреймов, встроенными в астропию, являются ICRS, FK5, FK4, FK4NoETerms, Galactic и AltAz».Означает ли это, что для преобразования в топоцентрическую систему я должен был бы определить новый класс как подкласс класса BaseCoordinateFrame?

РЕДАКТИРОВАТЬ: Математический фон можно увидетьнапример, здесь (ответ Дьедонне): https://astronomy.stackexchange.com/questions/19170/transformation-from-geocentric-coordinates-into-equatorial-coordinates

Я хотел бы знать, реализовано ли это уже в AstroPy как готовая к использованию функция?

РЕДАКТИРОВАТЬ 2: Мне кажется, что я должен получить желаемый результат, если я все еще сохраняю кадр GCRS, но меняю параметры obsgeoloc и obsgeovel со значений по умолчанию (0,0,0) на значения моей фактической позиции,Но как мне это сделать?

РЕДАКТИРОВАТЬ 3: Мне удалось изменить по крайней мере obsgeoloc, но это не имеет значения, я получаю те же экваториальные координаты, если я ничего не делаюнеправильно или просто неправильно все понимают, или, может быть, разница не очевидна, потому что значения координат даются с точностью до 8 десятичных знаков?(И я до сих пор не знаю, какие значения взять за obsgeovel, но даже если я использую некоторые произвольные значения, я снова получаю те же координаты.)

<SkyCoord (GCRS: obstime=2018-12-01T00:00:00.000, obsgeoloc=(0., 0., 0.) m, obsgeovel=(0., 0., 0.) m / s): (ra, dec, distance) in (deg, deg, AU)
    (246.72726607, -21.71360187, 0.98613747)>

<GCRS Coordinate (obstime=2018-12-01T00:00:00.000, obsgeoloc=(4659791.10339651, 1289069.45080985, 4147935.86909442) m, obsgeovel=(0., 0., 0.) m / s): (ra, dec) in deg
    (246.72726607, -21.71360187)>

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Если я правильно понял ваш вопрос, то вам нужны экваториальные координаты Солнца (т. Е. Оси, выровненные по осям ICRS), но для наблюдателя в данном начале (топоцентрическом).

Вв этом случае вместо использования get_sun, который всегда возвращает координаты с геоцентрическим происхождением, вы можете использовать astropy.coordinates.get_body, который позволяет указать местоположение наблюдателя с помощью объекта EarthLocation.

>>> from astropy.coordinates import EarthLocation, get_body
>>> from astropy.time import Time
>>> location = EarthLocation.of_site('lapalma')
>>> t = Time.now()
>>> sun = get_body('sun', t, location)
<SkyCoord (GCRS: obstime=2018-12-17 11:12:59.165352, obsgeoloc=(-3111752.92801233, -4649601.13172555, 3057088.20910137) m, obsgeovel=(339.04768621, -227.31606521, -0.62038673) m / s): (ra, dec, distance) in (deg, deg, AU)
(264.76635166, -23.35141062, 0.98401329)>
>>> sun = get_body('sun', t)
<SkyCoord (GCRS: obstime=2018-12-17 11:12:59.165352, obsgeoloc=(0., 0., 0.) m, obsgeovel=(0., 0., 0.) m / s): (ra, dec, distance) in (deg, deg, AU)
(264.76514306, -23.34957481, 0.98403534)>
0 голосов
/ 14 декабря 2018

Согласно моему прочтению этой статьи википедии Topocentric - это другое название фрейма AltAz, уже реализованного в Astropy.

Таким образом, вы можете делать то, что вы хотите, настроив объект Earth Locationи преобразование в AltAz:

>>> from astropy.coordinates import EarthLocation, SkyCoord, get_sun, AltAz 
>>> from astropy.time import Time 
>>> import astropy.units as u                                                                                                                                                                                      

>>> Fort_Sumner = EarthLocation(lat=34.4900*u.deg, lon=-104.221800*u.deg, height=40*u.km)                                                                                                                          

>>> get_sun(Time("2018-12-01T00:00:00")).transform_to(AltAz(location=Fort_Sumner))                                                                                                                                 
<SkyCoord (AltAz: obstime=2018-12-01T00:00:00.000, location=(-1301.01298069, -5133.33948381, 3614.02816719) km, pressure=0.0 hPa, temperature=0.0 deg_C, relative_humidity=0.0, obswl=1.0 micron): (az, alt, distance) in (deg, deg, km)
(245.77428805, -3.34077928, 1.47524431e+08)>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...