Newer
Older
cockpit_hxrq_front / src / components / Map / components / manageStationLayer.vue
<!--
 * @Description: 管理处图层
 * @Author: 王晓颖
 * @Date: 2021-06-03 11:07:09
 -->
<template>
  <div>
    <slot/>
  </div>
</template>

<script>
import commonMixin from '../base/mixins/common.js'
import axios from 'axios'
export default {
  name: 'ManageStationLayer',
  mixins: [commonMixin('layer')],
  props: {
    size: {
      type: String,
      default: ''
    }, // 大小
    scale: {
      type: Number,
      default: 5
    }, // 图片缩放倍数
    height: {
      type: Number,
      default: 0
    }, // 高度
    offset: {
      type: Number,
      default: -15
    }, // 偏移值
    show: {
      type: Boolean,
      default: false
    } // 是否可见
  },
  data() {
    return {
      layer: null, // 图层
      data: [] // 完整数据
    }
  },
  watch: {
    show(val) {
      console.log('watch show: ' + val)
      if (val) {
        this.initLayer()
      } else {
        this.removeLayer()
      }
    }
  },
  methods: {
    load() {
      console.log('load')
    },
    initLayer() {
      const { mars3d, map } = this
      if (map) {
        if (this.show) {
          if (this.layer) {
            this.removeLayer()
          }
        }
        const graphicLayer = new mars3d.layer.GraphicLayer()
        this.layer = graphicLayer
        map.addLayer(graphicLayer)
        this.loadData()
      }
    },
    loadData() {
      const { mars3d, layer } = this
      axios.get('static/config/manageStation.json').then((res) => {
        res = res.data
        if (res.code === 200) {
          this.data = res.data
          for (const station of this.data) {
            const graphic = new mars3d.graphic.ModelEntity({
              name: station.name,
              position: [station.x, station.y, 0],
              style: {
                // label: {
                //   text: station.name,
                //   font_family: '微软雅黑',
                //   font_size: 15,
                //   pixelOffsetY: 10
                // },
                url: 'static/gltf/output/guanlizhan.gltf',
                scale: 5,
                heading: 90,
                minimumPixelSize: 30
              },
              tooltip: station.name
            })
            layer.addGraphic(graphic)
          }
        }
      })
    },
    // 移除图层
    removeLayer() {
      const { map, layer } = this
      if (this.layer) {
        map.removeLayer(layer)
        this.layer = null
      }
    }
  }
}
</script>

<style rel="stylesheet/scss" lang="scss" scoped>

</style>