| | |
| | | * 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 |
| | |
| | | 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 = {} |
| | | |
| | |
| | | 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" |
| | |
| | | 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> |