首页 / 浏览问题 / 三维GIS / 问题详情
多个entities运动,到终点消失
25EXP 2022年09月02日
 getPoints() {
      let data = [];
      data[0] = [
        { longitude: 116.405419, dimension: 39.918034, height: 0, time: 0 },
        { longitude: 116.2821, dimension: 39.918145, height: 0, time: 40 },
        {
          longitude: 115.497402,
          dimension: 39.344641,
          height: 70000,
          time: 100,
        },
        {
          longitude: 107.942392,
          dimension: 29.559967,
          height: 70000,
          time: 280,
        },
        {
          longitude: 106.549265,
          dimension: 29.559967,
          height: 70000,
          time: 360,
        },
      ];
      data[1] = [
        { longitude: 116.405419, dimension: 39.918034, height: 0, time: 0 },
        { longitude: 117.034586, dimension: 39.881202, height: 0, time: 40 },
        {
          longitude: 116.340088,
          dimension: 38.842224,
          height: 70000,
          time: 100,
        },
        {
          longitude: 113.489176,
          dimension: 23.464017,
          height: 70000,
          time: 280,
        },
        { longitude: 113.262084, dimension: 23.13901, height: 0, time: 360 },
        { longitude: 110.262084, dimension: 23.13700, height: 0, time: 500 },
      ];
   // 起始时间
      let start = Cesium.JulianDate.fromDate(new Date());
      start = Cesium.JulianDate.addHours(start, 8, new Cesium.JulianDate());
      // 结束时间
      let stop1 = Cesium.JulianDate.addSeconds(
        start,
        360,
        new Cesium.JulianDate()
      );
      let stop2 = Cesium.JulianDate.addSeconds(
        start,
        500,
        new Cesium.JulianDate()
      );

      move(start, stop1, data[0]);
      move(start, stop2, data[1]);

      function move(start, stop, data) {
        viewer.clock.startTime = start.clone();
        viewer.clock.currentTime = start.clone();
        viewer.clock.stopTime = stop.clone();
        viewer.clock.multiplier = 20;
        viewer.timeline.zoomTo(start, stop);
        viewer.clock.clockRange = 1;
        let property = computeFlight(data);
        // // 添加模型
        viewer.entities.add({
          availability: new Cesium.TimeIntervalCollection([
            new Cesium.TimeInterval({
              start: start,
              stop: stop,
            }),
          ]),
          position: property,
          orientation: new Cesium.VelocityOrientationProperty(property),
          // 模型数据
          billboard: {
            image: require("../assets/image/mainSizer/standard.png"),
            width: 63,
            height: 63,
          },
        });
      }

      /**
       * 计算飞行
       * @param source 数据坐标
       * @returns {SampledPositionProperty|*}
       */
      function computeFlight(source) {
        // 取样位置 相当于一个集合
        let property = new Cesium.SampledPositionProperty();
        for (let i = 0; i < source.length; i++) {
          let time = Cesium.JulianDate.addSeconds(
            start,
            source[i].time,
            new Cesium.JulianDate()
          );
          let position = Cesium.Cartesian3.fromDegrees(
            source[i].longitude,
            source[i].dimension,
            source[i].height
          );
          // 添加位置,和时间对应
          property.addSample(time, position);
        }
        return property;
      }
    },

以上是demo,场景是两个或多个模型同时出发,给不同的停止时间,先停下来的会消失,最后一个停下的就在原地。

怎么解决消失的问题,或者我想在运动结束时重新添加模型,怎样监听运动结束

1个回答

您好,

EntityCollection 作为实体集合,可以对其中的entity对象进行删除。消失的话可以使用此方法。

监听同理,您可以设置,当该实体集合中有实体被删除时,进行判断作为监听
4,151EXP 2022年09月05日
”当该实体集合中有实体被删除时,进行判断作为监听“

麻烦给出一个代码实例

实体集合是有监控的,直接使用即可。

可是实体运动停止时消失并不是被删除了 我想监听实体运动停止的事件 再重新添加实体 或者实体运动停止时消失的原因可以帮忙分析一下吗
并且是因为多个实体的设置不同的运动停止时间addSeconds才消失 如果设置相同的停止时间就不会消失
我就是照着他这个写的。。你可以看他底下的评论,都有这个问题”飞行结束后模型消失“
那根据您的写法来看,您这边的话尝试根据时间轴来设定实体重新添加。

该实体在某时间点到终点位置,该时间点在终点位置添加一个实体对象。

做成时间监控应该是可以的。
...