Cesium解决传感器抖动问题

解决问题原理:在基本步长的基础上,为每一段轨道再进行细化(使用拉格朗日插值算法进行计算差值)

// 传入轨道数据,传出positionProperty对象、开始时间、结束时间
import * as Cesium from 'cesium'
import store from '@/store/index'

export default function handleOrbitalMsg(satelliteOrbit: any) {
    const positionProperty = new Cesium.SampledPositionProperty();
    const propertyArr: Array<string> = [];// 存储所有时间,取头尾,计算startTime  stopTime

    for(const i of satelliteOrbit) {
        propertyArr.push(i.time);
        const time = Cesium.JulianDate.fromIso8601(i.time);
        const position = Cesium.Cartesian3.fromDegrees(i.lon, i.lat, i.alt);
        positionProperty.addSample(time, position);
    }

    // 计算差值,解决传感器抖动问题(设置插入位置时要使用的算法和度数)
    positionProperty.setInterpolationOptions({
        interpolationDegree: 5, // 新的差值度
        interpolationAlgorithm: // 新的插值算法
            Cesium.LagrangePolynomialApproximation, // 拉格朗日差值算法
    });

    const start = Cesium.JulianDate.fromIso8601(propertyArr[0]);
    const stop = Cesium.JulianDate.fromIso8601(propertyArr[propertyArr.length - 1]);

    store.commit('setTimelineStart', propertyArr[0]);
    store.commit('setTimelineStop', propertyArr[propertyArr.length - 1]);

    // 计算start  stop的时间差
    const timeDifference = Cesium.JulianDate.secondsDifference(stop, start);
    store.commit('setTimeDifference', timeDifference);

    return {
        positionProperty,
        start,
        stop
    }
}
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