使用TLE(双行)根数计算出轨道数据以供Cesium使用

使用TLE(双行)根数计算出轨道数据以供Cesium使用

资源:

satellite.js:https://download.csdn.net/download/qq_41176306/19360956

核心代码:

import indexUmd from '../cesium/satellite.min.js';

const {
    propagate,
    twoline2satrec,
    gstime,
    eciToEcf,
} = indexUmd;

//  使用
const SampledPosition = this.getTlePositionData(tle.line1, tle.line2, this.viewer.clock.startTime, this.viewer.clock.stopTime, 1);

/**
 * 使用Satellite.js处理tle数据返回轨道信息
 * @param tle1 第一根tle
 * @param tle2 第二根tle
 * @param startTime 场景开始时间
 * @param stopTime 场景结束时间
 * @param step 步长
 * @returns SampledPosition对象
 */
getTlePositionData(tle1, tle2, startTime, stopTime, step = 10) {
    const SampledPosition = new Cesium.SampledPositionProperty();
    const start = new Date(startTime);
    const stop = new Date(stopTime);
    if (!tle1 || !tle2) return;
    const satrec = twoline2satrec(tle1, tle2);
    start.setTime(start.getTime() + step * 1000 * 0);
    let gmst = gstime(start);

    // eslint-disable-next-line @typescript-eslint/ban-ts-comment
    // @ts-ignore
    for (let i = 0; i < stop - start; i++) {
        start.setTime(start.getTime() + step * 1000 * i);
		gmst = gstime(start);
        const position = this._read(satrec, start, gmst);
        SampledPosition.addSample(Cesium.JulianDate.fromDate(start), position);
    }
    this._setInterpolation(SampledPosition);
    return SampledPosition;
}

_read(satrec, data, gmst) {
    const positionAndVelocity = propagate(satrec, data);
    const positionEci = positionAndVelocity.position;
    if (!positionEci) {
        console.error("获取位置错误")
        return;
    }

    const { x, y, z } = eciToEcf(positionEci, gmst);
    const position = Cesium.Cartesian3.fromElements(
        x * 1000,
        y * 1000,
        z * 1000
    );
    return position;
}

/**
 *插值算法:拉格朗日插值
 */
_setInterpolation(position) {
    const interpolationOptions = {
        interpolationDegree: 2,
        interpolationAlgorithm: Cesium.LagrangePolynomialApproximation
    };
    position.setInterpolationOptions(interpolationOptions);
}
  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值