システム間の変換

astropy.coordinates 座標を1つのフレームから別のフレームに変換する豊富なシステムをサポートする.Astropyには一般的な天文フレームが内蔵されているが,インフラ転換は動的である。これは、ユーザが新しい座標枠およびその変換を定義することを可能にすることを意味する。ご自分の座標フレームや変換を書くテーマについては、ご参照ください 新しい枠組みを定義する 本節では,どうかを重点的に紹介する use 変形する。

内蔵座標フレーム、含まれる変換、フレーム名の完全リストが(クリック可能)グラフとして表示されます。 coordinates API文書。

実例.

推薦された変換方法を以下に示す.

>>> import astropy.units as u
>>> from astropy.coordinates import SkyCoord
>>> gc = SkyCoord(l=0*u.degree, b=45*u.degree, frame='galactic')
>>> gc.fk5  
<SkyCoord (FK5: equinox=J2000.000): (ra, dec) in deg
    ( 229.27251463, -1.12844288)>

これは一般的な属性パターンアクセスのように見えるが,実際にはより汎用的な文法糖である. transform_to() 方法は、フレームワーク名、クラス、またはインスタンスを受け入れることができる:

>>> from astropy.coordinates import FK5
>>> gc.transform_to('fk5')  
<SkyCoord (FK5: equinox=J2000.000): (ra, dec) in deg
    ( 229.27251463, -1.12844288)>
>>> gc.transform_to(FK5)  
<SkyCoord (FK5: equinox=J2000.000): (ra, dec) in deg
    ( 229.27251463, -1.12844288)>
>>> gc.transform_to(FK5(equinox='J1980.0'))  
<SkyCoord (FK5: equinox=J1980.000): (ra, dec) in deg
    ( 229.0146935, -1.05560349)>

便宜上ご利用いただけます SkyCoord 対象を中の枠組みとする transform_to() それがそうです。これにより、1つの座標オブジェクトを他方の座標オブジェクトのフレームに入れることができる:

>>> sc = SkyCoord(ra=1.0, dec=2.0, unit='deg', frame=FK5, equinox='J1980.0')
>>> gc.transform_to(sc)  
<SkyCoord (FK5: equinox=J1980.000): (ra, dec) in deg
    ( 229.0146935, -1.05560349)>

Some coordinate frames (including FK5, FK4, and FK4NoETerms) support "self transformations," meaning the type of frame does not change, but the frame attributes do. Any example is precessing a coordinate from one equinox to another in an equatorial frame. This is done by passing transform_to a frame class with the relevant attributes, as shown below. Note that these frames use a default equinox if you do not specify one:

>>> fk5c = SkyCoord('02h31m49.09s', '+89d15m50.8s', frame=FK5)
>>> fk5c.equinox
<Time object: scale='tt' format='jyear_str' value=J2000.000>
>>> fk5c  
<SkyCoord (FK5: equinox=J2000.000): (ra, dec) in deg
    ( 37.95454167,  89.26411111)>
>>> fk5_2005 = FK5(equinox='J2005')  # String initializes an astropy.time.Time object
>>> fk5c.transform_to(fk5_2005)  
<SkyCoord (FK5: equinox=J2005.000): (ra, dec) in deg
    ( 39.39317639,  89.28584422)>

属性が座標を作成する際にも平分点を指定することができる. Time 対象::

>>> from astropy.time import Time
>>> fk5c = SkyCoord('02h31m49.09s', '+89d15m50.8s',
...                 frame=FK5(equinox=Time('J1970')))
>>> fk5_2000 = FK5(equinox=Time(2000, format='jyear'))
>>> fk5c.transform_to(fk5_2000)  
<SkyCoord (FK5: equinox=2000.0): (ra, dec) in deg
    ( 48.023171,  89.38672485)>

同じ下位レベルのフレームワーククラスも1つある transform_to() メソッドは,属性パターンアクセスをサポートしていない.初期フレームまたは最終フレームに出現するフレーム属性のみを使用するので、細かい違いもある。 SkyCoord すべての変換ステップについて、オブジェクトは、それらが持つ任意のフレーム属性を使用する。だから…。 SkyCoord 低レベルクラスは、常に不変の場合、1つのフレームから別のフレームに変換され、その後に戻ることができ、したがって、一般に往復することはない。

変換と太陽系天体暦

いくつかの変換(例えば、 ICRS and GCRS) require the use of a Solar System ephemeris to calculate the position and velocity of the Earth and Sun. By default, transformations are calculated using built-in ERFA ルーチンは、しかし、彼らは、(動力学モデルから派生した)より正確なJPL天体暦を使用することもできる。

例を引く

JPL天体暦をご利用の場合は、ご利用ください solar_system_ephemeris コンテキストマネージャは、次の図に示すように:

>>> from astropy.coordinates import solar_system_ephemeris
>>> from astropy.coordinates import GCRS
>>> with solar_system_ephemeris.set('jpl'): 
...     fk5c.transform_to(GCRS(obstime=Time("J2000"))) 

太陽系から遠い場所では,ジェット推進実験室を用いた天体暦の微角秒級の差は無視できる。月のような近くの物体では、差はミリ秒オーダーになる可能性がある。利用可能な天体暦のより詳細な情報については、JPL天体暦を使用する要求も含まれていますので、参照されたい 太陽系天体暦 それがそうです。