cesium中实现entity动画

时间轴设置

//时间轴设置
viewer.clock.startTime = Cesium.JulianDate.fromDate (new Date("2020-2-1 00:00:00"));//开始时间new Date("2020-2-1 00:00:00")(可以是时间戳)
viewer.clock.stopTime = Cesium.JulianDate.fromDate (new Date("2020-2-2 00:00:00"));//结束时间new Date("2020-2-1 00:00:00")(可以是时间戳)
viewer.clock.currentTime = Cesium.JulianDate.fromDate (new Date("2020-2-1 00:00:00"));//当前时间
viewer.clock.clockRange = Cesium.ClockRange.LOOP_STOP; //到末尾时间再次循环
viewer.clock.multiplier = 10;//乘数(值越大,时间轴速度越快)

动画实体创建

//动画实体创建
function _createEntity(property, start, stop) {
  return viewer.entities.add({
    availability: new Cesium.TimeIntervalCollection([
      new Cesium.TimeInterval({
        start: start,//动画实体开始时间 Cesium.JulianDate.fromDate( new Date("2020-2-1 00:00:00"));
        stop: stop,//动画实体结束时间 Cesium.JulianDate.fromDate( new Date("2020-2-2 00:00:00"));
      }),
    ]),
    position:property,
    orientation: new Cesium.VelocityOrientationProperty(property),//根据位置移动自动计算方向。
    show:false,
    billboard:{
      image:'../images/icon.png',
      width:20,
      height:20
    }
  });
}

创建时间节点样本

//创建时间节点样本(单个时间节点添加)
function _createSampleMove(Cartesian3,timeObj){
  let time = Cesium.JulianDate.fromDate(new Date(timeObj));
  let property = new Cesium.SampledPositionProperty();
  property.addSample(time,Cartesian3);//某个时刻对应的坐标
  return property;

}
//创建时间节点样本(多个个时间节点添加)
function _createSampleMoveS(Cartesian3s,timeObjs){
  let times = timeObjs.map(t => Cesium.JulianDate.fromDate(new Date(t)));
  let property = new Cesium.SampledPositionProperty();
  property.addSamples(times,Cartesian3s);//某组时刻对应的某组坐标
  return property;
}

删除时间节点样本

//删除时间节点样本 (单个删除)
function _clearSampleMove(property,timeObj){
  let time = Cesium.JulianDate.fromDate(new Date(timeObj));
  property.removeSample(time);
}
//删除时间节点样本(多个删除)
function _clearSampleMoves(property,startTime,endTime){
  let time = {
    start:Cesium.JulianDate.fromDate(new Date(startTime)),
    stop:Cesium.JulianDate.fromDate(new Date(endTime)),
    isStartIncluded:true,//是否包含开始时间
    isStopIncluded:true//是否包含结束时间
  };
  property.removeSamples(time);
}

更新时间节点样本

其实所谓的更新就是删除掉在添加

//更新时间节点样本(单个更新)
function _updateOperate(property,Cartesian3,timeObj){
  let time = Cesium.JulianDate.fromDate(new Date(timeObj));
  property.addSample(time,Cartesian3);

}
//更新时间节点样本(多个更新)
function _updateOperates(property,Cartesian3s,timeObjs){
  let times = timeObjs.map(t => Cesium.JulianDate.fromDate(new Date(t)));
  property.addSamples(times,Cartesian3s);
}

开启时间轴监听

//开启时间轴监听
function _eventMoveListener(){
  //此监听返回一个函数,执行监听自动关闭
  let _eventListener = viewer.scene.preUpdate.addEventListener(function(){
    let time = viewer.clock.currentTime;
    let position = moveEntity.position.getValue(time);//获取当前时刻的坐标
    //moveEntity.availablility.get(0).start;//获取动画实体本身的开始时间
    //moveEntity.availablility.get(0).stop;//获取动画实体本身的结束时间

  })
}

cesium中关于时间转换,和比较的方法在这里

猜你喜欢

转载自blog.csdn.net/weixin_49666910/article/details/113501257