From 0efcb9f12301633ffe5c77a97cef585e2cc39e73 Mon Sep 17 00:00:00 2001
From: jihongshun <1151753686@qq.com>
Date: 星期五, 01 八月 2025 13:21:25 +0800
Subject: [PATCH] 偏移算法优化

---
 src/views/system/project/components/addPorjectDialog.vue |   91 ++++++++++++++++++++++++++++++---------------
 1 files changed, 61 insertions(+), 30 deletions(-)

diff --git a/src/views/system/project/components/addPorjectDialog.vue b/src/views/system/project/components/addPorjectDialog.vue
index 89e5cc5..ee57820 100644
--- a/src/views/system/project/components/addPorjectDialog.vue
+++ b/src/views/system/project/components/addPorjectDialog.vue
@@ -70,8 +70,8 @@
 import CesiumMap from "../../../../utils/components/cesium-map.vue";
 import chooseDeviceDialog from './chooseDeviceDialog.vue';
 import chooseModelDialog from './chooseModelDialog.vue';
-import { obtainRealData} from "@/api/system/template"
-
+import { obtainRealData ,buildKmz} from "@/api/system/template"
+let rotationAngle = Cesium.Math.toRadians(0)
 export  default{
   components: {
     CesiumMap,
@@ -99,9 +99,9 @@
       this.$emit('close')
     },
     flyToLocal(row){
-      console.log(row)
-       const position = Cesium.Cartesian3.fromDegrees(row.longitude,row.latitude, row.altitude);
-
+       const position = Cesium.Cartesian3.fromDegrees(row.longitude,row.latitude, row.deviceHeight);
+      // rotationAngle  = Cesium.Math.toRadians(row.face)  ||  Cesium.Math.toRadians(0)
+      rotationAngle  = Cesium.Math.toRadians(row.face)  ||  Cesium.Math.toRadians(0)
       // 璁剧疆妯″瀷鏂瑰悜锛堝彲閫夛級
       const heading = Cesium.Math.toRadians(row.face); // 鏈濅笢鍗楁柟鍚�
       const pitch = 0;
@@ -196,7 +196,6 @@
     },
     receiveModel(obj){
       //deal閫昏緫
-      console.log(obj)
       let flightTemplateId =obj.modelObj.id
       let deviceId = obj.deviceId
       this.dealTableTemplate(obj)
@@ -204,10 +203,9 @@
       obtainRealData(flightTemplateId,deviceId).then(res=>{
         console.log(res)
         let treeDealData = this.transformFlightData(res.data?.coordinateSystemVoS || [])
-        console.log(treeDealData)
         this.dealTreeMerge(obj,treeDealData)
-        // const aaa = this.rotateAllPoints(this.treeData || [],res.data.longitude,res.data.latitude,res.data.height)
-         this.drawConnectionsWithLabels(this.treeData)
+        this.rotateAllPoints(this.treeData || [],res.data.longitude,res.data.latitude,res.data.height)
+        this.drawConnectionsWithLabels(this.treeData)
       })
       // this.dealTreeMerge(obj)
     },
@@ -261,10 +259,8 @@
     },
     drawConnectionsWithLabels(devices) {
       const airPoints = [];
-
       devices.forEach(device => {
         if (!Array.isArray(device.children)) return;
-
         device.children.forEach(airPoint => {
           // 绌轰腑鐐逛綅缃�
           const airPos = Cesium.Cartesian3.fromDegrees(
@@ -351,21 +347,9 @@
     },
     rotateAllPoints(dataList,towerLongitude,towerLatitude,towerhHight) {
       return dataList.map(item => {
-        console.log(item)
-        console.log(towerLongitude)
-        console.log(towerLatitude)
-        console.log(towerhHight)
-        const groundPoint = Cesium.Cartesian3.fromDegrees(item.longitude, item.latitude, item.height);
         const towerPoint = Cesium.Cartesian3.fromDegrees(towerLongitude, towerLatitude, towerhHight);
-        let rotationAngle = Cesium.Math.toRadians(135)
-        // 鏃嬭浆鍦伴潰鐐规湰韬紙浼氬彉锛屼絾缁曡嚜韬棆杞笉浼氱Щ鍔級
-        const newGroundPoint = this.rotateAroundPoint( groundPoint,towerPoint, rotationAngle);
-        const newGroundCarto = Cesium.Cartographic.fromCartesian(newGroundPoint);
         const newGround = {
           ...item,
-          longitude: Cesium.Math.toDegrees(newGroundCarto.longitude),
-          latitude: Cesium.Math.toDegrees(newGroundCarto.latitude),
-          height: newGroundCarto.height
         };
         console.log(newGround)
         // 澶勭悊瀛愮┖涓偣
@@ -373,13 +357,20 @@
           const airPoint = Cesium.Cartesian3.fromDegrees(child.longitude, child.latitude, child.height);
           const rotatedAirPoint = this.rotateAroundPoint( airPoint,towerPoint, rotationAngle);
           const rotatedAirCarto = Cesium.Cartographic.fromCartesian(rotatedAirPoint);
-
-          return {
-            ...child,
-            longitude: Cesium.Math.toDegrees(rotatedAirCarto.longitude),
-            latitude: Cesium.Math.toDegrees(rotatedAirCarto.latitude),
-            height: rotatedAirCarto.height
-          };
+          child.longitude = Cesium.Math.toDegrees(rotatedAirCarto.longitude)
+          child.latitude = Cesium.Math.toDegrees(rotatedAirCarto.latitude)
+          child.height = rotatedAirCarto.height
+          child.children = child.children.map(sonChild => {
+            const groundPoint = Cesium.Cartesian3.fromDegrees(sonChild.longitude, sonChild.latitude, sonChild.height);
+            const newGroundPoint = this.rotateAroundPoint( groundPoint,towerPoint, rotationAngle);
+            const newGroundCarto = Cesium.Cartographic.fromCartesian(newGroundPoint);
+            return {
+              ...sonChild,
+              longitude: Cesium.Math.toDegrees(newGroundCarto.longitude),
+              latitude: Cesium.Math.toDegrees(newGroundCarto.latitude),
+              height: newGroundCarto.height
+            };
+          });
         });
 
         return newGround;
@@ -388,6 +379,7 @@
     //聽璁$畻鐐笰缁曠偣B閫嗘椂閽堟棆杞寚瀹氳搴﹀悗鐨勬柊浣嶇疆
     //  绌轰腑鐐规垨鑰呭湴闈㈢偣绗涘崱灏斿潗鏍� 濉旂殑绗涘崱灏斿潗鏍�    濉旂殑鏈濆悜鍊�
     rotateAroundPoint(startPoint,pivotPoint,rotationAngle) {
+      console.log(rotationAngle)
       //聽鍒涘缓涓�涓粠B鐐瑰埌鏈湴鍧愭爣绯荤殑杞崲鐭╅樀锛堜笢鏂瑰悜涓篨杞达紝鍖楁柟鍚戜负Y杞达紝鍨傜洿鏂瑰悜涓篫杞达級
      const transformationMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(pivotPoint);
       //聽鑾峰彇涓栫晫鍧愭爣绯诲埌鏈湴鍧愭爣绯荤殑杞崲鐭╅樀
@@ -402,7 +394,46 @@
      return Cesium.Matrix4.multiplyByPoint(transformationMatrix,聽new聽Cesium.Cartesian3(rotatedX,聽rotatedY,聽rotatedZ),聽new聽Cesium.Cartesian3());
     },
     submit(){
+      console.log(this.treeData)
+
+      const routePointList = [];
+
+      this.treeData.forEach(device => {
+        device.children.forEach((airPoint, index) => {
+          routePointList.push({
+            routePointIndex: routePointList.length,
+            longitude: airPoint.longitude,
+            latitude: airPoint.latitude,
+            height: airPoint.height,
+            isStartAndEndPoint: false,
+            coordinatePointReq: {
+                height: airPoint.children[0].height,
+                latitude:airPoint.children[0].latitude,
+                longitude: airPoint.children[0].longitude
+              }
+          });
+        });
+      });
+
+      // 鏍囪棣栧熬涓� true
+      if (routePointList.length > 0) {
+        routePointList[0].isStartAndEndPoint = true;
+        routePointList[routePointList.length - 1].isStartAndEndPoint = true;
+      }
+
+      console.log(routePointList);
+      let params  = {
+        routePointList:routePointList
+      }
       console.log('鐢熸垚鑸嚎')
+      buildKmz(params).then(res=>{
+        if(res.code == 200) {
+           this.$message({
+              message: '鐢熸垚鑸嚎鎴愬姛',
+              type: 'success'
+            })
+        }
+      })
     }
   }
 }

--
Gitblit v1.9.3