よくある間違い¶
以下に使用時によく見られる困難な源を示す. 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>