From fd1274d07f1e68ed28bdb08bd95e5bb27c4e2da1 Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Sun, 25 Jun 2023 14:24:23 +0800
Subject: [PATCH] git无法使用期间修改……

---
 src/components/map/index.vue |   69 ++++++++++++++++++++++++++++------
 1 files changed, 57 insertions(+), 12 deletions(-)

diff --git a/src/components/map/index.vue b/src/components/map/index.vue
index 3359a21..0c30baf 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-05-18 15:43:37
+ * @LastEditTime: 2023-05-30 10:15:14
  * @FilePath: \srs-police-affairs\src\components\map\index.vue
  * @Description: 公用地图组件
  * 
@@ -12,6 +12,14 @@
     <div class="viewer-box" id="viewer-container" @click="showImgBtn = false">
         <slot ref="mainContent" name="mainContent"></slot>
         <slot name="showButton"></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>
+
         <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>
@@ -190,7 +198,8 @@
             showImgBtn: false,
             imgtype: 0,
             tilesetLayerType: '',
-            angleCheck: true
+            angleCheck: true,
+            compassBtnTranslate: 'rotate(0deg)'
         }
     },
 
@@ -217,6 +226,12 @@
                         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()
@@ -584,11 +599,40 @@
                 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.setView({
+            global.viewer.camera.flyTo({
                 // Cesium的坐标是以地心为原点,一向指向南美洲,一向指向亚洲,一向指向北极州
                 // fromDegrees()方法,将经纬度和高程转换为世界坐标
                 destination: global.DC.Namespace.Cesium.Cartesian3.fromDegrees(
@@ -596,11 +640,12 @@
                 ),
                 orientation: {
                     // 指向
-                    heading: global.DC.Namespace.Cesium.Math.toRadians(0, 0),
+                    heading: global.viewer.camera.heading,
                     // 视角
                     pitch: global.DC.Namespace.Cesium.Math.toRadians(-90),
-                    roll: 0.0
-                }
+                    roll: global.viewer.camera.roll
+                },
+                duration: 3
             })
         },
 
@@ -839,12 +884,14 @@
                 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')
             }
 
@@ -963,11 +1010,9 @@
             let pointElement
             let labelElement
 
-            let alt = params.alt || 2
-
             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), 4), 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 = [32, 32]
                 pointElement.style = "clustering"
@@ -979,7 +1024,7 @@
                 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), 4), 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({
@@ -996,14 +1041,14 @@
                 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(alt)), params.url)
-                pointElement = new global.DC.Billboard(new global.DC.Position(Number(params.lng), Number(params.lat), 4), params.url)
+                pointElement = new global.DC.Billboard(new global.DC.Position(Number(params.lng), Number(params.lat), 0), 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(alt)), params.text)
-                labelElement = new global.DC.Label(new global.DC.Position(Number(params.lng), Number(params.lat), 4), params.text)
+                labelElement = new global.DC.Label(new global.DC.Position(Number(params.lng), Number(params.lat), 0), params.text)
                 labelElement.setStyle({
                     fillColor: global.DC.Color.CRIMSON,
                     style: global.DC.Namespace.Cesium.LabelStyle.FILL_AND_OUTLINE,

--
Gitblit v1.9.3