プロジェクト

全般

プロフィール

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へアクセス

clipboard-202301150129-fatt4.png


ほぼ2年前に更新