Cesium提供了Clock,可以对任意时间段内的球进行设置。同时,提供timeline,用于进行对目标时间段内的场景进行回放。
为了更好的利用Clock,Cesium还提供了其它类型,这些类型可以支持设置指定JulianDate时间点上做特定的事情。
例如:SamplePositionProperty,根据官方文档释义,是SampleProperty和PositionProperty的结合。而SampleProperty,更是与JulianDate分不开:A Property whose value is interpolated for a given time from the provided set of samples and specified interpolation algorithm and degree.
PositionProperty更容易理解,支持笛卡尔坐标系(Cartesian3)。
我实现实施轨迹的思路,就是利用SamplePositionProperty与Clock和TimeLine。
已知条件:1.历史轨迹线
2.每一段的行驶速度(或每一个节点的经过时间)
实现思路:将每一个节点的位置与时间添加至SamplePositionProperty中
const property = new Cesium.SampledPositionProperty();
for (let i = 1; i < this.stops.length; i++) {
property.addSample(this.stops[i].time,this.stops[i].position)
}
显示方案:将SamplePositionProperty作为Entity的Position添加至Scene中:
this.planeRouteEntity = this.viewer.viewer.entities.add({
//与时间轴关联
availability:new Cesium.TimeIntervalCollection([new Cesium.TimeInterval({
start:{起始时间},
stop: {截止时间}
})]),
position:this.planeSampleProperty,
//根据速度计算点
orientation: new Cesium.VelocityOrientationProperty(this.planeSampleProperty),
// model:{
// show:new Cesium.CallbackProperty(()=>{return this.isThirdPersonal || this.viewFollowBack},false) ,
// uri: GlobalConfig.PlaneGLTFServer,
// scale: 1,
// minimumPixelSize: 128,
// },
//轨迹路径线
path:{
show: new Cesium.CallbackProperty(()=>{return this.isThirdPersonal},false) ,
leadTime: 0,
trailTime: Number.POSITIVE_INFINITY,
width: 5,
resolution: 1,
material: new Cesium.PolylineGlowMaterialProperty({
glowPower: 0.3,
color: Cesium.Color.fromBytes(0,255,255),
})
}
})