From a1c2fecb75c9c8fef3345dee6d071faae6d3dccd Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Tue, 28 Feb 2023 14:19:37 +0800
Subject: [PATCH] 模型加载的更改

---
 src/components/map/index.vue |  291 +++++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 225 insertions(+), 66 deletions(-)

diff --git a/src/components/map/index.vue b/src/components/map/index.vue
index 44e4bb1..9ed09b0 100644
--- a/src/components/map/index.vue
+++ b/src/components/map/index.vue
@@ -2,7 +2,7 @@
  * @Author: shuishen 1109946754@qq.com
  * @Date: 2022-08-18 17:00:30
  * @LastEditors: shuishen 1109946754@qq.com
- * @LastEditTime: 2023-02-09 14:52:36
+ * @LastEditTime: 2023-02-28 14:16:16
  * @FilePath: \srs-police-affairs\src\components\map\index.vue
  * @Description: 公用地图组件
  * 
@@ -15,51 +15,104 @@
         <!-- 全屏控制按钮 -->
         <div class="screen-full-btn">
             <el-tooltip v-if="isFullscreen" content="缩放" placement="bottom" effect="dark">
-                <i
-                    class="fa fa-compress"
-                    style="vertical-align: middle; cursor: pointer"
-                    @click="fullscreenchange"
-                ></i>
+                <i class="fa fa-compress" style="vertical-align: middle; cursor: pointer" @click="fullscreenchange"></i>
             </el-tooltip>
             <el-tooltip v-if="!isFullscreen" content="全屏" placement="bottom" effect="dark">
-                <i
-                    class="fa fa-expand"
-                    style="vertical-align: middle; cursor: pointer"
-                    @click="fullscreenchange"
-                ></i>
+                <i class="fa fa-expand" style="vertical-align: middle; cursor: pointer" @click="fullscreenchange"></i>
             </el-tooltip>
         </div>
         <!-- 切换矢量图按钮 -->
-        <div
-            class="image-switch-icon-btn"
-            title="切换影像"
-            @mouseover="showImgBtn = true"
-            @mouseleave="showImgBtn = false"
-        >
-            <div class="icon-box">
+        <div class="image-switch-icon-btn">
+            <div class="icon-box" @click.stop="showImgBtn = !showImgBtn">
                 <img src="/img/base_map.png" alt />
             </div>
 
-            <div
-                class="image-switch-img-btn"
-                v-show="showImgBtn"
-                @mouseover="showImgBtn = true"
-                @mouseleave="showImgBtn = false"
-            >
-                <div class="img" @click="switchImg">
-                    <span :class="{ on: imgtype == 0 }">影像</span>
+            <div class="image-switch-img-btn" v-show="showImgBtn">
+                <div class="layer-change-box">
+                    <div class="title">
+                        底图
+                        <div class="close" @click.stop="showImgBtn = false" title="关闭"></div>
+                    </div>
+                    <div class="content">
+                        <div class="img" @click="switchImg">
+                            <span :class="{ on: imgtype == 0 }">影像</span>
+                        </div>
+                        <div class="elec" @click="switchElec">
+                            <span :class="{ on: imgtype == 1 }">矢量</span>
+                        </div>
+                    </div>
                 </div>
-                <div class="elec" @click="switchElec">
-                    <span :class="{ on: imgtype == 1 }">矢量</span>
+                <div class="layer-change-box">
+                    <div class="title">
+                        模型
+                    </div>
+                    <div class="content">
+                        <div class="img light" @click="highOrLightChange('light')">
+                            <span :class="{ on: tilesetLayerType == 'light' }">轻量</span>
+                        </div>
+                        <div class="elec high" @click="highOrLightChange('high')">
+                            <span :class="{ on: tilesetLayerType == 'high' }">高精</span>
+                        </div>
+                    </div>
                 </div>
             </div>
         </div>
 
         <map-popup></map-popup>
+
+        <assemble-box></assemble-box>
     </div>
 </template>
 
 <script>
+
+
+let tile3DUrl = ''
+
+if (process.env.NODE_ENV == 'development') {
+    // 开发
+    tile3DUrl = window.BASE_URL_CONFIG.VUE_APP_OUTER_NET_TILEURL
+} else {
+    // 部署
+    tile3DUrl = window.BASE_URL_CONFIG.VUE_APP_INTRANET_TILEURL
+}
+
+let label = [
+    '01',
+    '02',
+    '03',
+    '04',
+    '05',
+    '06',
+    '07',
+    '08',
+    '09',
+    '10',
+    '11',
+    '12',
+    '13',
+    '14',
+    '15',
+    '16',
+    '17',
+    '18',
+    '19',
+    '20',
+    '21',
+    '22',
+    '23',
+    '24',
+    '25',
+    '26',
+    '27',
+    '28',
+    '29',
+    '30',
+    '31',
+    '32',
+    '33',
+    '34'
+]
 
 var siteEntitylayers = null
 
@@ -102,6 +155,7 @@
     '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',
