开局一张图,如图实现船舶的运动轨迹回放
原理
基于Entity的availability属性和postion属性。
其中availability可以设置时间轴,position中定义了Entity的位置和时间信息。
时间轴类似于一个触发器,当在某个时间,模型就移动到某个地方,因为是一个序列,模型不会跳跃,而是会计算一个均速移动过去。
实现
想要实现轨迹回放,我们需要一组轨迹坐标组、一个定义好时间点状态的Property,以及船舶图片(也可以使用model代替)。
拿到轨迹坐标组后,通过计算获取节点的距离,时间,生成完整可用的Property作为我们Entity的position属性。一般拿到的坐标点数据是经纬度坐标,需要转换为笛卡尔坐标。
构建Property和时间轴。定义开始时间结束时间并给到viewer的clock实例上代表时间段。
const startTime = new Date(dayjs(trackList[0].dynamicTime).valueOf())
const endTime = new Date(dayjs(maxTime).valueOf())
const start = Cesium.JulianDate.fromDate(startTime)
const stop = Cesium.JulianDate.fromDate(endTime)
const positionProperty = new Cesium.SampledPositionProperty()
positionProperty.setInterpolationOptions({
interpolationDegree: 1,
interpolationAlgorithm: Cesium.LagrangePolynomialApproximation
})
for (let i = 0; i < trackList.length; i++) {
const { longi