Vue.js2+Cesium1.103.0 十六、多模型轨迹运动

Vue.js2+Cesium1.103.0 十六、多模型轨迹运动

Demo

<template>
  <div id="cesium-container" style="width: 100%; height: 100%;">
    <ul class="ul">
      <li v-for="(item, index) of deviceInfo" :key="index" class="li" :class="{ active: lock === item.id }"
        @click="handleClick(item)">
        {{ `飞机${item.id}` }}</li>
    </ul>
  </div>
</template>

<script>
/* eslint-disable no-undef */
/* eslint-disable new-cap */
import DrawDeviceUtil from '@/utils/DrawDevice.js'
const mock = require('./mock.json')
const mock2 = require('./mock2.json')
const mock3 = require('./mock3.json')
const mock4 = require('./mock4.json')
const mock5 = require('./mock5.json')
export default {
  name: 'FlightAnimation',
  data () {
    return {
      lock: '',
      deviceInfo: [
        {
          id: 1,
          uri: 'model/Cesium_Air.glb',
          scale: 1,
          position: {
            longitude: mock[0].longitude,
            latitude: mock[0].latitude,
            altitude: mock[0].altitude
          }
        },
        {
          id: 2,
          uri: 'model/Cesium_Air.glb',
          scale: 0.9,
          position: {
            longitude: mock2[mock2.length - 1].longitude,
            latitude: mock2[mock2.length - 1].latitude,
            altitude: mock2[mock2.length - 1].altitude
          }
        },
        {
          id: 3,
          uri: 'model/Cesium_Air.glb',
          scale: 0.8,
          position: {
            longitude: mock3[mock3.length - 1].longitude,
            latitude: mock3[mock3.length - 1].latitude,
            altitude: mock3[mock3.length - 1].altitude
          }
        },
        {
          id: 4,
          uri: 'model/Cesium_Air.glb',
          scale: 1,
          position: {
            longitude: mock4[mock4.length - 1].longitude,
            latitude: mock4[mock4.length - 1].latitude,
            altitude: mock4[mock4.length - 1].altitude
          }
        },
        {
          id: 5,
          uri: 'model/Cesium_Air.glb',
          scale: 1,
          position: {
            longitude: mock5[mock5.length - 1].longitude,
            latitude: mock5[mock5.length - 1].latitude,
            altitude: mock5[mock5.length - 1].altitude
          }
        }
      ],
      $DrawDeviceUtil: null
    }
  },
  computed: {},
  watch: {},
  mounted () {
    // return
    window.$InitMap()
    viewer.camera.flyTo({
      destination: Cesium.Rectangle.fromDegrees(100, 10, 120, 70)
    })

    this.$DrawDeviceUtil = new DrawDeviceUtil()
    // * 添加设备
    this.$DrawDeviceUtil.AddDevices(this.deviceInfo)

    // * 模拟 ws 上报实时位置信息
    let count = 0
    setInterval(() => {
      count += 1
      const position = mock[count]
      const position2 = mock2[count]
      const position3 = mock3[count]
      const position4 = mock4[count]
      const position5 = mock5[count]
      // * 更新位置
      this.$DrawDeviceUtil.UpdatePosition(1, position)
      this.$DrawDeviceUtil.UpdatePosition(2, position2)
      this.$DrawDeviceUtil.UpdatePosition(3, position3)
      this.$DrawDeviceUtil.UpdatePosition(4, position4)
      this.$DrawDeviceUtil.UpdatePosition(5, position5)
    }, 300)

    // 鼠标事件
    const handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas)
    handler.setInputAction(function (event) { },
      Cesium.ScreenSpaceEventType.LEFT_CLICK)
  },
  methods: {
    handleClick (data) {
      this.lock = this.lock === data.id ? '' : data.id
      if (this.lock) {
        this.$DrawDeviceUtil.LockEntity(this.lock)
      } else {
        this.$DrawDeviceUtil.UnLockEntity()
      }
    }
  }
}
</script>
<style lang="scss" scoped>
.ul {
  position: absolute;
  right: 50px;
  top: 50px;
  z-index: 999;
  color: #fff;

  .li {
    cursor: pointer;

    &.active {
      color: red;
    }
  }
}
</style>
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值