@@ -128,6 +182,7 @@
             carTotal: 0,
             showImgBtn: false,
             imgtype: 0,
+            tilesetLayerType: ''
         }
     },
 
@@ -153,6 +208,8 @@
                     }
                 }
             })
+
+            global.viewer.setPitchRange(-90, -45)
 
             // global.viewer.scene.globe.depthTestAgainstTerrain = false
 
@@ -218,15 +275,21 @@
             that.switchImg()
 
             // 外网
-            // global.viewer.imageryLayers.addImageryProvider(
-            //     new global.DC.Namespace.Cesium.UrlTemplateImageryProvider({
-            //         url: 'http://t{s}.tianditu.gov.cn/DataServer?T=img_w&x={x}&y={y}&l={z}&tk=e45274b0235bb913eceb393aabbf9c9c',
-            //         subdomains: ['0', '1', '2', '3', '4', '5', '6', '7'],
-            //         format: 'image/jpeg',
-            //         show: true,
-            //         maximumLevel: 18
-            //     })
-            // )
+            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=e45274b0235bb913eceb393aabbf9c9c',
+                    subdomains: ['0', '1', '2', '3', '4', '5', '6', '7'],
+                    format: 'image/jpeg',
+                    show: true,
+                    maximumLevel: 18
+                })
+            )
+
+            global.viewer.imageryLayers.addImageryProvider(
+                new global.DC.Namespace.Cesium.UrlTemplateImageryProvider({
+                    url: '/sryx/{z}/{x}/{y}.png',
+                })
+            )
 
             // 设置地图初始位置,角度等
             global.viewer.camera.setView({
@@ -242,23 +305,6 @@
                     pitch: global.DC.Namespace.Cesium.Math.toRadians(-90),
                     roll: 0.0
                 }
-            })
-
-            let sqTitleLayer = new global.DC.TilesetLayer('sqTitleLayer')
-            global.viewer.addLayer(sqTitleLayer)
-            let sqTileset = new global.DC.Tileset(
-                // 内网
-                // 'http://10.141.11.11:18080/sf3d/361102/model/wanda/tileset.json'
-                // 外网
-                'http://192.168.0.112:18080/sf3d/361102/model/wanda/tileset.json'
-            )
-
-            sqTileset.setHeight(-72)
-            sqTitleLayer.addOverlay(sqTileset)
-
-            sqTileset.on(global.DC.MouseEventType.CLICK, (e) => {
-                // console.log(e, e.wgs84Position.alt, 989999)
-                that.$EventBus.$emit('stdgetAoiByPt', { lng: e.wgs84Position.lng, lat: e.wgs84Position.lat, height: e.wgs84Position.alt })
             })
 
             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]]
@@ -379,6 +425,10 @@
             that.mapRemoveLayer(params.layerName, params.type)
         })
 
+        this.$EventBus.$on('mapRemovePolygonLayer', (params) => {
+            that.mapRemovePolygonLayer(params.layerName, params.polygonName, params.type)
+        })
+
         this.$EventBus.$on('mapClearLayer', (params) => {
             that.mapClearLayer(params.layerName, params.type)
         })
