linwe
2025-10-16 e594a0505a005de3deb4fb8fe17383639eed80f7
经开分局影像
2 files modified
3230 ■■■■ changed files
src/components/map/index.vue 3174 ●●●● patch | view | raw | blame | history
src/views/layout/index.vue 56 ●●●● patch | view | raw | blame | history
src/components/map/index.vue
@@ -9,124 +9,123 @@
 * Copyright (c) 2024 by shuishen, All Rights Reserved. 
-->
<template>
    <div class="viewer-box" id="viewer-container" @click="showImgBtn = false">
        <slot ref="mainContent" name="mainContent"></slot>
  <div class="viewer-box" id="viewer-container" @click="showImgBtn = false">
    <slot ref="mainContent" name="mainContent"></slot>
        <slot name="copyrightText"></slot>
    <slot name="copyrightText"></slot>
        <slot name="showButton"></slot>
    <slot name="showButton"></slot>
        <slot name="resetPopup"></slot>
    <slot name="resetPopup"></slot>
        <div class="compass-btn">
            <el-tooltip content="指北针" placement="top" effect="dark">
                <i id="COMPASSBTN" class="el-icon-compass-btn" style="vertical-align: middle; cursor: pointer"
                    :style="{ transform: compassBtnTranslate }" @click="compassBtnClick"></i>
            </el-tooltip>
    <div class="compass-btn">
      <el-tooltip content="指北针" placement="top" effect="dark">
        <i id="COMPASSBTN" class="el-icon-compass-btn" style="vertical-align: middle; cursor: pointer"
          :style="{ transform: compassBtnTranslate }" @click="compassBtnClick"></i>
      </el-tooltip>
    </div>
    <div class="over-look-btn">
      <el-tooltip content="一键俯视" placement="top" effect="dark">
        <i class="fa fa-eye" style="vertical-align: middle; cursor: pointer" @click="overLookClick"></i>
      </el-tooltip>
    </div>
    <!-- 全屏控制按钮 -->
    <div class="screen-full-btn">
      <el-tooltip v-if="!isShowHomeContentBtn && isFullscreen" content="缩放" placement="top" effect="dark">
        <i class="fa fa-compress" style="vertical-align: middle; cursor: pointer" @click="fullscreenchange"></i>
      </el-tooltip>
      <el-tooltip v-if="!isShowHomeContentBtn && !isFullscreen" content="全屏" placement="top" effect="dark">
        <i class="fa fa-expand" style="vertical-align: middle; cursor: pointer" @click="fullscreenchange"></i>
      </el-tooltip>
      <el-tooltip v-if="isShowHomeContentBtn" content="显示/隐藏" placement="top" effect="dark">
        <i class="fa fa-expand" style="vertical-align: middle; cursor: pointer" @click="switchShowHomeContent"></i>
      </el-tooltip>
    </div>
    <!-- 切换矢量图按钮 -->
    <div class="image-switch-icon-btn">
      <el-tooltip content="图层、模型、视角" placement="top" effect="dark">
        <div class="icon-box" @click.stop="showImgBtn = !showImgBtn">
          <img src="/img/base_map.png" alt />
        </div>
      </el-tooltip>
        <div class="over-look-btn">
            <el-tooltip content="一键俯视" placement="top" effect="dark">
                <i class="fa fa-eye" style="vertical-align: middle; cursor: pointer" @click="overLookClick"></i>
            </el-tooltip>
      <div class="image-switch-img-btn" v-show="showImgBtn" @click.stop>
        <div class="layer-change-box">
          <div class="title">
            底图
            <div class="close" @click.stop="showImgBtn = false">
              <img src="/img/icon/close.png" alt />
            </div>
          </div>
          <div class="content">
            <div class="img" @click.stop="switchImg">
              <span :class="{ on: imgtype == 0 }">影像</span>
            </div>
            <div class="elec" @click.stop="switchElec">
              <span :class="{ on: imgtype == 1 }">矢量</span>
            </div>
          </div>
        </div>
        <!-- 全屏控制按钮 -->
        <div class="screen-full-btn">
            <el-tooltip v-if="!isShowHomeContentBtn && isFullscreen" content="缩放" placement="top" effect="dark">
                <i class="fa fa-compress" style="vertical-align: middle; cursor: pointer" @click="fullscreenchange"></i>
            </el-tooltip>
            <el-tooltip v-if="!isShowHomeContentBtn && !isFullscreen" content="全屏" placement="top" effect="dark">
                <i class="fa fa-expand" style="vertical-align: middle; cursor: pointer" @click="fullscreenchange"></i>
            </el-tooltip>
            <el-tooltip v-if="isShowHomeContentBtn" content="显示/隐藏" placement="top" effect="dark">
                <i class="fa fa-expand" style="vertical-align: middle; cursor: pointer"
                    @click="switchShowHomeContent"></i>
            </el-tooltip>
        </div>
        <!-- 切换矢量图按钮 -->
        <div class="image-switch-icon-btn">
            <el-tooltip content="图层、模型、视角" placement="top" effect="dark">
                <div class="icon-box" @click.stop="showImgBtn = !showImgBtn">
                    <img src="/img/base_map.png" alt />
                </div>
            </el-tooltip>
            <div class="image-switch-img-btn" v-show="showImgBtn" @click.stop>
                <div class="layer-change-box">
                    <div class="title">
                        底图
                        <div class="close" @click.stop="showImgBtn = false">
                            <img src="/img/icon/close.png" alt />
                        </div>
                    </div>
                    <div class="content">
                        <div class="img" @click.stop="switchImg">
                            <span :class="{ on: imgtype == 0 }">影像</span>
                        </div>
                        <div class="elec" @click.stop="switchElec">
                            <span :class="{ on: imgtype == 1 }">矢量</span>
                        </div>
                    </div>
                </div>
                <div class="layer-change-box">
                    <div class="title">模型</div>
                    <div class="content">
                        <div class="img light" @click.stop="highOrLightChange('light')">
                            <span :class="{ on: tilesetLayerType == 'light' }">白膜</span>
                        </div>
                        <!-- <div class="elec high" @click.stop="highOrLightChange('high')">
        <div class="layer-change-box">
          <div class="title">模型</div>
          <div class="content">
            <div class="img light" @click.stop="highOrLightChange('light')">
              <span :class="{ on: tilesetLayerType == 'light' }">白膜</span>
            </div>
            <!-- <div class="elec high" @click.stop="highOrLightChange('high')">
              <span :class="{ on: tilesetLayerType == 'high' }">高精</span>
            </div> -->
                    </div>
                </div>
                <div class="angle-btn">
                    是否锁定视角:
                    <el-checkbox v-model="angleCheck" @change="angleChange"></el-checkbox>
                </div>
            </div>
          </div>
        </div>
        <map-popup></map-popup>
        <architecture-popup></architecture-popup>
        <place-base-popup></place-base-popup>
        <activity-police-popup></activity-police-popup>
        <multip-map-popup></multip-map-popup>
        <video-list-popup></video-list-popup>
        <map-search-popup></map-search-popup>
        <house-deep-data-popup></house-deep-data-popup>
        <business-data-popup></business-data-popup>
        <dialog-detail-popup></dialog-detail-popup>
        <hotel-popup></hotel-popup>
        <y-tool-tip></y-tool-tip>
        <assemble-box></assemble-box>
        <video-row-click-popup></video-row-click-popup>
        <div class="angle-btn">
          是否锁定视角:
          <el-checkbox v-model="angleCheck" @change="angleChange"></el-checkbox>
        </div>
      </div>
    </div>
    <map-popup></map-popup>
    <architecture-popup></architecture-popup>
    <place-base-popup></place-base-popup>
    <activity-police-popup></activity-police-popup>
    <multip-map-popup></multip-map-popup>
    <video-list-popup></video-list-popup>
    <map-search-popup></map-search-popup>
    <house-deep-data-popup></house-deep-data-popup>
    <business-data-popup></business-data-popup>
    <dialog-detail-popup></dialog-detail-popup>
    <hotel-popup></hotel-popup>
    <y-tool-tip></y-tool-tip>
    <assemble-box></assemble-box>
    <video-row-click-popup></video-row-click-popup>
  </div>
