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
}
}