@@ -398,6 +448,10 @@
 
         this.$EventBus.$on('layerPolylineAdd', (params) => {
             that.layerPolylineAdd(params.layerName, params.positions, params.material, params.width, params.params, params.incident)
+        })
+
+        this.$EventBus.$on('getOverLayerID', (params) => {
+            that.getOverLayerID(params.layerName, params.ids, params.cb)
         })
 
         this.$EventBus.$on('layerShow', (params) => {
@@ -447,6 +501,46 @@
     },
 
     methods: {
+        /**
+         * @description: 高精度模型和轻量模型切换
+         * @param {*} type
+         * @return {*}
+         */
+        highOrLightChange (type) {
+            this.removeMxTileset('sdTilesetLayer', this.housingIndent)
+
+            // this.addMxTileset('sdTilesetLayer', `${tile3DUrl}/sf3d/361102/model/wanda/tileset.json`, this.housingIndent)
+
+
+            if (this.tilesetLayerType == type) {
+                this.tilesetLayerType = ''
+
+            } else {
+                this.tilesetLayerType = type
+
+                type == 'light' ?
+                    label.forEach(item => {
+                        this.addMxTileset('sdTilesetLayer', `${tile3DUrl}/sf3d/361102/model/all/${item}/tileset.json`, this.housingIndent)
+                    }) :
+                    label.forEach(item => {
+                        this.addMxTileset('sdTilesetLayer', `${tile3DUrl}/sf3d/361102/model/all1/${item}/tileset.json`, this.housingIndent)
+                    })
+            }
+
+            this.showImgBtn = false
+        },
+
+        /**
+         * @description: 社区感知下,模型的点击事件
+         * @param {*} e
+         * @return {*}
+         */
+        housingIndent (e) {
+            if (this.$route.path == '/layout/house') {
+                this.$EventBus.$emit('housingIndent', e)
+            }
+        },
+
         // 模型的点击事件
         tilesetClick (e) {
             if (this.$route.path != "/layout/house") {
@@ -460,7 +554,7 @@
             baseLayers != null && global.viewer.imageryLayers.remove(baseLayers)
             baseLayers = global.viewer.imageryLayers.addImageryProvider(
                 new global.DC.Namespace.Cesium.WebMapTileServiceImageryProvider({
-                    url: "http://10.141.11.11:80/ysapi/geoserver/gwc/service/wmts",
+                    url: `${window.BASE_URL_CONFIG.VUE_APP_MAP_YX}/geoserver/gwc/service/wmts`,
                     layer: "test",
                     style: "",
                     format: "image/png",
@@ -481,7 +575,7 @@
             baseLayers != null && global.viewer.imageryLayers.remove(baseLayers)
             baseLayers = global.viewer.imageryLayers.addImageryProvider(
                 new global.DC.Namespace.Cesium.WebMapTileServiceImageryProvider({
-                    url: "http://10.141.11.11:8090/MapTileService/wmts?STORETYPE=merged-dat&PROJECTION=4326",
+                    url: `${window.BASE_URL_CONFIG.VUE_APP_MAP_SL}/MapTileService/wmts?STORETYPE=merged-dat&PROJECTION=4326`,
                     layer: "wmts_4326_361100",
                     style: "default",
                     format: "image/png",
@@ -556,7 +650,9 @@
             } else if (type == 'ClusterLayer') {
                 if (!layersObjcect[layerName]) layersObjcect[layerName] = null
 
-                layersObjcect[layerName] = new global.DC.ClusterLayer(layerName)
+                layersObjcect[layerName] = new global.DC.ClusterLayer(layerName, {
+                    pixelRange: 4
+                })
 
                 layersObjcect[layerName].addTo(global.viewer)
             } else if (type == 'HeatLayer') {
@@ -578,6 +674,20 @@
                 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])
                 }
             }
         },
@@ -611,6 +721,7 @@
             }
 
             let pointElement
+            let labelElement
 
             if (type == "billboard") {
                 pointElement = new global.DC.Billboard(new global.DC.Position(Number(params.lng), Number(params.lat), Number(params.alt)), params.url)
@@ -619,19 +730,38 @@
                 layersObjcect[layerName].addOverlay(pointElement)
                 pointElement.on(global.DC.MouseEventType.CLICK, incident)
             } else if (type == "label") {
-                pointElement = new global.DC.Label(new global.DC.Position(Number(params.lng), Number(params.lat), Number(params.alt)), params.text)
-                pointElement.setStyle({
+                labelElement = new global.DC.Label(new global.DC.Position(Number(params.lng), Number(params.lat), Number(params.alt)), params.text)
+                labelElement.setStyle({
+                    fillColor: global.DC.Color.CRIMSON,
+                    style: global.DC.Namespace.Cesium.LabelStyle.FILL_AND_OUTLINE,
+                    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") {
+                pointElement = new global.DC.Billboard(new global.DC.Position(Number(params.lng), Number(params.lat), Number(params.alt)), params.url)
+                pointElement.size = [32, 32]
+                pointElement.attrParams = params
+                layersObjcect[layerName].addOverlay(pointElement)
+                pointElement.on(global.DC.MouseEventType.CLICK, incident)
+
+                labelElement = new global.DC.Label(new global.DC.Position(Number(params.lng), Number(params.lat), Number(params.alt)), params.text)
+                labelElement.setStyle({
                     fillColor: global.DC.Color.CRIMSON,
                     style: global.DC.Namespace.Cesium.LabelStyle.FILL_AND_OUTLINE,
                     outlineColor: global.DC.Color.WHITE, // 边框颜色
                     outlineWidth: 4, // 边框大小,
                     font: '16px sans-serif',
-                    pixelOffset: { x: 0, y: -30 },
-                    distanceDisplayCondition: distanceDisplayCondition
+                    pixelOffset: { x: 0, y: -30 }
                 })
-                pointElement.attrParams = params
-                layersObjcect[layerName].addOverlay(pointElement)
-                pointElement.on(global.DC.MouseEventType.CLICK, incident)
+                labelElement.attrParams = params
+                layersObjcect[layerName].addOverlay(labelElement)
+                labelElement.on(global.DC.MouseEventType.CLICK, incident)
             } else if (type == 'HeatPoint') {
                 layersObjcect[layerName].setPositions(params.positions)
             }
@@ -691,6 +821,36 @@
             polyline.on(global.DC.MouseEventType.CLICK, incident)
 
             layersObjcect[layerName].addOverlay(polyline)
+        },
+
+        /**
+         * @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)
+
         },
 
         /**
@@ -754,8 +914,7 @@
                 shadows: global.DC.Namespace.Cesium.ShadowMode.DISABLED
             })
 
-            tilesetObject[titlesetName].setHeight(5)
-
+            tilesetObject[titlesetName].setHeight(-72)
 
             tilesetLayer.addOverlay(tilesetObject[titlesetName])
 

--
Gitblit v1.9.3