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>