Astropy座標を用いて地球衛星と連携する

衛星データは通常、2線要素(TLE)フォーマットで提供される(参照 here 定義に用いる).これらのデータセットは,軌道伝播理論モデルと組み合わせて衛星の位置を予測するように設計されている.

これらのモデルの歴史について詳しく検討した。 Vallado et al (2006) WHOはまた、SGP 4軌道伝播コードの参考実装を提供し、米国国防総省が提供するTLEセットと互換性を目指し、これらのTLEセットは以下のソースから得ることができる。 Celestrak それがそうです。

SGP 4モデルの出力座標フレームはTrue Equator,Mean Equinox Frame(TEME)であり,内蔵されたフレームの1つである. astropy.coordinates. TEME is an Earth-centered inertial frame (i.e., it does not rotate with respect to the stars). Several definitions exist; astropy uses the implementation described in Vallado et al (2006) それがそうです。

TLEデータからTeme座標を探す

今のところ支持していない astropy.coordinates for computing satellite orbits from TLE orbital element sets. Full support for handling TLE files is available in the Skyfield ライブラリ中の衛星データですが、衛星データをどのように処理するかについてもいくつか提案されています。 astropy 下にあります。

TLE軌道要素から衛星の位置と速度を計算するために外部ライブラリが必要です。♪the SGP4 図書館はそれができます。このライブラリを使って調べます TEME 衛星の座標は

>>> from sgp4.api import Satrec
>>> from sgp4.api import SGP4_ERRORS
>>> s = '1 25544U 98067A   19343.69339541  .00001764  00000-0  38792-4 0  9991'
>>> t = '2 25544  51.6439 211.2001 0007417  17.6667  85.6398 15.50103472202482'
>>> satellite = Satrec.twoline2rv(s, t)

♪the satellite 対象には方法があります satellite.sgp4 これは、所与の時間のTeme位置および速度を計算しようと試みる。

>>> from astropy.time import Time
>>> t = Time(2458827.362605, format='jd')
>>> error_code, teme_p, teme_v = satellite.sgp4(t.jd1, t.jd2)  # in km and km/s
>>> if error_code != 0:
...     raise RuntimeError(SGP4_ERRORS[error_code])

今では毎秒千メートルと千メートル単位の位置と速度があります TEME 参照座標系:

>>> from astropy.coordinates import TEME, CartesianDifferential, CartesianRepresentation
>>> from astropy import units as u
>>> teme_p = CartesianRepresentation(teme_p*u.km)
>>> teme_v = CartesianDifferential(teme_v*u.km/u.s)
>>> teme = TEME(teme_p.with_differentials(teme_v), obstime=t)

どのように慎重に設定しているかに注意してください TEME フレームは衛星位置の時間を計算するように設定されている。

Temeを他の座標系に変換する

衛星の位置があれば TEME 座標に変換することができます astropy.coordinates フレームワーク。

例えば、衛星の直上の緯度、経度、高度を検索するには、以下の操作を実行してください。

>>> from astropy.coordinates import ITRS
>>> itrs = teme.transform_to(ITRS(obstime=t))  
>>> location = itrs.earth_location
>>> location.geodetic  
GeodeticLocation(lon=<Longitude 160.34199789 deg>, lat=<Latitude -24.6609379 deg>, height=<Quantity 420.17927591 km>)

あるいは、特定の位置から衛星の高さと方位を見つけたい場合:

>>> from astropy.coordinates import EarthLocation, AltAz
>>> siding_spring = EarthLocation.of_site('aao')  
>>> aa = teme.transform_to(AltAz(obstime=t, location=siding_spring))  
>>> aa.alt  
<Latitude 10.95229446 deg>
>>> aa.az  
<Longitude 59.30081255 deg>