1、TLE数据(Two Line Elements)
tle数据是描述卫星轨道的一种标准格式,由两行数字组成,格式如下
QIXIANG-001
1 44940U 20001AC 23289.39944927 .00024096 00000+0 16308-2 0 9995
2 44940 53.0532 295.9515 0001371 97.1775 262.9370 15.06404965208194
废话不多说,下面直接上代码
2、使用Orekit计算轨道六根数
1、引入orekitjar包
在orkit官网Download下载对应版本的jar包,我下载的是最新版12.0.1,下载后将orekit-12.0.1.jar引入到项目中
2、引入Hipparchus依赖包,hipparchus可以通过maven依赖引入,一定要引入3.0以上版本,否则会报一个找不到类的错误
happarchus介绍参见官网About | Hipparchus
<dependency>
<groupId>org.hipparchus</groupId>
<artifactId>hipparchus-fitting</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>org.hipparchus</groupId>
<artifactId>hipparchus-clustering</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>org.hipparchus</groupId>
<artifactId>hipparchus-fft</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>org.hipparchus</groupId>
<artifactId>hipparchus-filtering</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>org.hipparchus</groupId>
<artifactId>hipparchus-geometry</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>org.hipparchus</groupId>
<artifactId>hipparchus-ode</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>org.hipparchus</groupId>
<artifactId>hipparchus-optim</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>org.hipparchus</groupId>
<artifactId>hipparchus-stat</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>org.hipparchus</groupId>
<artifactId>hipparchus-migration</artifactId>
<version>3.0</version>
</dependency>
3、计算轨道六根数
public void calculateOrbitElement(String tle){
File orekitData = new File("D:\\orekit-data");
DataProvidersManager manager = DataContext.getDefault().getDataProvidersManager();
manager.addProvider(new DirectoryCrawler(orekitData)); // 存放orekitdata路径
String[] params = tle.split("\n");
String line1= params[1];
String line2= params[2];
TLE tleObj = new TLE(line1,line2);
TLEPropagator tlePropagator= TLEPropagator.selectExtrapolator(tleObj);
Orbit cartesianOrbit = tlePropagator.getInitialState().getOrbit(); // 笛卡尔轨道
KeplerianOrbit keplerianOrbit = new KeplerianOrbit(cartesianOrbit); // 转换为开普勒轨道
System.out.println("半长轴:"+keplerianOrbit.getA());
System.out.println("离心率:"+keplerianOrbit.getE());
System.out.println("轨道倾角:"+keplerianOrbit.getI());
System.out.println("升交点赤经:"+Math.toDegrees(keplerianOrbit.getRightAscensionOfAscendingNode())); // 弧度转化为度
System.out.println("近地点幅角:"+Math.toDegrees(keplerianOrbit.getPerigeeArgument()));
System.out.println("真近点角"+keplerianOrbit.getTrueAnomaly());
}
orikit-data文件下载地址:https://gitlab.orekit.org/orekit/orekit-data/-/archive/master/orekit-data-master.zip
运行结果:
半长轴:6931700.6419055825
离心率:0.0012640703558907736
轨道倾角:0.9262838362266536
升交点赤经:-64.04849998651345
近地点幅角:52.248882667192056
真近点角-0.9119147488086196
真近点角范围是(0,2Π),这里计算出来为负是因为这里计算的范围是(-Π,Π),可以通过数学转换来实现