CesiumJS orbit¶
はじめに¶
Cesium JSを使って衛星軌道を表示します。
実装方針¶
- CZMLで記述した衛星軌道を表示
- Cesium JSを制御するJavaScriptコードでTLEからCZMLを生成する方法
- あらかじめ別ツールでTLEからCZMLを生成し、CZMLをCesium JSで表示する方法
実装1 あらかじめ生成したCZMLを表示¶
TLEからCZMLの生成¶
Pythonライブラリ tle2czml を使ってCZMLを生成します。
このライブラリは、TLEからSPG4で予定位置を計算します。
python仮想環境にtle2czmlをインストール¶
work % mkdir toCzml work % cd toCzml toCzml % python3 -m venv venv toCzml % source venv/bin/activate (venv) toCzml % pip install tle2czml : (venv) toCzml %
依存ライブラリの非互換性エラー¶
tle2czmlが依存するpygeoifパッケージが、2022年9月にリリースされた1.0.0で非互換な変更(rename as_shape to shape)が入ってしまい、エラーとなります。
ImportError: cannot import name 'as_shape' from 'pygeoif.geometry'
pygeoifパッケージを0.7にダウングレードします。
(venv) site-packages % pip list Package Version ----------------- -------- pip 22.2.2 pygeoif 1.0.0 python-dateutil 2.8.2 pytz 2022.7.1 setuptools 65.4.1 sgp4 2.21 six 1.16.0 tle2czml 0.3 typing_extensions 4.4.0 wheel 0.38.4
(venv) toCzml % pip install pygeoif==0.7
(venv) toCzml % pip list Package Version ----------------- -------- pip 22.2.2 pygeoif 0.7 python-dateutil 2.8.2 pytz 2022.7.1 setuptools 65.4.1 sgp4 2.21 six 1.16.0 tle2czml 0.3 typing_extensions 4.4.0 wheel 0.38.4
衛星軌道情報TLEの取得¶
celestrak等から軌道を表示する衛星のTLE情報を取得します。
ISS [Segment 01] 1 25544C 98067A 23011.50000000 .00037773 00000+0 65778-3 0 18 2 25544 51.6415 24.6706 0004562 255.1220 91.8444 15.50093719 14
これを、ファイル(例:tle.txt)に保存します。
tle.txtを読み込み時間範囲を指定してorbit.czmlを生成¶
tleを読み込み、軌道生成の開始時刻、終了時刻を指定し、CZMLファイルを生成する Pythonコードを記述します。
import tle2czml
from datetime import datetime, timezone
start_time = datetime(2023, 1, 14, 15, 0, tzinfo=timezone.utc)
end_time = datetime(2023, 1, 14, 19, 0, tzinfo=timezone.utc)
tle2czml.create_czml("tle.txt", start_time=start_time, end_time=end_time)
- tle2czmlパッケージとdatetimeパッケージをインポート
- 軌道生成の開始時刻と終了時刻を定義
- TLEが記述されたファイルと開始・終了時刻をパラメータとしてcreate_czmlを実行
CZMLをCesium JSで表示¶
Cesium JSでCZMLファイルを読み込み地球を表示します。
Cesium JSのプログラム作成¶
作業ディレクトリを作成し、Cesium JSライブラリをインストールします。
work % mkdir CzmlOrbit work % cd CzmlOrbit CzmlOrbit % npm install cesium CzmlOrbit %
HTMLファイル(index.html)とJavaScriptファイル(main.js)を作成します。
index.html¶
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello Czml</title>
<script src="node_modules/cesium/Build/Cesium/Cesium.js"></script>
<link rel="stylesheet" href="node_modules/cesium/Build/Cesium/Widgets/widgets.css">
</head>
<body>
<div id="cesiumContainer"></div>
<script src="main.js"></script>
</body>
</html>
main.js¶
var viewer = new Cesium.Viewer("cesiumContainer");
viewer.scene.globe.enableLighting = true;
viewer.dataSources.add(Cesium.CzmlDataSource.load("orbit.czml"));
ローカルのhttp-serverを実行¶
TLEから変換して生成したCZMLファイルをコピーします。
CzmlOrbit % cp ../toCzml/orbit.czml . CzmlOrbit %
http-serverを起動します。
CzmlOrbit % http-server : Available on: http://127.0.0.1:8080 :
Webサーバーで localhost:8080へアクセス¶