</template>
<script>
let tile3DUrl = ""
if (process.env.NODE_ENV == "development") {
    // 开发
    tile3DUrl = window.BASE_URL_CONFIG.VUE_APP_OUTER_NET_TILEURL
  // 开发
  tile3DUrl = window.BASE_URL_CONFIG.VUE_APP_OUTER_NET_TILEURL
} else {
    // 部署
    tile3DUrl = window.BASE_URL_CONFIG.VUE_APP_INTRANET_TILEURL
  // 部署
  tile3DUrl = window.BASE_URL_CONFIG.VUE_APP_INTRANET_TILEURL
}
let projectTerrain = null
@@ -134,11 +133,11 @@
var siteEntitylayers = null
let layersObjcect = {
    housingEstateLayer: null,
    patrolWagonLayer: null,
    handMachineLayer: null,
    monitoringLayer: null,
    panoramaLayer: null,
  housingEstateLayer: null,
  patrolWagonLayer: null,
  handMachineLayer: null,
  monitoringLayer: null,
  panoramaLayer: null,
}
let polygonObj = {}
@@ -147,35 +146,35 @@
let baseLayers = []
let tilesetObject = {
    sdTilesetLayer: null,
  sdTilesetLayer: null,
}
let curPolygon = null
const ysLabels = [
    "EPSG:4490_test:0",
    "EPSG:4490_test:1",
    "EPSG:4490_test:2",
    "EPSG:4490_test:3",
    "EPSG:4490_test:4",
    "EPSG:4490_test:5",
    "EPSG:4490_test:6",
    "EPSG:4490_test:7",
    "EPSG:4490_test:8",
    "EPSG:4490_test:9",
    "EPSG:4490_test:10",
    "EPSG:4490_test:11",
    "EPSG:4490_test:12",
    "EPSG:4490_test:13",
    "EPSG:4490_test:14",
    "EPSG:4490_test:15",
    "EPSG:4490_test:16",
    "EPSG:4490_test:17",
    "EPSG:4490_test:18",
    "EPSG:4490_test:19",
    "EPSG:4490_test:20",
    "EPSG:4490_test:21",
    "EPSG:4490_test:22",
  "EPSG:4490_test:0",
  "EPSG:4490_test:1",
  "EPSG:4490_test:2",
  "EPSG:4490_test:3",
  "EPSG:4490_test:4",
  "EPSG:4490_test:5",
  "EPSG:4490_test:6",
  "EPSG:4490_test:7",
  "EPSG:4490_test:8",
  "EPSG:4490_test:9",
  "EPSG:4490_test:10",
  "EPSG:4490_test:11",
  "EPSG:4490_test:12",
  "EPSG:4490_test:13",
  "EPSG:4490_test:14",
  "EPSG:4490_test:15",
  "EPSG:4490_test:16",
  "EPSG:4490_test:17",
  "EPSG:4490_test:18",
  "EPSG:4490_test:19",
  "EPSG:4490_test:20",
  "EPSG:4490_test:21",
  "EPSG:4490_test:22",
]
import mapPopup from "./components/mapPopup.vue"
@@ -196,1514 +195,1521 @@
import { getLineSpeed } from "@/utils/turfPolygon"
export default {
    name: "mapBox",
  name: "mapBox",
    components: {
        mapPopup,
        architecturePopup,
        activityPolicePopup,
        placeBasePopup,
        multipMapPopup,
        videoListPopup,
        mapSearchPopup,
        houseDeepDataPopup,
        hotelPopup,
        businessDataPopup,
        dialogDetailPopup,
        yToolTip,
        videoRowClickPopup,
  components: {
    mapPopup,
    architecturePopup,
    activityPolicePopup,
    placeBasePopup,
    multipMapPopup,
    videoListPopup,
    mapSearchPopup,
    houseDeepDataPopup,
    hotelPopup,
    businessDataPopup,
    dialogDetailPopup,
    yToolTip,
    videoRowClickPopup,
  },
  data () {
    return {
      fullscreen: false,
      isFullscreen: false,
      dialogVisible: false,
      dialogTitle: "",
      searchInput: "",
      loading: false,
      searchDetailsShow: false,
      videoExist: true,
      videoTotal: 0,
      carTotal: 0,
      showImgBtn: false,
      imgtype: 0,
      tilesetLayerType: "",
      angleCheck: true,
      compassBtnTranslate: "rotate(0deg)",
    }
  },
  computed: {
    ...mapGetters(["isShowHomeContentBtn"]),
  },
  mounted () {
    if (global.viewer != null) {
      global.viewer = null
    }
    const that = this
    // 初始化地图
    function initViewer () {
      // new Viewer(new 地图)
      global.viewer = new global.DC.Viewer("viewer-container", {
        contextOptions: {
          webgl: {
            alpha: true,
            stencil: true,
            preserveDrawingBuffer: true,
          },
        },
      })
      global.viewer.scene.postRender.addEventListener(function () {
        var heading = global.viewer.scene.camera.heading
        var x = -global.DC.Namespace.Cesium.Math.toDegrees(heading)
        that.compassBtnTranslate = "rotate(" + x + "deg)"
      })
      const curTools = createTools()
      Object.keys(curTools).forEach((key) => {
        curTools[key].install(global.viewer)
      })
      // let curTilesetLayer = new global.DC.TilesetLayer('curTilesetLayer')
      // global.viewer.addLayer(curTilesetLayer)
      // let curTileset = new global.DC.Tileset(
      //     '/mx/tileset.json'
      // )
      // // curTileset.setHeight(20)
      // curTileset.setHeight(0)
      // curTilesetLayer.addOverlay(curTileset)
      global.viewer.setPitchRange(-90, -45)
      global.viewer.scene.globe.depthTestAgainstTerrain = false
      // 去除logo
      let primitiveArr = global.viewer.scene.primitives._primitives
      global.viewer.scene.primitives.remove(primitiveArr[0])
      // 已声明的图层添加到地图上
      siteEntitylayers = new global.DC.VectorLayer("siteEntitylayers")
      global.viewer.addLayer(siteEntitylayers)
      // 图层加入地图
      layersObjcect.housingEstateLayer = new global.DC.VectorLayer(
        "housingEstateLayer"
      )
      global.viewer.addLayer(layersObjcect.housingEstateLayer)
      layersObjcect.patrolWagonLayer = new global.DC.VectorLayer(
        "patrolWagonLayer"
      )
      global.viewer.addLayer(layersObjcect.patrolWagonLayer)
      layersObjcect.handMachineLayer = new global.DC.VectorLayer(
        "handMachineLayer"
      )
      global.viewer.addLayer(layersObjcect.handMachineLayer)
      layersObjcect.monitoringLayer = new global.DC.VectorLayer(
        "monitoringLayer"
      )
      global.viewer.addLayer(layersObjcect.monitoringLayer)
      layersObjcect.panoramaLayer = new global.DC.VectorLayer("panoramaLayer")
      global.viewer.addLayer(layersObjcect.panoramaLayer)
      // 模型图层添加
      tilesetLayer = new global.DC.TilesetLayer("tilesetLayer")
      global.viewer.addLayer(tilesetLayer)
      // 加载围栏
      // let layer = new global.DC.VectorLayer('layer')
      // global.viewer.addLayer(layer)
      // let wall = new global.DC.Wall(
      //     '116.018142,28.688089,100.0; 116.017756,28.684648,100.0; 116.019507,28.677570,100.0; 116.033653,28.675634,100.0; 116.034223,28.681389,100.0; 116.033483,28.687265,100.0; 116.018142,28.688089,100.0'
      // )
      // wall.setStyle({
      //     material: new global.DC.WallTrailMaterialProperty({
      //         color: global.DC.Namespace.Cesium.Color.fromBytes(
      //             33, 150, 243,
      //             200
      //         ),
      //         speed: 8
      //     })
      // })
      // layer.addOverlay(wall)
      // 判断是否支持图像渲染像素化处理
      if (
        global.DC.Namespace.Cesium.FeatureDetection.supportsImageRenderingPixelated()
      ) {
        global.viewer.setOptions({
          resolutionScale: window.devicePixelRatio,
        })
      }
      // let terrain = global.DC.TerrainFactory.createUrlTerrain({
      //     url: 'http://data.marsgis.cn/terrain'
      // })
      // global.viewer.addTerrain(terrain)
      // 内网
      that.switchImg()
      // that.highOrLightChange('light')
      // 地形数据添加
      // that.addTerrain()
      // 外网
      // global.viewer.imageryLayers.addImageryProvider(
      //   new global.DC.Namespace.Cesium.UrlTemplateImageryProvider({
      //     url: 'http://t{s}.tianditu.gov.cn/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk=d083e4cf30bfc438ef93436c10c2c20a',
      //     subdomains: ['0', '1', '2', '3', '4', '5', '6', '7'],
      //     format: 'image/jpeg',
      //     show: true,
      //     maximumLevel: 18
      //   })
      // )
      // 设置地图初始位置,角度等
      global.viewer.camera.setView({
        // Cesium的坐标是以地心为原点,一向指向南美洲,一向指向亚洲,一向指向北极州
        // fromDegrees()方法,将经纬度和高程转换为世界坐标
        destination: global.DC.Namespace.Cesium.Cartesian3.fromDegrees(
          117.951478782,
          28.447896798,
          20000
        ),
        orientation: {
          // 指向
          heading: global.DC.Namespace.Cesium.Math.toRadians(0, 0),
          // 视角
          pitch: global.DC.Namespace.Cesium.Math.toRadians(-90),
          roll: 0.0,
        },
      })
      let positions = [
        [117.951478782, 28.447896798, 0],
        [117.951469798, 28.447894686, 0],
        [117.951397357, 28.447698099, 0],
        [117.951505114, 28.447674695, 0],
        [117.951485465, 28.447619271, 0],
        [117.951706955, 28.447558541, 0],
        [117.951722755, 28.447611995, 0],
        [117.951834021, 28.447588427, 0],
        [117.951896863, 28.447789523, 0],
        [117.951478782, 28.447896798, 0],
      ]
      let MIN_F_H = positions.map((item) => {
        item[2] = 70
        return item
      })
      let MAN_F_H = positions.map((item) => {
        item[2] = 80
        return item
      })
      // 原生Cesium加载多边体
      // let floorPositions = positions.reduce((prev, curr, index, arr) => {
      //     curr.forEach(item => {
      //         prev.push(item)
      //     })
      //     return prev
      // }, [])
      // flootEntitysEntites.add({
      //     polygon: {
      //         hierarchy: global.DC.Namespace.Cesium.Cartesian3.fromDegreesArrayHeights(floorPositions),
      //         heightReference: global.DC.Namespace.Cesium.HeightReference.RELATIVE_TO_GROUND,
      //         extrudedHeightReference: global.DC.Namespace.Cesium.HeightReference.RELATIVE_TO_GROUND,
      //         height: 70,
      //         extrudedHeight: 80,
      //         material: global.DC.Namespace.Cesium.Color.RED.withAlpha(0.5),
      //     }
      // })
      // console.log(floorPositions)
      // let floorPositions = MIN_F_H.concat(MAN_F_H)
      // let floorPolygonlayer = new global.DC.VectorLayer('floorPolygonlayer')
      // global.viewer.addLayer(floorPolygonlayer)
      // let floorPolygon = new global.DC.Polygon(
      //     floorPositions
      // )
      // floorPolygon.setStyle({
      //     height: 70,
      //     extrudedHeight: 80,
      //     material: global.DC.Color.GREEN.withAlpha(0.5),
      //     heightReference: 2,
      //     perPositionHeight: true
      // })
      // floorPolygonlayer.addOverlay(floorPolygon)
      // global.viewer.flyTo(floorPolygonlayer)
      // global.viewer.flyTo(sqTileset)
      global.viewer.use(new global.DC.Measure())
      // global.viewer.locationBar.enable = true
      // 缩放
      global.viewer.zoomController.enable = true
      // 比例尺
      // global.viewer.distanceLegend.enable = true
      // let arr1 = [[117.9552436, 28.44500025], [117.9557116, 28.44429919], [117.9574856, 28.44444285]]
      // arr1.forEach(item => {
      //     console.log(global.DC.CoordTransform.GCJ02ToWGS84(item[0], item[1]), 2222)
      // })
    }
    global.DC.ready(initViewer)
    // global.viewer.scene.morphTo2D(1)
    // 清除控制台
    console.clear()
    function isEleFullScreen () {
      const fullScreenEle =
        document.fullscreenElement ||
        document.msFullscreenElement ||
        document.mozFullScreenElement ||
        document.webkitFullscreenElement
      if (fullScreenEle === null) {
        that.isFullscreen = false
        return false
      } else {
        return true
      }
    }
    window.onresize = function () {
      console.log(isEleFullScreen())
    }
    // 注册事件
    // 使用示例
    // this.$EventBus.$emit('mapAddLayer', {
    //     layerName: 'housingEstateLayer',
    //     type: 'VectorLayer'
    // })
    this.$EventBus.$on("mapAddLayer", (params) => {
      that.mapAddLayer(params.layerName, params.type)
    })
    this.$EventBus.$on("mapRemoveLayer", (params) => {
      that.mapRemoveLayer(params.layerName, params.type)
    })
    this.$EventBus.$on("mapRemoveSiteLayer", (params) => {
      that.mapRemoveSiteLayer(params.layerName, params.siteId)
    })
    this.$EventBus.$on("mapRemovePolygonLayer", (params) => {
      that.mapRemovePolygonLayer(
        params.layerName,
        params.polygonName,
        params.type
      )
    })
    this.$EventBus.$on("mapRemovePolygon", (params) => {
      that.mapRemovePolygon(params.layerName, params.overlay, params.type)
    })
    this.$EventBus.$on("mapClearLayer", (params) => {
      that.mapClearLayer(params.layerName, params.type)
    })
    this.$EventBus.$on("layerPointAdd", (params) => {
      // eslint-disable-next-line no-unused-vars
      that.layerPointAdd(
        params.layerName,
        params.type,
        params.layerType,
        params.params,
        params.distanceDisplayCondition,
        params.incident,
        params.mouseOverIncident,
        params.mouseOutIncident,
        params.pointMouseMove
      )
    })
    this.$EventBus.$on("layerPolygonAdd", (params) => {
      if ("polygonName" in params) {
        that.layerPolygonAdd(
          params.layerName,
          params.positions,
          params.material,
          params.distanceDisplayCondition,
          params.polygonName,
          params.params,
          params.incident,
          params.mouseOverIncident,
          params.mouseOutIncident,
          params.setStyle
        )
      } else {
        that.layerPolygonAdd(
          params.layerName,
          params.positions,
          params.material,
          params.distanceDisplayCondition,
          "polygon",
          params.params,
          params.incident,
          params.mouseOverIncident,
          params.mouseOutIncident,
          params.setStyle
        )
      }
    })
    this.$EventBus.$on("layerPolygonArrowsAdd", (params) => {
      that.layerPolygonArrowsAdd(
        params.layerName,
        params.positions,
        params.material,
        params.polygonName,
        params.params,
        params.incident,
        params.mouseOverIncident,
        params.mouseOutIncident,
        params.setStyle
      )
    })
    this.$EventBus.$on("layerPolylineAdd", (params) => {
      that.layerPolylineAdd(
        params.layerName,
        params.positions,
        params.material,
        params.width,
        params.params,
        params.incident
      )
    })
    this.$EventBus.$on("layerWallAdd", (params) => {
      that.layerWallAdd(params.layerName, params.positions)
    })
    this.$EventBus.$on("rowLayerWallAdd", (params) => {
      that.rowLayerWallAdd(params.layerName, params.positions)
    })
    this.$EventBus.$on("getOverLayerID", (params) => {
      that.getOverLayerID(params.layerName, params.ids, params.cb)
    })
    this.$EventBus.$on("layerShow", (params) => {
      that.layerShow(params.layerName, params.flag)
    })
    this.$EventBus.$on("toPosition", (params) => {
      that.toPosition(
        params.siteJd,
        params.siteWd,
        params.siteGd,
        params.siteHeading,
        params.sitePitch,
        params.siteRoll,
        params.time
      )
    })
    this.$EventBus.$on("highOrLightChange", (type, status) => {
      // eslint-disable-next-line no-unused-vars
      that.highOrLightChange(type, status)
    })
    this.$EventBus.$on("addMxTileset", (params) => {
      // eslint-disable-next-line no-unused-vars
      that.addMxTileset(params.titlesetName, params.titlesetUrl, params)
    })
    this.$EventBus.$on("closeMxTileset", () => {
      // eslint-disable-next-line no-unused-vars
      that.closeMxTileset()
    })
    this.$EventBus.$on("tilesetLayerFlag", (type, cb) => {
      // eslint-disable-next-line no-unused-vars
      that.tilesetLayerFlag(type, cb)
    })
    this.$EventBus.$on("removeMxTileset", (params) => {
      // eslint-disable-next-line no-unused-vars
      that.removeMxTileset(params.titlesetName)
    })
    this.$EventBus.$on("flytoLayer", (params) => {
      that.flytoLayer(params.polygonName, params.duration)
    })
    this.$EventBus.$on("showThreeDimensions", (params) => {
      that.showThreeDimensions(
        params.positions,
        params.minHeight,
        params.maxHeight
      )
    })
    this.$EventBus.$on("switchThreeDimensions", (params) => {
      that.switchThreeDimensions(params)
    })
    this.$EventBus.$on("clearHouse3D", () => {
      that.clearHouse3D()
    })
    this.$EventBus.$on("registerMxClick", (event) => {
      that.registerMxClick(event)
    })
    this.$EventBus.$on("unbindMxClick", (event) => {
      that.unbindMxClick(event)
    })
    // 重写定位方法
    const homeCenter = [117.99311892441567, 28.46938164123123]
    this.$nextTick(() => {
      // console.log('dc-zoom-controller', document.querySelector('.dc-zoom-controller'))
      // if (document.querySelector('.dc-zoom-controller') == null) return
      // document.querySelector('.dc-zoom-controller').children[1].onclick =
      //     function () {
      //         that.$EventBus.$emit('toPosition', {
      //             siteJd: homeCenter[0] + 0.046,
      //             siteWd: homeCenter[1] - 0.36,
      //             siteGd: 36000,
      //             siteHeading: -3,
      //             sitePitch: -45
      //         })
      //     }
      // document.querySelector('.dc-zoom-controller .refresh svg title').innerHTML = '初始化位置'
    })
  },
  methods: {
    // 获取当前地图中心的经纬度
    getSceneCenterPosition (viewer) {
      let centerResult = viewer.camera.pickEllipsoid(
        new global.DC.Namespace.Cesium.Cartesian2(
          viewer.canvas.clientWidth / 2,
          viewer.canvas.clientHeight / 2
        )
      )
      let curPosition =
        global.DC.Namespace.Cesium.Ellipsoid.WGS84.cartesianToCartographic(
          centerResult
        )
      let curLongitude = (curPosition.longitude * 180) / Math.PI
      let curLatitude = (curPosition.latitude * 180) / Math.PI
      return {
        lon: curLongitude,
        lat: curLatitude,
      }
    },
    compassBtnClick () {
      const degrees = global.viewer.camera.heading * (180 / Math.PI)
      if (degrees == 360) {
        return
      }
      const position = global.DC.Transform.transformCartesianToWGS84(
        global.viewer.camera.position
      )
      global.viewer.camera.flyTo({
        // Cesium的坐标是以地心为原点,一向指向南美洲,一向指向亚洲,一向指向北极州
        // fromDegrees()方法,将经纬度和高程转换为世界坐标
        destination: global.DC.Transform.transformWGS84ToCartesian(
          new global.DC.Position(
            position.lng,
            position.lat,
            position.alt + 1000
          )
        ),
        orientation: {
          // 指向
          heading: global.DC.Namespace.Cesium.Math.toRadians(0, 0),
          // 视角
          pitch: global.viewer.camera.pitch,
          roll: global.viewer.camera.roll,
        },
        duration: 3,
      })
    },
    data () {
        return {
            fullscreen: false,
            isFullscreen: false,
            dialogVisible: false,
            dialogTitle: "",
            searchInput: "",
            loading: false,
            searchDetailsShow: false,
            videoExist: true,
            videoTotal: 0,
            carTotal: 0,
            showImgBtn: false,
            imgtype: 0,
            tilesetLayerType: "",
            angleCheck: true,
            compassBtnTranslate: "rotate(0deg)",
    overLookClick () {
      const degrees = global.viewer.camera.pitch * (180 / Math.PI)
      if (degrees == -90) {
        return
      }
      const position = this.getSceneCenterPosition(global.viewer)
      global.viewer.camera.flyTo({
        // Cesium的坐标是以地心为原点,一向指向南美洲,一向指向亚洲,一向指向北极州
        // fromDegrees()方法,将经纬度和高程转换为世界坐标
        destination: global.DC.Namespace.Cesium.Cartesian3.fromDegrees(
          position.lon,
          position.lat,
          global.viewer.camera.positionCartographic.height * 1.5
        ),
        orientation: {
          // 指向
          heading: global.viewer.camera.heading,
          // 视角
          pitch: global.DC.Namespace.Cesium.Math.toRadians(-90),
          roll: global.viewer.camera.roll,
        },
        duration: 3,
      })
    },
    angleChange (e) {
      if (e) {
        global.viewer.camera.flyTo({
          destination: global.viewer.camera.position,
          orientation: {
            heading: global.viewer.camera.heading,
            pitch: -45,
            roll: global.viewer.camera.roll,
          },
          duration: 0.0,
        })
        global.viewer.setPitchRange(-90, -45)
      } else {
        global.viewer.setPitchRange(-90, 0)
      }
    },
    closeMxTileset () {
      window.TILESET_LABEL.forEach((item) => {
        this.removeMxTileset(`sdTilesetLayer${item.name}`)
      })
      this.tilesetLayerType = ""
    },
    /**
     * @description: 高精度模型和轻量模型切换
     * @param {*} type
     * @return {*}
     */
    highOrLightChange (type, status = "") {
      this.$EventBus.$emit("showHouseingTileset", {
        type: "remove",
      })
      window.TILESET_LABEL.forEach((item) => {
        this.removeMxTileset(`sdTilesetLayer${item.name}`)
      })
      // this.addMxTileset('sdTilesetLayer', `${tile3DUrl}/sf3d/361102/model/wanda/tileset.json`)
      // this.addMxTileset('sdTilesetLayer02', `https://tuan-gis.sit.fengtu.com.cn/361102/wanda/tileset.json`)
      // this.addMxTileset('sdTilesetLayer', `/mx/01/tileset.json`)
      if (this.tilesetLayerType == type && status == "") {
        this.tilesetLayerType = ""
      } else {
        this.tilesetLayerType = type
        type == "light"
          ? window.TILESET_LABEL.forEach((item) => {
            this.addMxTileset(
              `sdTilesetLayer${item.name}`,
              `${tile3DUrl}/sf3d/361102/model/all/${item.name}/tileset.json`,
              item
            )
          })
          : window.TILESET_LABEL.forEach((item) => {
            this.addMxTileset(
              `sdTilesetLayer${item.name}`,
              `${tile3DUrl}/sf3d/361102/model/all1/${item.name}/tileset.json`,
              item
            )
          })
        if (this.$route.path == "/layout/house") {
          this.$EventBus.$emit("showHouseingTileset", {
            type: "add",
          })
        }
      }
    },
    computed: {
        ...mapGetters(["isShowHomeContentBtn"]),
    // 模型的点击事件
    tilesetClick (e) {
      if (this.$route.path != "/layout/house") {
        this.$router.push({
          path: "/layout/house",
          query: { searchName: "xxx小区" },
        })
      }
    },
    mounted () {
        if (global.viewer != null) {
            global.viewer = null
        }
        const that = this
    switchImg () {
      // 天地图 影像
      this.imgtype = 0
      baseLayers.length &&
        baseLayers.forEach((item) => {
          item && global.viewer.imageryLayers.remove(item)
        })
        // 初始化地图
        function initViewer () {
            // new Viewer(new 地图)
            global.viewer = new global.DC.Viewer("viewer-container", {
                contextOptions: {
                    webgl: {
                        alpha: true,
                        stencil: true,
                        preserveDrawingBuffer: true,
                    },
                },
            })
      baseLayers = []
            global.viewer.scene.postRender.addEventListener(function () {
                var heading = global.viewer.scene.camera.heading
                var x = -global.DC.Namespace.Cesium.Math.toDegrees(heading)
                that.compassBtnTranslate = "rotate(" + x + "deg)"
            })
            const curTools = createTools()
      const layer = global.viewer.imageryLayers.addImageryProvider(
        new global.DC.Namespace.Cesium.UrlTemplateImageryProvider({
          url: `http://47.212.32.93:9004/ga/service/map/satellite?z={myZ}&y={y}&x={x}&key=81503dad589f42bf9a9e5ea5e017f329`,
          tilingScheme: new global.DC.Namespace.Cesium.GeographicTilingScheme(),
          tileMatrixLabels: new Array(20).fill(0).map((v, i) => i + 1),
          maximumLevel: 18,
          customTags: {
            myZ: function (imageryProvider, x, y, z) {
            Object.keys(curTools).forEach((key) => {
                curTools[key].install(global.viewer)
            })
            // let curTilesetLayer = new global.DC.TilesetLayer('curTilesetLayer')
            // global.viewer.addLayer(curTilesetLayer)
            // let curTileset = new global.DC.Tileset(
            //     '/mx/tileset.json'
            // )
            // // curTileset.setHeight(20)
            // curTileset.setHeight(0)
            // curTilesetLayer.addOverlay(curTileset)
            global.viewer.setPitchRange(-90, -45)
            global.viewer.scene.globe.depthTestAgainstTerrain = false
            // 去除logo
            let primitiveArr = global.viewer.scene.primitives._primitives
            global.viewer.scene.primitives.remove(primitiveArr[0])
            // 已声明的图层添加到地图上
            siteEntitylayers = new global.DC.VectorLayer("siteEntitylayers")
            global.viewer.addLayer(siteEntitylayers)
            // 图层加入地图
            layersObjcect.housingEstateLayer = new global.DC.VectorLayer(
                "housingEstateLayer"
            )
            global.viewer.addLayer(layersObjcect.housingEstateLayer)
            layersObjcect.patrolWagonLayer = new global.DC.VectorLayer(
                "patrolWagonLayer"
            )
            global.viewer.addLayer(layersObjcect.patrolWagonLayer)
            layersObjcect.handMachineLayer = new global.DC.VectorLayer(
                "handMachineLayer"
            )
            global.viewer.addLayer(layersObjcect.handMachineLayer)
            layersObjcect.monitoringLayer = new global.DC.VectorLayer(
                "monitoringLayer"
            )
            global.viewer.addLayer(layersObjcect.monitoringLayer)
            layersObjcect.panoramaLayer = new global.DC.VectorLayer("panoramaLayer")
            global.viewer.addLayer(layersObjcect.panoramaLayer)
            // 模型图层添加
            tilesetLayer = new global.DC.TilesetLayer("tilesetLayer")
            global.viewer.addLayer(tilesetLayer)
            // 加载围栏
            // let layer = new global.DC.VectorLayer('layer')
            // global.viewer.addLayer(layer)
            // let wall = new global.DC.Wall(
            //     '116.018142,28.688089,100.0; 116.017756,28.684648,100.0; 116.019507,28.677570,100.0; 116.033653,28.675634,100.0; 116.034223,28.681389,100.0; 116.033483,28.687265,100.0; 116.018142,28.688089,100.0'
            // )
            // wall.setStyle({
            //     material: new global.DC.WallTrailMaterialProperty({
            //         color: global.DC.Namespace.Cesium.Color.fromBytes(
            //             33, 150, 243,
            //             200
            //         ),
            //         speed: 8
            //     })
            // })
            // layer.addOverlay(wall)
            // 判断是否支持图像渲染像素化处理
            if (
                global.DC.Namespace.Cesium.FeatureDetection.supportsImageRenderingPixelated()
            ) {
                global.viewer.setOptions({
                    resolutionScale: window.devicePixelRatio,
                })
              return z + 1
            }
          }
        })
      )
            // let terrain = global.DC.TerrainFactory.createUrlTerrain({
            //     url: 'http://data.marsgis.cn/terrain'
            // })
            // global.viewer.addTerrain(terrain)
      layer.contrast = 0.8
            // 内网
            that.switchImg()
            // that.highOrLightChange('light')
      baseLayers.push(layer)
    },
            // 地形数据添加
            // that.addTerrain()
    switchElec () {
      // 天地图 矢量
      this.imgtype = 1
            // 外网
            // global.viewer.imageryLayers.addImageryProvider(
            //   new global.DC.Namespace.Cesium.UrlTemplateImageryProvider({
            //     url: 'http://t{s}.tianditu.gov.cn/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk=d083e4cf30bfc438ef93436c10c2c20a',
            //     subdomains: ['0', '1', '2', '3', '4', '5', '6', '7'],
            //     format: 'image/jpeg',
            //     show: true,
            //     maximumLevel: 18
            //   })
            // )
      baseLayers.length &&
        baseLayers.forEach((item) => {
          item && global.viewer.imageryLayers.remove(item)
        })
            // 设置地图初始位置,角度等
            global.viewer.camera.setView({
                // Cesium的坐标是以地心为原点,一向指向南美洲,一向指向亚洲,一向指向北极州
                // fromDegrees()方法,将经纬度和高程转换为世界坐标
                destination: global.DC.Namespace.Cesium.Cartesian3.fromDegrees(
                    117.951478782,
                    28.447896798,
                    20000
                ),
                orientation: {
                    // 指向
                    heading: global.DC.Namespace.Cesium.Math.toRadians(0, 0),
                    // 视角
                    pitch: global.DC.Namespace.Cesium.Math.toRadians(-90),
                    roll: 0.0,
                },
            })
      baseLayers = []
            let positions = [
                [117.951478782, 28.447896798, 0],
                [117.951469798, 28.447894686, 0],
                [117.951397357, 28.447698099, 0],
                [117.951505114, 28.447674695, 0],
                [117.951485465, 28.447619271, 0],
                [117.951706955, 28.447558541, 0],
                [117.951722755, 28.447611995, 0],
                [117.951834021, 28.447588427, 0],
                [117.951896863, 28.447789523, 0],
                [117.951478782, 28.447896798, 0],
            ]
            let MIN_F_H = positions.map((item) => {
                item[2] = 70
                return item
            })
      baseLayers.push(
        global.viewer.imageryLayers.addImageryProvider(
          new global.DC.Namespace.Cesium.WebMapTileServiceImageryProvider({
            url: `${window.BASE_URL_CONFIG.VUE_APP_MAP_SL}/MapTileService/wmts?STORETYPE=merged-dat&PROJECTION=4326&key=81503dad589f42bf9a9e5ea5e017f329&VERSION=1.0.0&REQUEST=GetTile`,
            layer: 'wmts_4326_361100',
            style: 'default',
            format: 'image/png',
            tileMatrixSetID: 'c',
            tileMatrixLabels: new Array(20).fill(0).map((v, i) => i + 1),
            tilingScheme: new global.DC.Namespace.Cesium.GeographicTilingScheme(),
          })
        )
      )
            let MAN_F_H = positions.map((item) => {
                item[2] = 80
                return item
            })
      baseLayers.contrast = 1.0
    },
            // 原生Cesium加载多边体
            // let floorPositions = positions.reduce((prev, curr, index, arr) => {
            //     curr.forEach(item => {
            //         prev.push(item)
            //     })
            //     return prev
            // }, [])
    addTerrain () {
      projectTerrain = global.DC.TerrainFactory.createUrlTerrain({
        // url: `http://data.marsgis.cn/terrain`
        url: `${window.BASE_URL_CONFIG.VUE_APP_MAP_DX}`,
      })
            // flootEntitysEntites.add({
            //     polygon: {
            //         hierarchy: global.DC.Namespace.Cesium.Cartesian3.fromDegreesArrayHeights(floorPositions),
            //         heightReference: global.DC.Namespace.Cesium.HeightReference.RELATIVE_TO_GROUND,
            //         extrudedHeightReference: global.DC.Namespace.Cesium.HeightReference.RELATIVE_TO_GROUND,
            //         height: 70,
            //         extrudedHeight: 80,
            //         material: global.DC.Namespace.Cesium.Color.RED.withAlpha(0.5),
            //     }
            // })
      global.viewer.addTerrain(projectTerrain)
    },
            // console.log(floorPositions)
    removeTerrain () {
      global.viewer.removeTerrain(projectTerrain)
    },
            // let floorPositions = MIN_F_H.concat(MAN_F_H)
    /**
     * @description: 全屏控制
     * @return {*} 无返回值
     */
    fullscreenchange () {
      // 最新写法
      const isFullScreen = document.fullscreenElement
      if (isFullScreen) {
        if (document.exitFullscreen) {
          document.exitFullscreen()
        } else if (document.msExitFullscreen) {
          document.msExitFullscreen()
        } else if (document.mozCancelFullScreen) {
          document.mozCancelFullScreen()
        } else if (document.webkitCancelFullScreen) {
          document.webkitCancelFullScreen()
        }
        this.isFullscreen = false
      } else {
        var fullscreen = document.body // 需要全屏的元素
        if (fullscreen.requestFullscreen) {
          fullscreen.requestFullscreen()
        } else if (fullscreen.mozRequestFullScreen) {
          fullscreen.mozRequestFullScreen()
        } else if (fullscreen.webkitRequestFullscreen) {
          fullscreen.webkitRequestFullscreen()
        } else if (fullscreen.msRequestFullscreen) {
          fullscreen.msRequestFullscreen()
        }
        this.isFullscreen = true
      }
    },
            // let floorPolygonlayer = new global.DC.VectorLayer('floorPolygonlayer')
            // global.viewer.addLayer(floorPolygonlayer)
    // 切换首页显示隐藏
    switchShowHomeContent () {
      this.$store.commit(
        "SET_ISSHOWHOMECONTENT",
        !this.$store.state.popupParams.isShowHomeContent
      )
      if (this.$store.state.popupParams.isShowHomeContent) {
        // if (document.querySelector('.dc-container .dc-zoom-controller').classList.contains('homebottom')) return
        document
          .querySelector(".dc-container .dc-zoom-controller")
          .classList.add("homebottom")
        document.querySelector(".screen-full-btn").classList.add("homebottom")
        document.querySelector(".over-look-btn").classList.add("homebottom")
        document.querySelector(".compass-btn").classList.add("homebottom")
        document
          .querySelector(".image-switch-icon-btn")
          .classList.add("iconbottom")
      } else {
        // if (!document.querySelector('.dc-container .dc-zoom-controller').classList.contains('homebottom')) return
        document
          .querySelector(".dc-container .dc-zoom-controller")
          .classList.remove("homebottom")
        document
          .querySelector(".screen-full-btn")
          .classList.remove("homebottom")
        document.querySelector(".over-look-btn").classList.remove("homebottom")
        document.querySelector(".compass-btn").classList.remove("homebottom")
        document
          .querySelector(".image-switch-icon-btn")
          .classList.remove("iconbottom")
      }
    },
            // let floorPolygon = new global.DC.Polygon(
            //     floorPositions
            // )
    /**
     * 在图层中添加实体(点)
     * @param {*} item 图标
     * @param {*} url 图标地址
     */
    addSiteEntity (item, url) {
      const billboard = new global.DC.Billboard(
        new global.DC.Position(Number(item.lng), Number(item.lat)),
        url
      )
      billboard.size = [20, 28]
      billboard.attrParams = item
      siteEntitylayers.addOverlay(billboard)
    },
            // floorPolygon.setStyle({
            //     height: 70,
            //     extrudedHeight: 80,
            //     material: global.DC.Color.GREEN.withAlpha(0.5),
            //     heightReference: 2,
            //     perPositionHeight: true
            // })
    /**
     * 添加图层
     * @param {*} layerName 图层名称
     * @param {*} type 图层类型
     */
    mapAddLayer (layerName, type, ClusterLayerType) {
      if (!layersObjcect[layerName]) {
        this.mapRemoveLayer(layerName, type)
        layersObjcect[layerName] = null
      }
            // floorPolygonlayer.addOverlay(floorPolygon)
      if (type == "VectorLayer") {
        layersObjcect[layerName] = new global.DC.VectorLayer(layerName)
      } else if (type == "ClusterLayer") {
        layersObjcect[layerName] = new global.DC.ClusterLayer(layerName, {
          pixelRange: 40,
          style: ClusterLayerType,
        })
      } else if (type == "HeatLayer") {
        layersObjcect[layerName] = new global.DC.HeatLayer(layerName, {
          gradient: {
            0.5: "green",
            0.6: "orange",
            0.95: "red",
          }, //颜色设置
          height: 0, // 高度
          radius: 100, // 半径
          useGround: false, //是否使用贴地模式
          classificationType: 2, //分类 是否影响地形,3D切片或同时影响这两者。0:地形、1:3D切片、2:两者。贴地模式下生效
        })
      }
            // global.viewer.flyTo(floorPolygonlayer)
      global.viewer.addLayer(layersObjcect[layerName])
    },
            // global.viewer.flyTo(sqTileset)
    /**
     * 删除图层
     * @param {*} layerName 图层名称
     * @param {*} type 图层类型
     */
    mapRemoveLayer (layerName, type) {
      if (
        type == "VectorLayer" ||
        type == "ClusterLayer" ||
        type == "HeatLayer"
      ) {
        if (layersObjcect[layerName] && layersObjcect[layerName] != null) {
          layersObjcect[layerName].remove()
          layersObjcect[layerName] = null
        }
      }
    },
            global.viewer.use(new global.DC.Measure())
    /**
     * 删除图层指定面
     * @param {*} layerName 图层名称
     * @param {*} polygonName 面名称
     * @param {*} type 图层类型
     */
    mapRemovePolygonLayer (layerName, polygonName, type) {
      if (
        type == "VectorLayer" ||
        type == "ClusterLayer" ||
        type == "HeatLayer"
      ) {
        if (
          layersObjcect[layerName] &&
          layersObjcect[layerName] != null &&
          polygonObj[polygonName] &&
          polygonObj[polygonName] != null
        ) {
          layersObjcect[layerName].removeOverlay(polygonObj[polygonName])
        }
      }
    },
            // global.viewer.locationBar.enable = true
            // 缩放
            global.viewer.zoomController.enable = true
            // 比例尺
            // global.viewer.distanceLegend.enable = true
    mapRemovePolygon (layerName, overlay, type) {
      if (type == "VectorLayer") {
        if (layersObjcect[layerName] && layersObjcect[layerName] != null) {
          layersObjcect[layerName].removeOverlay(overlay)
        }
      }
    },
            // let arr1 = [[117.9552436, 28.44500025], [117.9557116, 28.44429919], [117.9574856, 28.44444285]]
    /**
     * 清空图层
     * @param {*} layerName 图层名称
     * @param {*} type 图层类型
     */
    mapClearLayer (layerName, type) {
      if (
        type == "VectorLayer" ||
        type == "ClusterLayer" ||
        type == "HeatLayer"
      ) {
        if (layersObjcect[layerName] && layersObjcect[layerName] != null)
          layersObjcect[layerName].clear()
      }
    },
            // arr1.forEach(item => {
            //     console.log(global.DC.CoordTransform.GCJ02ToWGS84(item[0], item[1]), 2222)
            // })
    /**
     * 图层点添加
     * @param {*} layerName 图层名称
     * @param {*} type 添加的点位类型
     * @param {*} params 添加的点位参数(内容、详情)
     * @param {*} incident 添加的点位事件
     */
    layerPointAdd (
      layerName,
      type,
      layerType = "VectorLayer",
      params,
      distanceDisplayCondition = {
        near: 0, //最近距离
        far: Number.MAX_VALUE, //最远距离
      },
      incident = (e) => { },
      mouseOverIncident = (e) => { },
      mouseOutIncident = (e) => { },
      pointMouseMove = (e) => { }
    ) {
      if (!layersObjcect[layerName] || layersObjcect[layerName] == null) {
        this.mapAddLayer(layerName, layerType, params.ClusterLayerType)
      }
      let pointElement
      let labelElement
      if (type == "billboard") {
        // pointElement = new global.DC.Billboard(new global.DC.Position(Number(params.lng), Number(params.lat), Number(alt)), params.url)
        pointElement = new global.DC.Billboard(
          new global.DC.Position(Number(params.lng), Number(params.lat), 0),
          params.url
        )
        pointElement.setStyle(params.setStyle)
        pointElement.size = params.size || [32, 32]
        pointElement.style = "clustering"
        pointElement.attrParams = params
        layersObjcect[layerName].addOverlay(pointElement)
        pointElement.on(global.DC.MouseEventType.CLICK, incident)
        pointElement.on(global.DC.MouseEventType.MOUSE_OVER, mouseOverIncident)
        pointElement.on(global.DC.MouseEventType.MOUSE_OUT, mouseOutIncident)
        pointElement.on(global.DC.MouseEventType.MOUSE_MOVE, pointMouseMove)
      } else if (type == "label") {
        // labelElement = new global.DC.Label(new global.DC.Position(Number(params.lng), Number(params.lat), Number(alt)), params.text)
        labelElement = new global.DC.Label(
          new global.DC.Position(Number(params.lng), Number(params.lat), 0),
          params.text
        )
        let fontColor =
          "fontColor" in params ? params.fontColor : global.DC.Color.CRIMSON
        let style =
          "fontColor" in params
            ? global.DC.Namespace.Cesium.LabelStyle.FILL
            : global.DC.Namespace.Cesium.LabelStyle.FILL_AND_OUTLINE
        labelElement.setStyle({
          style: style,
          fillColor: fontColor,
          outlineColor: global.DC.Color.WHITE, // 边框颜色
          outlineWidth: params.outW || 4, // 边框大小,
          font: "16px sans-serif",
          pixelOffset: { x: 0, y: -30 },
          distanceDisplayCondition: distanceDisplayCondition,
        })
        labelElement.attrParams = params
        layersObjcect[layerName].addOverlay(labelElement)
        labelElement.on(global.DC.MouseEventType.CLICK, incident)
      } else if (type == "billboardOrLabel") {
        let allSite = layersObjcect[layerName].getOverlays()
        let flag = allSite.filter((item) => item.attrParams.id == params.id)
        if (flag == true) {
          return
        }
        global.DC.ready(initViewer)
        // pointElement = new global.DC.Billboard(new global.DC.Position(Number(params.lng), Number(params.lat), Number(alt)), params.url)
        pointElement = new global.DC.Billboard(
          new global.DC.Position(Number(params.lng), Number(params.lat), 0),
          params.url
        )
        pointElement.setStyle(params.setStyle)
        pointElement.size = params.size || [32, 32]
        pointElement.style = "clustering"
        pointElement.attrParams = params
        layersObjcect[layerName].addOverlay(pointElement)
        pointElement.on(global.DC.MouseEventType.CLICK, incident)
        pointElement.on(global.DC.MouseEventType.MOUSE_OVER, mouseOverIncident)
        pointElement.on(global.DC.MouseEventType.MOUSE_OUT, mouseOutIncident)
        pointElement.on(global.DC.MouseEventType.MOUSE_MOVE, pointMouseMove)
        // global.viewer.scene.morphTo2D(1)
        // labelElement = new global.DC.Label(new global.DC.Position(Number(params.lng), Number(params.lat), Number(alt)), params.text)
        labelElement = new global.DC.Label(
          new global.DC.Position(Number(params.lng), Number(params.lat), 0),
          String(params.text)
        )
        let fontColor =
          "fontColor" in params ? params.fontColor : global.DC.Color.CRIMSON
        let style =
          "fontColor" in params
            ? global.DC.Namespace.Cesium.LabelStyle.FILL
            : global.DC.Namespace.Cesium.LabelStyle.FILL_AND_OUTLINE
        labelElement.setStyle({
          style: style,
          fillColor: fontColor,
          outlineColor: global.DC.Color.WHITE, // 边框颜色
          outlineWidth: params.outW || 4, // 边框大小,
          font: "16px sans-serif",
          pixelOffset: { x: 0, y: -30 },
          distanceDisplayCondition: distanceDisplayCondition,
          ...params.setStyle,
        })
        labelElement.attrParams = params
        layersObjcect[layerName].addOverlay(labelElement)
        labelElement.on(global.DC.MouseEventType.CLICK, incident)
      } else if (type == "HeatPoint") {
        layersObjcect[layerName].setPositions(params.positions)
      } else if (type == "newBillboard") {
        // pointElement = new global.DC.Billboard(new global.DC.Position(Number(params.lng), Number(params.lat), Number(alt)), params.url)
        pointElement = new global.DC.Billboard(
          new global.DC.Position(Number(params.lng), Number(params.lat), 0),
          params.url
        )
        pointElement.setStyle(params.setStyle)
        pointElement.size = params.size || [32, 32]
        pointElement.style = "clustering"
        pointElement.attrParams = params
        layersObjcect[layerName].addOverlay(pointElement)
        pointElement.on(global.DC.MouseEventType.CLICK, incident)
        pointElement.on(global.DC.MouseEventType.MOUSE_OVER, mouseOverIncident)
        pointElement.on(global.DC.MouseEventType.MOUSE_OUT, mouseOutIncident)
        pointElement.on(global.DC.MouseEventType.MOUSE_MOVE, pointMouseMove)
      }
    },
        // 清除控制台
        console.clear()
    /**
     * 删除图层指定点
     * @param {*} layerName 图层名称
     * @param {*} siteId 点ID
     */
    mapRemoveSiteLayer (layerName, siteId) {
      if (layersObjcect[layerName]) {
        let allSite = layersObjcect[layerName].getOverlays()
        function isEleFullScreen () {
            const fullScreenEle =
                document.fullscreenElement ||
                document.msFullscreenElement ||
                document.mozFullScreenElement ||
                document.webkitFullscreenElement
            if (fullScreenEle === null) {
                that.isFullscreen = false
                return false
            } else {
                return true
            }
        allSite
          .filter((item) => item.attrParams.id == siteId)
          .forEach((item) => layersObjcect[layerName].removeOverlay(item))
      }
    },
    /**
     * 图层面添加
     * @param {*} layerName 图层名称
     * @param {*} positions 图层位置数据
     * @param {*} material 颜色
     * @param {*} distanceDisplayCondition 可见距离
     */
    layerPolygonAdd (
      layerName,
      positions,
      material,
      distanceDisplayCondition,
      polygonName,
      params,
      incident = (e) => { },
      mouseOverIncident = (e) => { },
      mouseOutIncident = (e) => { },
      setStyle = {}
    ) {
      if (!layersObjcect[layerName] || layersObjcect[layerName] == null) {
        this.mapAddLayer(layerName, "VectorLayer")
        layersObjcect[layerName].allowDrillPicking = true
      }
      // let polygon = new global.DC.Polygon(positions)
      // let polygonObj = {}//要在全局定义
      polygonObj[polygonName] = new global.DC.Polygon(positions)
      // polygon.setStyle({
      polygonObj[polygonName].setStyle({
        material: material,
        distanceDisplayCondition: distanceDisplayCondition,
        perPositionHeight: true,
        ...setStyle,
      })
      // layersObjcect[layerName].addOverlay(polygon)
      polygonObj[polygonName].attrParams = params
      polygonObj[polygonName].on(global.DC.MouseEventType.CLICK, incident)
      polygonObj[polygonName].on(
        global.DC.MouseEventType.MOUSE_OVER,
        mouseOverIncident
      )
      polygonObj[polygonName].on(
        global.DC.MouseEventType.MOUSE_OUT,
        mouseOutIncident
      )
      layersObjcect[layerName].addOverlay(polygonObj[polygonName])
    },
    /**
     * 图层面添加
     * @param {*} layerName 图层名称
     * @param {*} positions 图层位置数据
     * @param {*} material 颜色
     * @param {*} distanceDisplayCondition 可见距离
     */
    layerPolygonArrowsAdd (
      layerName,
      positions,
      material,
      polygonName = "",
      params,
      incident = (e) => { },
      mouseOverIncident = (e) => { },
      mouseOutIncident = (e) => { },
      setStyle = {}
    ) {
      if (!layersObjcect[layerName] || layersObjcect[layerName] == null) {
        this.mapAddLayer(layerName, "VectorLayer")
        layersObjcect[layerName].allowDrillPicking = true
      }
      if (polygonName == "") {
        polygonName = layerName + params.id
      }
      polygonObj[polygonName] = new global.DC.Polyline(positions)
      let positionData = positions
        .split(";")
        .map((item) => {
          return [Number(item.split(",")[0]), Number(item.split(",")[1])]
        })
        .filter((item) => {
          return !item.some((it) => it == 0)
        })
      console.log(params.width, 15)
      polygonObj[polygonName].setStyle({
        width: params.width,
        material: new global.DC.PolylineImageTrailMaterialProperty({
          color: new global.DC.Color(255, 255, 255),
          speed: 20,
          image: "/images/arrows.png",
          repeat: {
            x: getLineSpeed(positionData) / 2,
            y: 1,
          },
        }),
        distanceDisplayCondition: {
          near: 0, //最近距离
          far: 2000, //最远距离
        },
        clampToGround: false,
        ...setStyle,
      })
      polygonObj[polygonName].attrParams = params
      layersObjcect[layerName].addOverlay(polygonObj[polygonName])
    },
    /**
     * 图层线添加
     * @param {*} layerName 图层名称
     * @param {*} positions 图层位置数据
     * @param {*} material 颜色
     * @param {*} width 宽度
     */
    layerPolylineAdd (
      layerName,
      positions,
      material,
      width,
      params,
      incident = (e) => { }
    ) {
      if (!layersObjcect[layerName] || layersObjcect[layerName] == null) {
        this.mapAddLayer(layerName, "VectorLayer")
        layersObjcect[layerName].allowDrillPicking = true
      }
      let polyline = new global.DC.Polyline(positions)
      polyline.setStyle({
        width: width,
        material: material,
        clampToGround: false,
      })
      polyline.attrParams = params
      polyline.on(global.DC.MouseEventType.CLICK, incident)
      layersObjcect[layerName].addOverlay(polyline)
    },
    layerWallAdd (layerName, positions) {
      if (!layersObjcect[layerName] || layersObjcect[layerName] == null) {
        this.mapAddLayer(layerName, "VectorLayer")
      }
      let wall = new global.DC.Wall(positions)
      wall.setStyle({
        material: new global.DC.WallTrailMaterialProperty({
          color: global.DC.Namespace.Cesium.Color.fromBytes(255, 0, 0, 180),
          speed: 10,
        }),
      })
      layersObjcect[layerName].addOverlay(wall)
    },
    rowLayerWallAdd (layerName, positions) {
      if (!layersObjcect[layerName] || layersObjcect[layerName] == null) {
        this.mapAddLayer(layerName, "VectorLayer")
      }
      let wall = new global.DC.Wall(positions)
      wall.setStyle({
        material: new global.DC.WallImageTrailMaterialProperty({
          image: "/images/jjx.png",
          color: global.DC.Namespace.Cesium.Color.fromBytes(255, 255, 0, 180),
          repeat: { x: 20, y: 1 },
          speed: 10,
        }),
      })
      layersObjcect[layerName].addOverlay(wall)
    },
    /**
     * @description: 通过ID获取图层
     * @return {*}
     */
    getOverLayerID (layerName, ids = [], cb) {
      const data = ids.reduce((pre, cur) => {
        if (
          layersObjcect[layerName].getOverlay(cur.overlayId) &&
          layersObjcect[layerName].getOverlay(cur.overlayId) != undefined &&
          layersObjcect[layerName].getOverlay(cur.overlayId) != null &&
          layersObjcect[layerName].getOverlay(cur.overlayId) != ""
        ) {
          pre.push(
            layersObjcect[layerName].getOverlay(cur.overlayId).attrParams
          )
        } else {
          layersObjcect[layerName].eachOverlay((item) => {
            if (item.overlayId == cur.overlayId) pre.push(item.attrParams)
          })
        }
        window.onresize = function () {
            console.log(isEleFullScreen())
        return pre
      }, [])
      cb(data)
    },
    /**
     * 图层显示隐藏
     * @param {*} layerName 图层名称
     * @param {*} flag 显示隐藏
     */
    layerShow (layerName, flag) {
      if (layersObjcect[layerName]) layersObjcect[layerName].show = flag
    },
    /**
     * 飞到指定位置
     * @param {*} siteJd 经度
     * @param {*} siteWd 纬度
     * @param {*} siteGd 高度,默认0
     * @param {*} siteHeading 偏航角度,默认0
     * @param {*} sitePitch 俯仰角度,默认0
     * @param {*} siteRoll 翻转角度,默认0
     * @param {*} time 飞行时间,默认3秒
     */
    toPosition (
      siteJd,
      siteWd,
      siteGd = 2000,
      siteHeading = 0,
      sitePitch = -90,
      siteRoll = 0,
      time = 3
    ) {
      global.viewer.flyToPosition(
        new global.DC.Position(
          Number(siteJd),
          Number(siteWd),
          Number(siteGd),
          Number(siteHeading),
          Number(sitePitch),
          Number(siteRoll)
        ),
        function () { },
        time
      )
    },
    // sdTilesetLayer
    /**
     * 飞到指定范围
     * @param {*} polygonName 范围名称
     * @param {*} duration 时间
     */
    flytoLayer (polygonName, duration = 3) {
      global.viewer.flyTo(polygonObj[polygonName], duration)
    },
    /**
     * 添加模型
     * @param {*} titlesetName 图层名称
     * @param {*} titlesetUrl 模型地址
     * @param {*} incident 模型点击事件
     */
    addMxTileset (titlesetName, titlesetUrl, conf) {
      if (!tilesetObject[titlesetName]) tilesetObject[titlesetName] = null
      tilesetObject[titlesetName] = new global.DC.Tileset(titlesetUrl, {
        luminanceAtZenith: 0.4,
        // cullWithChildrenBounds: false,
        // cullRequestsWhileMoving: false,
        // skipLevelOfDetail: false,
        maximumScreenSpaceError: conf.maximumScreenSpaceError || 16,
        shadows: global.DC.Namespace.Cesium.ShadowMode.DISABLED,
      })
      // 地形数据添加
      tilesetObject[titlesetName].setHeight(-73)
      tilesetLayer.addOverlay(tilesetObject[titlesetName])
      // global.viewer.flyTo(tilesetObject[titlesetName])removeMxTileset
    },
    tilesetLayerFlag (type, cb) {
      if (type == 1) {
        if (this.tilesetLayerType != "") {
          this.$message({
            message: "请关闭模型再开始绘制",
            type: "warning",
          })
          cb(false)
          return
        }
      } else {
        if (this.tilesetLayerType == "") {
          this.$message({
            message: "请打开模型再开始绘制",
            type: "warning",
          })
        // 注册事件
          cb(false)
          return
        }
      }
        // 使用示例
        // this.$EventBus.$emit('mapAddLayer', {
        //     layerName: 'housingEstateLayer',
        //     type: 'VectorLayer'
        // })
        this.$EventBus.$on("mapAddLayer", (params) => {
            that.mapAddLayer(params.layerName, params.type)
        })
        this.$EventBus.$on("mapRemoveLayer", (params) => {
            that.mapRemoveLayer(params.layerName, params.type)
        })
        this.$EventBus.$on("mapRemoveSiteLayer", (params) => {
            that.mapRemoveSiteLayer(params.layerName, params.siteId)
        })
        this.$EventBus.$on("mapRemovePolygonLayer", (params) => {
            that.mapRemovePolygonLayer(
                params.layerName,
                params.polygonName,
                params.type
            )
        })
        this.$EventBus.$on("mapRemovePolygon", (params) => {
            that.mapRemovePolygon(params.layerName, params.overlay, params.type)
        })
        this.$EventBus.$on("mapClearLayer", (params) => {
            that.mapClearLayer(params.layerName, params.type)
        })
        this.$EventBus.$on("layerPointAdd", (params) => {
            // eslint-disable-next-line no-unused-vars
            that.layerPointAdd(
                params.layerName,
                params.type,
                params.layerType,
                params.params,
                params.distanceDisplayCondition,
                params.incident,
                params.mouseOverIncident,
                params.mouseOutIncident,
                params.pointMouseMove
            )
        })
        this.$EventBus.$on("layerPolygonAdd", (params) => {
            if ("polygonName" in params) {
                that.layerPolygonAdd(
                    params.layerName,
                    params.positions,
                    params.material,
                    params.distanceDisplayCondition,
                    params.polygonName,
                    params.params,
                    params.incident,
                    params.mouseOverIncident,
                    params.mouseOutIncident,
                    params.setStyle
                )
            } else {
                that.layerPolygonAdd(
                    params.layerName,
                    params.positions,
                    params.material,
                    params.distanceDisplayCondition,
                    "polygon",
                    params.params,
                    params.incident,
                    params.mouseOverIncident,
                    params.mouseOutIncident,
                    params.setStyle
                )
            }
        })
        this.$EventBus.$on("layerPolygonArrowsAdd", (params) => {
            that.layerPolygonArrowsAdd(
                params.layerName,
                params.positions,
                params.material,
                params.polygonName,
                params.params,
                params.incident,
                params.mouseOverIncident,
                params.mouseOutIncident,
                params.setStyle
            )
        })
        this.$EventBus.$on("layerPolylineAdd", (params) => {
            that.layerPolylineAdd(
                params.layerName,
                params.positions,
                params.material,
                params.width,
                params.params,
                params.incident
            )
        })
        this.$EventBus.$on("layerWallAdd", (params) => {
            that.layerWallAdd(params.layerName, params.positions)
        })
        this.$EventBus.$on("rowLayerWallAdd", (params) => {
            that.rowLayerWallAdd(params.layerName, params.positions)
        })
        this.$EventBus.$on("getOverLayerID", (params) => {
            that.getOverLayerID(params.layerName, params.ids, params.cb)
        })
        this.$EventBus.$on("layerShow", (params) => {
            that.layerShow(params.layerName, params.flag)
        })
        this.$EventBus.$on("toPosition", (params) => {
            that.toPosition(
                params.siteJd,
                params.siteWd,
                params.siteGd,
                params.siteHeading,
                params.sitePitch,
                params.siteRoll,
                params.time
            )
        })
        this.$EventBus.$on("highOrLightChange", (type, status) => {
            // eslint-disable-next-line no-unused-vars
            that.highOrLightChange(type, status)
        })
        this.$EventBus.$on("addMxTileset", (params) => {
            // eslint-disable-next-line no-unused-vars
            that.addMxTileset(params.titlesetName, params.titlesetUrl, params)
        })
        this.$EventBus.$on("closeMxTileset", () => {
            // eslint-disable-next-line no-unused-vars
            that.closeMxTileset()
        })
        this.$EventBus.$on("tilesetLayerFlag", (type, cb) => {
            // eslint-disable-next-line no-unused-vars
            that.tilesetLayerFlag(type, cb)
        })
        this.$EventBus.$on("removeMxTileset", (params) => {
            // eslint-disable-next-line no-unused-vars
            that.removeMxTileset(params.titlesetName)
        })
        this.$EventBus.$on("flytoLayer", (params) => {
            that.flytoLayer(params.polygonName, params.duration)
        })
        this.$EventBus.$on("showThreeDimensions", (params) => {
            that.showThreeDimensions(
                params.positions,
                params.minHeight,
                params.maxHeight
            )
        })
        this.$EventBus.$on("switchThreeDimensions", (params) => {
            that.switchThreeDimensions(params)
        })
        this.$EventBus.$on("clearHouse3D", () => {
            that.clearHouse3D()
        })
        this.$EventBus.$on("registerMxClick", (event) => {
            that.registerMxClick(event)
        })
        this.$EventBus.$on("unbindMxClick", (event) => {
            that.unbindMxClick(event)
        })
        // 重写定位方法
        const homeCenter = [117.99311892441567, 28.46938164123123]
        this.$nextTick(() => {
            // console.log('dc-zoom-controller', document.querySelector('.dc-zoom-controller'))
            // if (document.querySelector('.dc-zoom-controller') == null) return
            // document.querySelector('.dc-zoom-controller').children[1].onclick =
            //     function () {
            //         that.$EventBus.$emit('toPosition', {
            //             siteJd: homeCenter[0] + 0.046,
            //             siteWd: homeCenter[1] - 0.36,
            //             siteGd: 36000,
            //             siteHeading: -3,
            //             sitePitch: -45
            //         })
            //     }
            // document.querySelector('.dc-zoom-controller .refresh svg title').innerHTML = '初始化位置'
        })
      cb(true)
    },
    methods: {
        // 获取当前地图中心的经纬度
        getSceneCenterPosition (viewer) {
            let centerResult = viewer.camera.pickEllipsoid(
                new global.DC.Namespace.Cesium.Cartesian2(
                    viewer.canvas.clientWidth / 2,
                    viewer.canvas.clientHeight / 2
                )
            )
            let curPosition =
                global.DC.Namespace.Cesium.Ellipsoid.WGS84.cartesianToCartographic(
                    centerResult
                )
            let curLongitude = (curPosition.longitude * 180) / Math.PI
            let curLatitude = (curPosition.latitude * 180) / Math.PI
            return {
                lon: curLongitude,
                lat: curLatitude,
            }
        },
        compassBtnClick () {
            const degrees = global.viewer.camera.heading * (180 / Math.PI)
            if (degrees == 360) {
                return
            }
            const position = global.DC.Transform.transformCartesianToWGS84(
                global.viewer.camera.position
            )
            global.viewer.camera.flyTo({
                // Cesium的坐标是以地心为原点,一向指向南美洲,一向指向亚洲,一向指向北极州
                // fromDegrees()方法,将经纬度和高程转换为世界坐标
                destination: global.DC.Transform.transformWGS84ToCartesian(
                    new global.DC.Position(
                        position.lng,
                        position.lat,
                        position.alt + 1000
                    )
                ),
                orientation: {
                    // 指向
                    heading: global.DC.Namespace.Cesium.Math.toRadians(0, 0),
                    // 视角
                    pitch: global.viewer.camera.pitch,
                    roll: global.viewer.camera.roll,
                },
                duration: 3,
            })
        },
        overLookClick () {
            const degrees = global.viewer.camera.pitch * (180 / Math.PI)
            if (degrees == -90) {
                return
            }
            const position = this.getSceneCenterPosition(global.viewer)
            global.viewer.camera.flyTo({
                // Cesium的坐标是以地心为原点,一向指向南美洲,一向指向亚洲,一向指向北极州
                // fromDegrees()方法,将经纬度和高程转换为世界坐标
                destination: global.DC.Namespace.Cesium.Cartesian3.fromDegrees(
                    position.lon,
                    position.lat,
                    global.viewer.camera.positionCartographic.height * 1.5
                ),
                orientation: {
                    // 指向
                    heading: global.viewer.camera.heading,
                    // 视角
                    pitch: global.DC.Namespace.Cesium.Math.toRadians(-90),
                    roll: global.viewer.camera.roll,
                },
                duration: 3,
            })
        },
        angleChange (e) {
            if (e) {
                global.viewer.camera.flyTo({
                    destination: global.viewer.camera.position,
                    orientation: {
                        heading: global.viewer.camera.heading,
                        pitch: -45,
                        roll: global.viewer.camera.roll,
                    },
                    duration: 0.0,
                })
                global.viewer.setPitchRange(-90, -45)
            } else {
                global.viewer.setPitchRange(-90, 0)
            }
        },
        closeMxTileset () {
            window.TILESET_LABEL.forEach((item) => {
                this.removeMxTileset(`sdTilesetLayer${item.name}`)
            })
            this.tilesetLayerType = ""
        },
        /**
         * @description: 高精度模型和轻量模型切换
         * @param {*} type
         * @return {*}
         */
        highOrLightChange (type, status = "") {
            this.$EventBus.$emit("showHouseingTileset", {
                type: "remove",
            })
            window.TILESET_LABEL.forEach((item) => {
                this.removeMxTileset(`sdTilesetLayer${item.name}`)
            })
            // this.addMxTileset('sdTilesetLayer', `${tile3DUrl}/sf3d/361102/model/wanda/tileset.json`)
            // this.addMxTileset('sdTilesetLayer02', `https://tuan-gis.sit.fengtu.com.cn/361102/wanda/tileset.json`)
            // this.addMxTileset('sdTilesetLayer', `/mx/01/tileset.json`)
            if (this.tilesetLayerType == type && status == "") {
                this.tilesetLayerType = ""
            } else {
                this.tilesetLayerType = type
                type == "light"
                    ? window.TILESET_LABEL.forEach((item) => {
                        this.addMxTileset(
                            `sdTilesetLayer${item.name}`,
                            `${tile3DUrl}/sf3d/361102/model/all/${item.name}/tileset.json`,
                            item
                        )
                    })
                    : window.TILESET_LABEL.forEach((item) => {
                        this.addMxTileset(
                            `sdTilesetLayer${item.name}`,
                            `${tile3DUrl}/sf3d/361102/model/all1/${item.name}/tileset.json`,
                            item
                        )
                    })
                if (this.$route.path == "/layout/house") {
                    this.$EventBus.$emit("showHouseingTileset", {
                        type: "add",
                    })
                }
            }
        },
        // 模型的点击事件
        tilesetClick (e) {
            if (this.$route.path != "/layout/house") {
                this.$router.push({
                    path: "/layout/house",
                    query: { searchName: "xxx小区" },
                })
            }
        },
        switchImg () {
            // 天地图 影像
            this.imgtype = 0
            baseLayers.length &&
                baseLayers.forEach((item) => {
                    item && global.viewer.imageryLayers.remove(item)
                })
            baseLayers = []
            const layer = global.viewer.imageryLayers.addImageryProvider(
                new global.DC.Namespace.Cesium.UrlTemplateImageryProvider({
                    url: `http://47.212.32.93:9004/ga/service/map/satellite?z={z}&y={y}&x={x}&key=81503dad589f42bf9a9e5ea5e017f329`,
                    tilingScheme: new global.DC.Namespace.Cesium.GeographicTilingScheme(),
                    tileMatrixLabels: new Array(20).fill(0).map((v, i) => i + 1),
                })
            )
            layer.contrast = 0.8
            baseLayers.push(layer)
        },
        switchElec () {
            // 天地图 矢量
            this.imgtype = 1
            baseLayers.length &&
                baseLayers.forEach((item) => {
                    item && global.viewer.imageryLayers.remove(item)
                })
            baseLayers = []
            baseLayers.push(
                global.viewer.imageryLayers.addImageryProvider(
                    new global.DC.Namespace.Cesium.WebMapTileServiceImageryProvider({
                        url: `${window.BASE_URL_CONFIG.VUE_APP_MAP_SL}/MapTileService/wmts?STORETYPE=merged-dat&PROJECTION=4326&key=81503dad589f42bf9a9e5ea5e017f329&VERSION=1.0.0&REQUEST=GetTile`,
                        layer: 'wmts_4326_361100',
                        style: 'default',
                        format: 'image/png',
                        tileMatrixSetID: 'c',
                        tileMatrixLabels: new Array(20).fill(0).map((v, i) => i + 1),
                        tilingScheme: new global.DC.Namespace.Cesium.GeographicTilingScheme(),
                    })
                )
            )
            baseLayers.contrast = 1.0
        },
        addTerrain () {
            projectTerrain = global.DC.TerrainFactory.createUrlTerrain({
                // url: `http://data.marsgis.cn/terrain`
                url: `${window.BASE_URL_CONFIG.VUE_APP_MAP_DX}`,
            })
            global.viewer.addTerrain(projectTerrain)
        },
        removeTerrain () {
            global.viewer.removeTerrain(projectTerrain)
        },
        /**
         * @description: 全屏控制
         * @return {*} 无返回值
         */
        fullscreenchange () {
            // 最新写法
            const isFullScreen = document.fullscreenElement
            if (isFullScreen) {
                if (document.exitFullscreen) {
                    document.exitFullscreen()
                } else if (document.msExitFullscreen) {
                    document.msExitFullscreen()
                } else if (document.mozCancelFullScreen) {
                    document.mozCancelFullScreen()
                } else if (document.webkitCancelFullScreen) {
                    document.webkitCancelFullScreen()
                }
                this.isFullscreen = false
            } else {
                var fullscreen = document.body // 需要全屏的元素
                if (fullscreen.requestFullscreen) {
                    fullscreen.requestFullscreen()
                } else if (fullscreen.mozRequestFullScreen) {
                    fullscreen.mozRequestFullScreen()
                } else if (fullscreen.webkitRequestFullscreen) {
                    fullscreen.webkitRequestFullscreen()
                } else if (fullscreen.msRequestFullscreen) {
                    fullscreen.msRequestFullscreen()
                }
                this.isFullscreen = true
            }
        },
        // 切换首页显示隐藏
        switchShowHomeContent () {
            this.$store.commit(
                "SET_ISSHOWHOMECONTENT",
                !this.$store.state.popupParams.isShowHomeContent
            )
            if (this.$store.state.popupParams.isShowHomeContent) {
                // if (document.querySelector('.dc-container .dc-zoom-controller').classList.contains('homebottom')) return
                document
                    .querySelector(".dc-container .dc-zoom-controller")
                    .classList.add("homebottom")
                document.querySelector(".screen-full-btn").classList.add("homebottom")
                document.querySelector(".over-look-btn").classList.add("homebottom")
                document.querySelector(".compass-btn").classList.add("homebottom")
                document
                    .querySelector(".image-switch-icon-btn")
                    .classList.add("iconbottom")
            } else {
                // if (!document.querySelector('.dc-container .dc-zoom-controller').classList.contains('homebottom')) return
                document
                    .querySelector(".dc-container .dc-zoom-controller")
                    .classList.remove("homebottom")
                document
                    .querySelector(".screen-full-btn")
                    .classList.remove("homebottom")
                document.querySelector(".over-look-btn").classList.remove("homebottom")
                document.querySelector(".compass-btn").classList.remove("homebottom")
                document
                    .querySelector(".image-switch-icon-btn")
                    .classList.remove("iconbottom")
            }
        },
        /**
         * 在图层中添加实体(点)
         * @param {*} item 图标
         * @param {*} url 图标地址
         */
        addSiteEntity (item, url) {
            const billboard = new global.DC.Billboard(
                new global.DC.Position(Number(item.lng), Number(item.lat)),
                url
            )
            billboard.size = [20, 28]
            billboard.attrParams = item
            siteEntitylayers.addOverlay(billboard)
        },
        /**
         * 添加图层
         * @param {*} layerName 图层名称
         * @param {*} type 图层类型
         */
        mapAddLayer (layerName, type, ClusterLayerType) {
            if (!layersObjcect[layerName]) {
                this.mapRemoveLayer(layerName, type)
                layersObjcect[layerName] = null
            }
            if (type == "VectorLayer") {
                layersObjcect[layerName] = new global.DC.VectorLayer(layerName)
            } else if (type == "ClusterLayer") {
                layersObjcect[layerName] = new global.DC.ClusterLayer(layerName, {
                    pixelRange: 40,
                    style: ClusterLayerType,
                })
            } else if (type == "HeatLayer") {
                layersObjcect[layerName] = new global.DC.HeatLayer(layerName, {
                    gradient: {
                        0.5: "green",
                        0.6: "orange",
                        0.95: "red",
                    }, //颜色设置
                    height: 0, // 高度
                    radius: 100, // 半径
                    useGround: false, //是否使用贴地模式
                    classificationType: 2, //分类 是否影响地形,3D切片或同时影响这两者。0:地形、1:3D切片、2:两者。贴地模式下生效
                })
            }
            global.viewer.addLayer(layersObjcect[layerName])
        },
        /**
         * 删除图层
         * @param {*} layerName 图层名称
         * @param {*} type 图层类型
         */
        mapRemoveLayer (layerName, type) {
            if (
                type == "VectorLayer" ||
                type == "ClusterLayer" ||
                type == "HeatLayer"
            ) {
                if (layersObjcect[layerName] && layersObjcect[layerName] != null) {
                    layersObjcect[layerName].remove()
                    layersObjcect[layerName] = null
                }
            }
        },
        /**
         * 删除图层指定面
         * @param {*} layerName 图层名称
         * @param {*} polygonName 面名称
         * @param {*} type 图层类型
         */
        mapRemovePolygonLayer (layerName, polygonName, type) {
            if (
                type == "VectorLayer" ||
                type == "ClusterLayer" ||
                type == "HeatLayer"
            ) {
                if (
                    layersObjcect[layerName] &&
                    layersObjcect[layerName] != null &&
                    polygonObj[polygonName] &&
                    polygonObj[polygonName] != null
                ) {
                    layersObjcect[layerName].removeOverlay(polygonObj[polygonName])
                }
            }
        },
        mapRemovePolygon (layerName, overlay, type) {
            if (type == "VectorLayer") {
                if (layersObjcect[layerName] && layersObjcect[layerName] != null) {
                    layersObjcect[layerName].removeOverlay(overlay)
                }
            }
        },
        /**
         * 清空图层
         * @param {*} layerName 图层名称
         * @param {*} type 图层类型
         */
        mapClearLayer (layerName, type) {
            if (
                type == "VectorLayer" ||
                type == "ClusterLayer" ||
                type == "HeatLayer"
            ) {
                if (layersObjcect[layerName] && layersObjcect[layerName] != null)
                    layersObjcect[layerName].clear()
            }
        },
        /**
         * 图层点添加
         * @param {*} layerName 图层名称
         * @param {*} type 添加的点位类型
         * @param {*} params 添加的点位参数(内容、详情)
         * @param {*} incident 添加的点位事件
         */
        layerPointAdd (
            layerName,
            type,
            layerType = "VectorLayer",
            params,
            distanceDisplayCondition = {
                near: 0, //最近距离
                far: Number.MAX_VALUE, //最远距离
            },
            incident = (e) => { },
            mouseOverIncident = (e) => { },
            mouseOutIncident = (e) => { },
            pointMouseMove = (e) => { }
        ) {
            if (!layersObjcect[layerName] || layersObjcect[layerName] == null) {
                this.mapAddLayer(layerName, layerType, params.ClusterLayerType)
            }
            let pointElement
            let labelElement
            if (type == "billboard") {
                // pointElement = new global.DC.Billboard(new global.DC.Position(Number(params.lng), Number(params.lat), Number(alt)), params.url)
                pointElement = new global.DC.Billboard(
                    new global.DC.Position(Number(params.lng), Number(params.lat), 0),
                    params.url
                )
                pointElement.setStyle(params.setStyle)
                pointElement.size = params.size || [32, 32]
                pointElement.style = "clustering"
                pointElement.attrParams = params
                layersObjcect[layerName].addOverlay(pointElement)
                pointElement.on(global.DC.MouseEventType.CLICK, incident)
                pointElement.on(global.DC.MouseEventType.MOUSE_OVER, mouseOverIncident)
                pointElement.on(global.DC.MouseEventType.MOUSE_OUT, mouseOutIncident)
                pointElement.on(global.DC.MouseEventType.MOUSE_MOVE, pointMouseMove)
            } else if (type == "label") {
                // labelElement = new global.DC.Label(new global.DC.Position(Number(params.lng), Number(params.lat), Number(alt)), params.text)
                labelElement = new global.DC.Label(
                    new global.DC.Position(Number(params.lng), Number(params.lat), 0),
                    params.text
                )
                let fontColor =
                    "fontColor" in params ? params.fontColor : global.DC.Color.CRIMSON
                let style =
                    "fontColor" in params
                        ? global.DC.Namespace.Cesium.LabelStyle.FILL
                        : global.DC.Namespace.Cesium.LabelStyle.FILL_AND_OUTLINE
                labelElement.setStyle({
                    style: style,
                    fillColor: fontColor,
                    outlineColor: global.DC.Color.WHITE, // 边框颜色
                    outlineWidth: params.outW || 4, // 边框大小,
                    font: "16px sans-serif",
                    pixelOffset: { x: 0, y: -30 },
                    distanceDisplayCondition: distanceDisplayCondition,
                })
                labelElement.attrParams = params
                layersObjcect[layerName].addOverlay(labelElement)
                labelElement.on(global.DC.MouseEventType.CLICK, incident)
            } else if (type == "billboardOrLabel") {
                let allSite = layersObjcect[layerName].getOverlays()
                let flag = allSite.filter((item) => item.attrParams.id == params.id)
                if (flag == true) {
                    return
                }
                // pointElement = new global.DC.Billboard(new global.DC.Position(Number(params.lng), Number(params.lat), Number(alt)), params.url)
                pointElement = new global.DC.Billboard(
                    new global.DC.Position(Number(params.lng), Number(params.lat), 0),
                    params.url
                )
                pointElement.setStyle(params.setStyle)
                pointElement.size = params.size || [32, 32]
                pointElement.style = "clustering"
                pointElement.attrParams = params
                layersObjcect[layerName].addOverlay(pointElement)
                pointElement.on(global.DC.MouseEventType.CLICK, incident)
                pointElement.on(global.DC.MouseEventType.MOUSE_OVER, mouseOverIncident)
                pointElement.on(global.DC.MouseEventType.MOUSE_OUT, mouseOutIncident)
                pointElement.on(global.DC.MouseEventType.MOUSE_MOVE, pointMouseMove)
                // labelElement = new global.DC.Label(new global.DC.Position(Number(params.lng), Number(params.lat), Number(alt)), params.text)
                labelElement = new global.DC.Label(
                    new global.DC.Position(Number(params.lng), Number(params.lat), 0),
                    String(params.text)
                )
                let fontColor =
                    "fontColor" in params ? params.fontColor : global.DC.Color.CRIMSON
                let style =
                    "fontColor" in params
                        ? global.DC.Namespace.Cesium.LabelStyle.FILL
                        : global.DC.Namespace.Cesium.LabelStyle.FILL_AND_OUTLINE
                labelElement.setStyle({
                    style: style,
                    fillColor: fontColor,
                    outlineColor: global.DC.Color.WHITE, // 边框颜色
                    outlineWidth: params.outW || 4, // 边框大小,
                    font: "16px sans-serif",
                    pixelOffset: { x: 0, y: -30 },
                    distanceDisplayCondition: distanceDisplayCondition,
                    ...params.setStyle,
                })
                labelElement.attrParams = params
                layersObjcect[layerName].addOverlay(labelElement)
                labelElement.on(global.DC.MouseEventType.CLICK, incident)
            } else if (type == "HeatPoint") {
                layersObjcect[layerName].setPositions(params.positions)
            } else if (type == "newBillboard") {
                // pointElement = new global.DC.Billboard(new global.DC.Position(Number(params.lng), Number(params.lat), Number(alt)), params.url)
                pointElement = new global.DC.Billboard(
                    new global.DC.Position(Number(params.lng), Number(params.lat), 0),
                    params.url
                )
                pointElement.setStyle(params.setStyle)
                pointElement.size = params.size || [32, 32]
                pointElement.style = "clustering"
                pointElement.attrParams = params
                layersObjcect[layerName].addOverlay(pointElement)
                pointElement.on(global.DC.MouseEventType.CLICK, incident)
                pointElement.on(global.DC.MouseEventType.MOUSE_OVER, mouseOverIncident)
                pointElement.on(global.DC.MouseEventType.MOUSE_OUT, mouseOutIncident)
                pointElement.on(global.DC.MouseEventType.MOUSE_MOVE, pointMouseMove)
            }
        },
        /**
         * 删除图层指定点
         * @param {*} layerName 图层名称
         * @param {*} siteId 点ID
         */
        mapRemoveSiteLayer (layerName, siteId) {
            if (layersObjcect[layerName]) {
                let allSite = layersObjcect[layerName].getOverlays()
                allSite
                    .filter((item) => item.attrParams.id == siteId)
                    .forEach((item) => layersObjcect[layerName].removeOverlay(item))
            }
        },
        /**
         * 图层面添加
         * @param {*} layerName 图层名称
         * @param {*} positions 图层位置数据
         * @param {*} material 颜色
         * @param {*} distanceDisplayCondition 可见距离
         */
        layerPolygonAdd (
            layerName,
            positions,
            material,
            distanceDisplayCondition,
            polygonName,
            params,
            incident = (e) => { },
            mouseOverIncident = (e) => { },
            mouseOutIncident = (e) => { },
            setStyle = {}
        ) {
            if (!layersObjcect[layerName] || layersObjcect[layerName] == null) {
                this.mapAddLayer(layerName, "VectorLayer")
                layersObjcect[layerName].allowDrillPicking = true
            }
            // let polygon = new global.DC.Polygon(positions)
            // let polygonObj = {}//要在全局定义
            polygonObj[polygonName] = new global.DC.Polygon(positions)
            // polygon.setStyle({
            polygonObj[polygonName].setStyle({
                material: material,
                distanceDisplayCondition: distanceDisplayCondition,
                perPositionHeight: true,
                ...setStyle,
            })
            // layersObjcect[layerName].addOverlay(polygon)
            polygonObj[polygonName].attrParams = params
            polygonObj[polygonName].on(global.DC.MouseEventType.CLICK, incident)
            polygonObj[polygonName].on(
                global.DC.MouseEventType.MOUSE_OVER,
                mouseOverIncident
            )
            polygonObj[polygonName].on(
                global.DC.MouseEventType.MOUSE_OUT,
                mouseOutIncident
            )
            layersObjcect[layerName].addOverlay(polygonObj[polygonName])
        },
        /**
         * 图层面添加
         * @param {*} layerName 图层名称
         * @param {*} positions 图层位置数据
         * @param {*} material 颜色
         * @param {*} distanceDisplayCondition 可见距离
         */
        layerPolygonArrowsAdd (
            layerName,
            positions,
            material,
            polygonName = "",
            params,
            incident = (e) => { },
            mouseOverIncident = (e) => { },
            mouseOutIncident = (e) => { },
            setStyle = {}
        ) {
            if (!layersObjcect[layerName] || layersObjcect[layerName] == null) {
                this.mapAddLayer(layerName, "VectorLayer")
                layersObjcect[layerName].allowDrillPicking = true
            }
            if (polygonName == "") {
                polygonName = layerName + params.id
            }
            polygonObj[polygonName] = new global.DC.Polyline(positions)
            let positionData = positions
                .split(";")
                .map((item) => {
                    return [Number(item.split(",")[0]), Number(item.split(",")[1])]
                })
                .filter((item) => {
                    return !item.some((it) => it == 0)
                })
            console.log(params.width, 15)
            polygonObj[polygonName].setStyle({
                width: params.width,
                material: new global.DC.PolylineImageTrailMaterialProperty({
                    color: new global.DC.Color(255, 255, 255),
                    speed: 20,
                    image: "/images/arrows.png",
                    repeat: {
                        x: getLineSpeed(positionData) / 2,
                        y: 1,
                    },
                }),
                distanceDisplayCondition: {
                    near: 0, //最近距离
                    far: 2000, //最远距离
                },
                clampToGround: false,
                ...setStyle,
            })
            polygonObj[polygonName].attrParams = params
            layersObjcect[layerName].addOverlay(polygonObj[polygonName])
        },
        /**
         * 图层线添加
         * @param {*} layerName 图层名称
         * @param {*} positions 图层位置数据
         * @param {*} material 颜色
         * @param {*} width 宽度
         */
        layerPolylineAdd (
            layerName,
            positions,
            material,
            width,
            params,
            incident = (e) => { }
        ) {
            if (!layersObjcect[layerName] || layersObjcect[layerName] == null) {
                this.mapAddLayer(layerName, "VectorLayer")
                layersObjcect[layerName].allowDrillPicking = true
            }
            let polyline = new global.DC.Polyline(positions)
            polyline.setStyle({
                width: width,
                material: material,
                clampToGround: false,
            })
            polyline.attrParams = params
            polyline.on(global.DC.MouseEventType.CLICK, incident)
            layersObjcect[layerName].addOverlay(polyline)
        },
        layerWallAdd (layerName, positions) {
            if (!layersObjcect[layerName] || layersObjcect[layerName] == null) {
                this.mapAddLayer(layerName, "VectorLayer")
            }
            let wall = new global.DC.Wall(positions)
            wall.setStyle({
                material: new global.DC.WallTrailMaterialProperty({
                    color: global.DC.Namespace.Cesium.Color.fromBytes(255, 0, 0, 180),
                    speed: 10,
                }),
            })
            layersObjcect[layerName].addOverlay(wall)
        },
        rowLayerWallAdd (layerName, positions) {
            if (!layersObjcect[layerName] || layersObjcect[layerName] == null) {
                this.mapAddLayer(layerName, "VectorLayer")
            }
            let wall = new global.DC.Wall(positions)
            wall.setStyle({
                material: new global.DC.WallImageTrailMaterialProperty({
                    image: "/images/jjx.png",
                    color: global.DC.Namespace.Cesium.Color.fromBytes(255, 255, 0, 180),
                    repeat: { x: 20, y: 1 },
                    speed: 10,
                }),
            })
            layersObjcect[layerName].addOverlay(wall)
        },
        /**
         * @description: 通过ID获取图层
         * @return {*}
         */
        getOverLayerID (layerName, ids = [], cb) {
            const data = ids.reduce((pre, cur) => {
                if (
                    layersObjcect[layerName].getOverlay(cur.overlayId) &&
                    layersObjcect[layerName].getOverlay(cur.overlayId) != undefined &&
                    layersObjcect[layerName].getOverlay(cur.overlayId) != null &&
                    layersObjcect[layerName].getOverlay(cur.overlayId) != ""
                ) {
                    pre.push(
                        layersObjcect[layerName].getOverlay(cur.overlayId).attrParams
                    )
                } else {
                    layersObjcect[layerName].eachOverlay((item) => {
                        if (item.overlayId == cur.overlayId) pre.push(item.attrParams)
                    })
                }
                return pre
            }, [])
            cb(data)
        },
        /**
         * 图层显示隐藏
         * @param {*} layerName 图层名称
         * @param {*} flag 显示隐藏
         */
        layerShow (layerName, flag) {
            if (layersObjcect[layerName]) layersObjcect[layerName].show = flag
        },
        /**
         * 飞到指定位置
         * @param {*} siteJd 经度
         * @param {*} siteWd 纬度
         * @param {*} siteGd 高度,默认0
         * @param {*} siteHeading 偏航角度,默认0
         * @param {*} sitePitch 俯仰角度,默认0
         * @param {*} siteRoll 翻转角度,默认0
         * @param {*} time 飞行时间,默认3秒
         */
        toPosition (
            siteJd,
            siteWd,
            siteGd = 2000,
            siteHeading = 0,
            sitePitch = -90,
            siteRoll = 0,
            time = 3
        ) {
            global.viewer.flyToPosition(
                new global.DC.Position(
                    Number(siteJd),
                    Number(siteWd),
                    Number(siteGd),
                    Number(siteHeading),
                    Number(sitePitch),
                    Number(siteRoll)
                ),
                function () { },
                time
            )
        },
        // sdTilesetLayer
        /**
         * 飞到指定范围
         * @param {*} polygonName 范围名称
         * @param {*} duration 时间
         */
        flytoLayer (polygonName, duration = 3) {
            global.viewer.flyTo(polygonObj[polygonName], duration)
        },
        /**
         * 添加模型
         * @param {*} titlesetName 图层名称
         * @param {*} titlesetUrl 模型地址
         * @param {*} incident 模型点击事件
         */
        addMxTileset (titlesetName, titlesetUrl, conf) {
            if (!tilesetObject[titlesetName]) tilesetObject[titlesetName] = null
            tilesetObject[titlesetName] = new global.DC.Tileset(titlesetUrl, {
                luminanceAtZenith: 0.4,
                // cullWithChildrenBounds: false,
                // cullRequestsWhileMoving: false,
                // skipLevelOfDetail: false,
                maximumScreenSpaceError: conf.maximumScreenSpaceError || 16,
                shadows: global.DC.Namespace.Cesium.ShadowMode.DISABLED,
            })
            // 地形数据添加
            tilesetObject[titlesetName].setHeight(-73)
            tilesetLayer.addOverlay(tilesetObject[titlesetName])
            // global.viewer.flyTo(tilesetObject[titlesetName])removeMxTileset
        },
        tilesetLayerFlag (type, cb) {
            if (type == 1) {
                if (this.tilesetLayerType != "") {
                    this.$message({
                        message: "请关闭模型再开始绘制",
                        type: "warning",
                    })
                    cb(false)
                    return
                }
            } else {
                if (this.tilesetLayerType == "") {
                    this.$message({
                        message: "请打开模型再开始绘制",
                        type: "warning",
                    })
                    cb(false)
                    return
                }
            }
            cb(true)
        },
        /**
         * 删除模型
         * @param {*} titlesetName 图层名称
         * @param {*} incident 模型点击事件
         */
        removeMxTileset (titlesetName) {
            if (tilesetObject[titlesetName] && tilesetObject[titlesetName] != null) {
                tilesetLayer.removeOverlay(tilesetObject[titlesetName])
                tilesetObject[titlesetName] = null
            }
        },
        /**
         * 建筑高亮显示
         * @param {*} positions 建筑范围坐标
         * @param {*}
         */
        showThreeDimensions (positions, minHeight, maxHeight) {
            console.log("showThreeDimensions--map")
            if (curPolygon != null) {
                global.viewer.scene.primitives.remove(curPolygon)
                curPolygon = null
            }
            let housePositions = JSON.parse(positions).coordinates[0]
            let floorPositions = housePositions.reduce((prev, curr) => {
                prev.push(curr[0])
                prev.push(curr[1])
                return prev
            }, [])
            curPolygon = new global.DC.Namespace.Cesium.ClassificationPrimitive({
                geometryInstances: new global.DC.Namespace.Cesium.GeometryInstance({
                    geometry: new global.DC.Namespace.Cesium.PolygonGeometry({
                        polygonHierarchy: new global.DC.Namespace.Cesium.PolygonHierarchy(
                            global.DC.Namespace.Cesium.Cartesian3.fromDegreesArray(
                                floorPositions
                            )
                        ),
                        extrudedHeight: maxHeight - 73, //分层顶部海拔
                        height: minHeight - 73, //分层底部海拔
                    }),
                    attributes: {
                        color:
                            global.DC.Namespace.Cesium.ColorGeometryInstanceAttribute.fromColor(
                                global.DC.Namespace.Cesium.Color.RED.withAlpha(0.5)
                            ),
                        show: new global.DC.Namespace.Cesium.ShowGeometryInstanceAttribute(
                            true
                        ),
                    },
                }),
                classificationType:
                    global.DC.Namespace.Cesium.ClassificationType.CESIUM_3D_TILE,
            })
            global.viewer.scene.primitives.add(curPolygon)
        },
        // 建筑高亮切换显示隐藏
        switchThreeDimensions (boolean) {
            if (!curPolygon) return
            curPolygon.show = boolean
        },
        // 清除建筑3D
        clearHouse3D () {
            global.viewer.scene.primitives.remove(curPolygon)
            curPolygon = null
        },
        registerMxClick (event) {
            this.unbindMxClick()
            window.TILESET_LABEL.forEach((item) => {
                if (
                    tilesetObject[`sdTilesetLayer${item.name}`] &&
                    tilesetObject[`sdTilesetLayer${item.name}`] != null
                ) {
                    tilesetObject[`sdTilesetLayer${item.name}`].on(
                        global.DC.MouseEventType.CLICK,
                        event
                    )
                }
            })
        },
        unbindMxClick (event) {
            window.TILESET_LABEL.forEach((item) => {
                if (
                    tilesetObject[`sdTilesetLayer${item.name}`] &&
                    tilesetObject[`sdTilesetLayer${item.name}`] != null
                ) {
                    tilesetObject[`sdTilesetLayer${item.name}`].off(
                        global.DC.MouseEventType.CLICK,
                        event
                    )
                }
            })
        },
    /**
     * 删除模型
     * @param {*} titlesetName 图层名称
     * @param {*} incident 模型点击事件
     */
    removeMxTileset (titlesetName) {
      if (tilesetObject[titlesetName] && tilesetObject[titlesetName] != null) {
        tilesetLayer.removeOverlay(tilesetObject[titlesetName])
        tilesetObject[titlesetName] = null
      }
    },
    destroyed () {
        this.$EventBus.$off("mapAddLayer")
        this.$EventBus.$off("mapRemoveLayer")
        this.$EventBus.$off("mapRemovePolygonLayer")
        this.$EventBus.$off("mapRemoveSiteLayer")
        this.$EventBus.$off("mapRemovePolygon")
        this.$EventBus.$off("mapClearLayer")
        this.$EventBus.$off("layerPointAdd")
        this.$EventBus.$off("layerPolygonAdd")
        this.$EventBus.$off("layerPolygonArrowsAdd")
        this.$EventBus.$off("layerPolylineAdd")
        this.$EventBus.$off("layerWallAdd")
        this.$EventBus.$off("rowLayerWallAdd")
        this.$EventBus.$off("getOverLayerID")
        this.$EventBus.$off("layerShow")
        this.$EventBus.$off("toPosition")
        this.$EventBus.$off("highOrLightChange")
        this.$EventBus.$off("addMxTileset")
        this.$EventBus.$off("closeMxTileset")
        this.$EventBus.$off("tilesetLayerFlag")
        this.$EventBus.$off("removeMxTileset")
        this.$EventBus.$off("flytoLayer")
        this.$EventBus.$off("showThreeDimensions")
        this.$EventBus.$off("switchThreeDimensions")
        this.$EventBus.$off("clearHouse3D")
        this.$EventBus.$off("registerMxClick")
        this.$EventBus.$off("unbindMxClick")
    /**
     * 建筑高亮显示
     * @param {*} positions 建筑范围坐标
     * @param {*}
     */
    showThreeDimensions (positions, minHeight, maxHeight) {
      console.log("showThreeDimensions--map")
      if (curPolygon != null) {
        global.viewer.scene.primitives.remove(curPolygon)
        curPolygon = null
      }
      let housePositions = JSON.parse(positions).coordinates[0]
      let floorPositions = housePositions.reduce((prev, curr) => {
        prev.push(curr[0])
        prev.push(curr[1])
        return prev
      }, [])
      curPolygon = new global.DC.Namespace.Cesium.ClassificationPrimitive({
        geometryInstances: new global.DC.Namespace.Cesium.GeometryInstance({
          geometry: new global.DC.Namespace.Cesium.PolygonGeometry({
            polygonHierarchy: new global.DC.Namespace.Cesium.PolygonHierarchy(
              global.DC.Namespace.Cesium.Cartesian3.fromDegreesArray(
                floorPositions
              )
            ),
            extrudedHeight: maxHeight - 73, //分层顶部海拔
            height: minHeight - 73, //分层底部海拔
          }),
          attributes: {
            color:
              global.DC.Namespace.Cesium.ColorGeometryInstanceAttribute.fromColor(
                global.DC.Namespace.Cesium.Color.RED.withAlpha(0.5)
              ),
            show: new global.DC.Namespace.Cesium.ShowGeometryInstanceAttribute(
              true
            ),
          },
        }),
        classificationType:
          global.DC.Namespace.Cesium.ClassificationType.CESIUM_3D_TILE,
      })
      global.viewer.scene.primitives.add(curPolygon)
    },
    // 建筑高亮切换显示隐藏
    switchThreeDimensions (boolean) {
      if (!curPolygon) return
      curPolygon.show = boolean
    },
    // 清除建筑3D
    clearHouse3D () {
      global.viewer.scene.primitives.remove(curPolygon)
      curPolygon = null
    },
    registerMxClick (event) {
      this.unbindMxClick()
      window.TILESET_LABEL.forEach((item) => {
        if (
          tilesetObject[`sdTilesetLayer${item.name}`] &&
          tilesetObject[`sdTilesetLayer${item.name}`] != null
        ) {
          tilesetObject[`sdTilesetLayer${item.name}`].on(
            global.DC.MouseEventType.CLICK,
            event
          )
        }
      })
    },
    unbindMxClick (event) {
      window.TILESET_LABEL.forEach((item) => {
        if (
          tilesetObject[`sdTilesetLayer${item.name}`] &&
          tilesetObject[`sdTilesetLayer${item.name}`] != null
        ) {
          tilesetObject[`sdTilesetLayer${item.name}`].off(
            global.DC.MouseEventType.CLICK,
            event
          )
        }
      })
    },
  },
  destroyed () {
    this.$EventBus.$off("mapAddLayer")
    this.$EventBus.$off("mapRemoveLayer")
    this.$EventBus.$off("mapRemovePolygonLayer")
    this.$EventBus.$off("mapRemoveSiteLayer")
    this.$EventBus.$off("mapRemovePolygon")
    this.$EventBus.$off("mapClearLayer")
    this.$EventBus.$off("layerPointAdd")
    this.$EventBus.$off("layerPolygonAdd")
    this.$EventBus.$off("layerPolygonArrowsAdd")
    this.$EventBus.$off("layerPolylineAdd")
    this.$EventBus.$off("layerWallAdd")
    this.$EventBus.$off("rowLayerWallAdd")
    this.$EventBus.$off("getOverLayerID")
    this.$EventBus.$off("layerShow")
    this.$EventBus.$off("toPosition")
    this.$EventBus.$off("highOrLightChange")
    this.$EventBus.$off("addMxTileset")
    this.$EventBus.$off("closeMxTileset")
    this.$EventBus.$off("tilesetLayerFlag")
    this.$EventBus.$off("removeMxTileset")
    this.$EventBus.$off("flytoLayer")
    this.$EventBus.$off("showThreeDimensions")
    this.$EventBus.$off("switchThreeDimensions")
    this.$EventBus.$off("clearHouse3D")
    this.$EventBus.$off("registerMxClick")
    this.$EventBus.$off("unbindMxClick")
  },
}
</script>
<style lang="scss" scope>
.viewer-box {
    position: relative;
    width: 100%;
    height: 100%;
  position: relative;
  width: 100%;
  height: 100%;
}
</style>
src/views/layout/index.vue
@@ -231,38 +231,38 @@
          path: '/layout/scanOrCode',
          childrenFlag: false,
          children: [
            {
              menuName: '群众上报',
              path: '/layout/scanOrCode'
            },
            // {
            //   menuName: '群众上报',
            //   path: '/layout/scanOrCode'
            // },
            {
              menuName: '九小场所',
              path: '/layout/site'
            },
            {
              menuName: '矛盾纠纷',
              path: '/layout/contradictionEventShow'
            },
            {
              menuName: '反诈宣防',
              path: '/layout/antiFraudShow'
            },
            {
              menuName: '租赁信息',
              path: '/layout/rentalInfo'
            },
            {
              menuName: '阵地管理',
              path: '/layout/positionManage'
            },
            {
              menuName: '从业人员',
              path: '/layout/practitionersManage'
            },
            {
              menuName: '扫码报警',
              path: '/layout/policeAlarmRecordsManage'
            },
            // {
            //   menuName: '矛盾纠纷',
            //   path: '/layout/contradictionEventShow'
            // },
            // {
            //   menuName: '反诈宣防',
            //   path: '/layout/antiFraudShow'
            // },
            // {
            //   menuName: '租赁信息',
            //   path: '/layout/rentalInfo'
            // },
            // {
            //   menuName: '阵地管理',
            //   path: '/layout/positionManage'
            // },
            // {
            //   menuName: '从业人员',
            //   path: '/layout/practitionersManage'
            // },
            // {
            //   menuName: '扫码报警',
            //   path: '/layout/policeAlarmRecordsManage'
            // },
            /* {
                menuName: '综合搜索',
                path: '/layout/comprehensiveSearch'