よくある間違い

以下に使用時によく見られる困難な源を示す. coordinates それがそうです。

対象分離

対象間の間隔を計算する際には,記憶することが重要である astropy.coordinates.SkyCoord.separation() 使用順序に応じて異なる答えを与える.例えば:

>>> import numpy as np
>>> from astropy import units as u
>>> from astropy.coordinates import SkyCoord, GCRS
>>> from astropy.time import Time
>>> t = Time("2010-05-22T00:00")
>>> moon = SkyCoord(104.29*u.deg, 23.51*u.deg, 359367.3*u.km, frame=GCRS(obstime=t))
>>> star = SkyCoord(101.4*u.deg, 23.02*u.deg, frame='icrs')
>>> star.separation(moon) 
<Angle 139.84211884 deg>
>>> moon.separation(star) 
<Angle 2.70390995 deg>

なぜこの人たちはこんなに違う答えを出したのですか?

その理由は astropy.coordinates.SkyCoord.separation() フレームワークで測定された間隔。 SkyCoord 相手。だから…。 star.separation(moon) ICRSフレームにおける角度間隔を与えた.これは太陽系の重心から分離しているように見える。地心観測者にとっては moon.separation(star) 正解を出しました moon 地心の枠内に位置しています。

地上天体のAltAz計算

次のコード片はちょうど90度の高さになると思うかもしれません

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

>>> t = Time('J2010')
>>> obj = EarthLocation(-1*u.deg, 52*u.deg, height=10.*u.km)
>>> home = EarthLocation(-1*u.deg, 52*u.deg, height=0.*u.km)
>>> altaz_frame = AltAz(obstime=t, location=home)
>>> obj.get_itrs(t).transform_to(altaz_frame).alt 
<Latitude 86.32878441 deg>

なぜ結果は天頂から3度以上の距離があるのでしょうか?非常によく見てこそ理解できる obj.get_itrs(t) 帰ってきました。この呼び出しはソースのITRSプレースを提供する. obj それがそうです。ITRSは光の収差を含む地心座標系である。したがって,上のコードは直上に直接現れる信号源のITRS位置を提供する. 地球中心の観測者にとっては それがそうです。

収差のため,この光源の実際の位置はその見かけの位置から約20.5角秒ずれてしまう.この震源は地球半径から約1つの地球半径であるため,その実際の位置はその見える位置から約600メートル離れている。地球表面から10キロ離れた一つの物体にとって、この600メートルのシフトは三度以上の角度差である--それがこの物体が頭上の地心観測者の頭上に現れない理由である。

構造.構造 SkyCoord トポロジー中心観測ステーションの上方に直接位置するソースの対象は以下のとおりである.

>>> from astropy.coordinates import EarthLocation, AltAz, ITRS, CIRS
>>> from astropy.time import Time
>>> from astropy import units as u

>>> t = Time('J2010')
>>> obj = EarthLocation(-1*u.deg, 52*u.deg, height=10.*u.km)
>>> home = EarthLocation(-1*u.deg, 52*u.deg, height=0.*u.km)

>>> # Now we make a ITRS vector of a straight overhead object
>>> itrs_vec = obj.get_itrs(t).cartesian - home.get_itrs(t).cartesian

>>> # Now we create a topocentric coordinate with this data
>>> # Any topocentric frame will work, we use CIRS
>>> # Start by transforming the ITRS vector to CIRS
>>> cirs_vec = ITRS(itrs_vec, obstime=t).transform_to(CIRS(obstime=t)).cartesian
>>> # Finally, make CIRS frame object with the correct data
>>> cirs_topo = CIRS(cirs_vec, obstime=t, location=home)

>>> # convert to AltAz
>>> aa = cirs_topo.transform_to(AltAz(obstime=t, location=home))
>>> aa.alt 
<Latitude 90. deg>