From 417c46988366e8c11f54230345f2e6840a0025f7 Mon Sep 17 00:00:00 2001
From: jihongshun <1151753686@qq.com>
Date: 星期三, 16 七月 2025 16:43:00 +0800
Subject: [PATCH] 项目相关

---
 src/views/system/shootPoint/index.vue                       |   14 
 src/api/system/template.js                                  |   24 +
 src/views/system/shootPoint/components/shootPointDialog.vue |   95 +++++
 src/views/system/project/components/chooseModelDialog.vue   |   46 +-
 src/utils/components/init-map.vue                           |   10 
 src/views/system/project/components/addPorjectDialog.vue    |  646 ++++++---------------------------------
 src/views/system/model/components/modelDialog.vue           |   50 +-
 src/views/system/device/components/deviceDialog.vue         |   21 
 src/views/system/project/index.vue                          |    2 
 9 files changed, 298 insertions(+), 610 deletions(-)

diff --git a/src/api/system/template.js b/src/api/system/template.js
index 9d0387a..9354c60 100644
--- a/src/api/system/template.js
+++ b/src/api/system/template.js
@@ -8,3 +8,27 @@
     data: data
   });
 }
+
+// 鏌ヨ鍙傛暟璇︾粏
+export function getPointInfo(id) {
+  return request({
+    url: '/tower/point/' + id,
+    method: 'get'
+  });
+}
+
+// 鏍规嵁璁惧di鑾峰彇璁惧鐨勯琛岃埅绾挎ā鐗�
+export function obtainRealData(flightTemplateId, deviceId) {
+  return request({
+    url: `/tower/route/getTrueBearing/${flightTemplateId}/${deviceId}`,
+    method: 'get'
+  });
+}
+
+// 鏍规嵁璁惧di鑾峰彇璁惧鐨勯琛岃埅绾挎ā鐗�
+export function flyDataInfo(deviceId) {
+  return request({
+    url: '/tower/point/device/' + deviceId,
+    method: 'get'
+  });
+}
diff --git a/src/utils/components/init-map.vue b/src/utils/components/init-map.vue
index bbc8421..3aebbca 100644
--- a/src/utils/components/init-map.vue
+++ b/src/utils/components/init-map.vue
@@ -36,8 +36,8 @@
 let  viewerM;
 let  viewerC;
 let  counter = 0;
- let globalon  = 0
-let globalat = 0
+let  globalon  = 0
+let  globalat = 0
 let  pois = [globalon, globalat,0] 
 
 // let  pois = [0, 0,0] 
@@ -78,10 +78,10 @@
     }
   },
   mounted(){
-    console.log('111111111111111111')
      this.initCesium();
   },
   beforeDestroy() {
+    counter = 0
     this.removeKeyboardEvents();
     if (this.animationFrameId) cancelAnimationFrame(this.animationFrameId);
     if (viewerC) viewerC.destroy();
@@ -90,6 +90,8 @@
     initCesium() {
       viewerM = this.initViewer(this.$refs.cesiumContainer.id);
       viewerC = this.initViewer(this.$refs.cesiumCamera.id);
+      window.viewerM = viewerM;
+      window.viewerC = viewerC;
       // 馃挕 鍦ㄨ繖閲岀户缁皟鐢� measure.js / camera.js / botton.js 绛夐�昏緫
       // 渚嬪锛歸indow.registerMeasureTools(viewerM)
       setTimeout(()=>{
@@ -147,7 +149,7 @@
       
       // // 鍏抽棴鍏夌収鏁堟灉
       // viewer.scene.globe.enableLighting = false; // 鍏抽棴鍏夌収鏁堟灉
-      window.viewer = viewer;
+      
     //    viewer.imageryLayers.add(bdtvectoranoimagery);
       viewer._cesiumWidget._creditContainer.style.display="none";  
       return viewer;
diff --git a/src/views/system/device/components/deviceDialog.vue b/src/views/system/device/components/deviceDialog.vue
index fdf3e42..ee4c403 100644
--- a/src/views/system/device/components/deviceDialog.vue
+++ b/src/views/system/device/components/deviceDialog.vue
@@ -74,19 +74,25 @@
       this.resetForm("form");
 
       if (ids) {
+        this.getModel()
         // 缂栬緫
         this.$api.detail('/tower/device', ids).then(res => {
+          console.log(res)
           this.form = res.data
           this.open = true
           this.$nextTick(() => {
+            console.log(this.form)
             this.$refs.cesiumMapSelctPoint.showPickPoint({
               longitude: +this.form.longitude,
               latitude: +this.form.latitude,
-              altitude: +this.form.altitude,
+              height: +this.form.height,
             })
+            console.log(this.modelListData)
             let url = this.modelListData.filter(item=>item.id == this.form.modelId)[0].modelRoute
+            console.log(url)
             this.modelUrl = url
-            const position = Cesium.Cartesian3.fromDegrees(this.form.longitude, this.form.latitude, this.form.altitude);
+            const position = Cesium.Cartesian3.fromDegrees(this.form.longitude, this.form.latitude, this.form.height);
+            console.log(position)
             // 璁剧疆妯″瀷鏂瑰悜锛堝彲閫夛級
             let model = viewer.entities.getById("MyModel");
             const heading = Cesium.Math.toRadians(this.form.face); // 鏈濅笢鍗楁柟鍚�
@@ -122,19 +128,20 @@
       }
     },
     handleSelectAddress(data) {
+      console.log(data)
       this.$set(this.form, 'longitude', data.longitude)
       this.$set(this.form, 'latitude', data.latitude)
-      this.$set(this.form, 'altitude', data.altitude)
+      this.$set(this.form, 'height', data.altitude)
       this.$refs.form.validateField('longitude')
       this.$refs.form.validateField('latitude')
-      this.$refs.form.validateField('altitude')
+      this.$refs.form.validateField('height')
     },
     submitForm() {
       this.$refs["form"].validate(valid => {
         console.log(this.form)
         this.form.longitude = Number(this.form.longitude)
         this.form.latitude = Number(this.form.latitude)
-        this.form.altitude = Number(this.form.altitude)
+        this.form.height = Number(this.form.height)
         this.form.face = Number(this.form.face)
         if (valid) {
           this.$api.save('tower/device/', 'id', Object.assign({}, this.form)).then(res => {
@@ -178,13 +185,13 @@
         this.$message.error("璇疯緭鍏ョ含搴�");
         return;
       }
-      if (!this.form.altitude) {
+      if (!this.form.height) {
         this.$message.error("璇疯緭鍏ラ珮搴�");
         return;
       }
       //鍔ㄦ�佺粡绾害鏈濆悜 鍔犺浇妯″瀷浣嶇疆棰勮
       // const position = Cesium.Cartesian3.fromDegrees(0, 0, 0);
-      const position = Cesium.Cartesian3.fromDegrees(this.form.longitude, this.form.latitude, this.form.altitude);
+      const position = Cesium.Cartesian3.fromDegrees(this.form.longitude, this.form.latitude, this.form.height);
       // 璁剧疆妯″瀷鏂瑰悜锛堝彲閫夛級
       // const heading = Cesium.Math.toRadians(135); // 鏈濅笢鍗楁柟鍚�
       let model = viewer.entities.getById("MyModel");
diff --git a/src/views/system/model/components/modelDialog.vue b/src/views/system/model/components/modelDialog.vue
index e9fefad..ab34088 100644
--- a/src/views/system/model/components/modelDialog.vue
+++ b/src/views/system/model/components/modelDialog.vue
@@ -13,6 +13,9 @@
                 :value="dict.value"></el-option>
             </el-select>
           </el-form-item>
+          <el-form-item label="妯″瀷楂樺害" prop="modelHeight">
+            <el-input v-model="form.modelHeight" placeholder="璇疯緭鍏ユā鍨嬮珮搴�" />
+          </el-form-item>
           <el-form-item label="鏂囦欢涓婁紶" prop="modelRoute">
             <el-upload class="upload-demo" action="" :auto-upload="false" accept=".glb"
                 :on-change="getFile" :limit="1">
@@ -67,9 +70,9 @@
         modelName: [
           { required: true, message: '璇疯緭鍏ユā鍨嬪悕绉�', trigger: 'blur' }
         ],
-        deptId: [
-          { required: true, message: '褰掑睘閮ㄩ棬' } // trigger鐩戝惉涓嶅埌 浣跨敤@input鍗曠嫭鏍¢獙vue-treeSelect琛ㄥ崟椤�
-        ]
+        modelHeight: [
+          { required: true, message: '璇疯緭鍏ユā鍨嬪悕绉�', trigger: 'blur' }
+        ],
       },
       // 閮ㄩ棬鏁版嵁
       deptOptions: null,
@@ -88,7 +91,7 @@
           this.open = true
           this.$nextTick(() => {
             this.$refs.cesiumMapNoSelect.clearMap()
-            this.addModel()
+            this.addModel(this.form)
           })
         })
       } else {
@@ -134,42 +137,33 @@
         }
       });
     },
-    addModel(){
+    addModel(row){
       console.log(window)
       console.log(window.viewer)
-      // viewer.entities.add({
-      //   position: Cesium.Cartesian3.fromDegrees(0, 0, 0),
-      //   model: {
-      //     uri: "/Model/tower.glb",
-      //     scale: 10000,
-      //     minimumPixelSize: 50,
-      //   },
-      // });
-      // const position = Cesium.Cartesian3.fromDegrees(139.745433, 35.658581, 0);
       const position = Cesium.Cartesian3.fromDegrees(0, 0, 0);
 
       // 璁剧疆妯″瀷鏂瑰悜锛堝彲閫夛級
-      const heading = Cesium.Math.toRadians(135); // 鏈濅笢鍗楁柟鍚�
+      const heading = Cesium.Math.toRadians(0); // 鏈濅笢鍗楁柟鍚�
       const pitch = 0;
       const roll = 0;
       const orientation = Cesium.Transforms.headingPitchRollQuaternion(
         position,
         new Cesium.HeadingPitchRoll(heading, pitch, roll)
       );
+      if(row){
+        const entity = viewer.entities.add({
+          name: "MyModel",
+          position: position,
+          orientation: orientation,
+          model: {
+            uri: row.modelRoute, // 鏇挎崲鎴愪綘鐨勬ā鍨嬭矾寰�
+          },
+        });
+        console.log(entity)
 
-      // 鍔犺浇 glTF 妯″瀷
-      const entity = viewer.entities.add({
-        name: "MyModel",
-        position: position,
-        orientation: orientation,
-        model: {
-          uri: "/Model/tower.glb", // 鏇挎崲鎴愪綘鐨勬ā鍨嬭矾寰�
-        },
-      });
-      console.log(entity)
-
-      // 椋炶鍒版ā鍨嬩綅缃�
-      viewer.flyTo(entity)
+        // 椋炶鍒版ā鍨嬩綅缃�
+        viewer.flyTo(entity)
+      }
     },
     cancel() {
       this.$refs.cesiumMapNoSelect.clearMap()
diff --git a/src/views/system/project/components/addPorjectDialog.vue b/src/views/system/project/components/addPorjectDialog.vue
index fa4de99..bed4cfe 100644
--- a/src/views/system/project/components/addPorjectDialog.vue
+++ b/src/views/system/project/components/addPorjectDialog.vue
@@ -10,12 +10,8 @@
           <el-col :span=6>
               <el-card class="noScroll">
                 <div class="chooseModel">
-                  <!-- <el-button type="primary" @click='chooseModel'>娣诲姞璁惧</el-button> -->
                   <div class="fontJust">璁惧鍒楄〃</div>
                    <el-button @click="addDevice"> 鏂板</el-button>
-                   <el-button @click="draw"> 娓叉煋</el-button>
-                   <el-button @click="test"> 杞崲</el-button>
-                   <el-button @click="huixian"> 0.0</el-button>
                   <el-table
                     :data="tableData"
                     max-height = '180'
@@ -75,6 +71,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"
+
 export  default{
   components: {
     CesiumMap,
@@ -85,257 +83,7 @@
     return{
        dialogVisible :true,
         tableData: [],
-        treeData:[
-    {
-        "createBy": null,
-        "createTime": null,
-        "updateBy": null,
-        "updateTime": null,
-        "remark": null,
-        "id": "3c5fc76c46c54c1187ff0bbcc092194b",
-        "modelId": "6257cf734cf94c7caae0dee2ac2231d1",
-        "deviceName": "璁惧3",
-        "deviceType": null,
-        "longitude": 125.01255362568844,
-        "latitude": 46.40803605631184,
-        "altitude": -0.029793403136164368,
-        "belongingRoute": "绾胯矾3",
-        "face": 30,
-        "label": "璁惧3",
-        "children":[
-            {
-                "id": "197f211797aa9f32",
-                "label": "鍦伴潰鐐�0",
-                "longitude": 125.01254690233337,
-                "latitude": 46.408037041988585,
-                "height": 5.517266389025914,
-                "children": [
-                    {
-                        "id": "197f211797afb196",
-                        "label": "绌轰腑鐐�0",
-                        "longitude": 125.01240358310912,
-                        "latitude": 46.40814584281285,
-                        "height": 6.971525719304772
-                    }
-                ]
-            },
-            {
-                "id": "197f211797af91d9",
-                "label": "鍦伴潰鐐�1",
-                "longitude": 125.01254808759698,
-                "latitude": 46.4080365594918,
-                "height": 7.385339183474696,
-                "children": [
-                    {
-                        "id": "197f211797afdb9a",
-                        "label": "绌轰腑鐐�1",
-                        "longitude": 125.0125163640242,
-                        "latitude": 46.407960727919516,
-                        "height": 10.451384666363694
-                    }
-                ]
-            },
-            {
-                "id": "197f211797afab31",
-                "label": "鍦伴潰鐐�2",
-                "longitude": 125.01255947706582,
-                "latitude": 46.408036885119245,
-                "height": 7.42469267651616,
-                "children": [
-                    {
-                        "id": "197f211797a61300",
-                        "label": "绌轰腑鐐�2",
-                        "longitude": 125.0128655208287,
-                        "latitude": 46.4080332165472,
-                        "height": 14.51791089195843
-                    }
-                ]
-            },
-            {
-                "id": "197f211797af21e7",
-                "label": "鍦伴潰鐐�3",
-                "longitude": 125.01256023273389,
-                "latitude": 46.408036999460684,
-                "height": 5.5171023712317435,
-                "children": [
-                    {
-                        "id": "197f211797a19b34",
-                        "label": "绌轰腑鐐�3",
-                        "longitude": 125.01277085845463,
-                        "latitude": 46.40822397536244,
-                        "height": 16.06139535507995
-                    }
-                ]
-            }
-        ]
-    },
-    {
-        "createBy": null,
-        "createTime": null,
-        "updateBy": null,
-        "updateTime": null,
-        "remark": null,
-        "id": "5d7c595466094e369c6ed9fdcab6ba50",
-        "modelId": "416a0c3361a9409495623eff5c19fb41",
-        "deviceName": "璁惧2",
-        "deviceType": null,
-        "longitude": 124.98495711631958,
-        "latitude": 46.60913669289758,
-        "altitude": -0.010649270561847658,
-        "belongingRoute": "绾胯矾2",
-        "face": 30,
-        "label": "璁惧2",
-        "children": [
-            {
-                "id": "197f2157b83d1d1e",
-                "label": "鍦伴潰鐐�0",
-                "longitude": 124.98495046473204,
-                "latitude": 46.60913764437918,
-                "height": 5.517192953851729,
-                "children": [
-                    {
-                        "id": "197f2157b833e7e6",
-                        "label": "绌轰腑鐐�0",
-                        "longitude": 124.98487290823232,
-                        "latitude": 46.609159110536,
-                        "height": 8.492315413669576
-                    }
-                ]
-            },
-            {
-                "id": "197f2157b83cb37c",
-                "label": "鍦伴潰鐐�1",
-                "longitude": 124.98495132002881,
-                "latitude": 46.609137518901555,
-                "height": 7.424720940488529,
-                "children": [
-                    {
-                        "id": "197f2157b83dbf31",
-                        "label": "绌轰腑鐐�1",
-                        "longitude": 124.984847808066,
-                        "latitude": 46.60911367086078,
-                        "height": 8.37839897370324
-                    }
-                ]
-            },
-            {
-                "id": "197f2157b831259d",
-                "label": "鍦伴潰鐐�2",
-                "longitude": 124.98496295996078,
-                "latitude": 46.60913752946039,
-                "height": 7.424330357264399,
-                "children": [
-                    {
-                        "id": "197f2157b837245b",
-                        "label": "绌轰腑鐐�2",
-                        "longitude": 124.98502199892675,
-                        "latitude": 46.60913926099941,
-                        "height": 12.416325107963392
-                    }
-                ]
-            },
-            {
-                "id": "197f2157b83112ee",
-                "label": "鍦伴潰鐐�3",
-                "longitude": 124.9849638899571,
-                "latitude": 46.60913769557282,
-                "height": 5.51721178277007,
-                "children": [
-                    {
-                        "id": "197f2157b8349c7d",
-                        "label": "绌轰腑鐐�3",
-                        "longitude": 124.98502033157477,
-                        "latitude": 46.609152323278046,
-                        "height": 4.804689162058357
-                    }
-                ]
-            }
-        ]
-    },
-    {
-        "createBy": null,
-        "createTime": null,
-        "updateBy": null,
-        "updateTime": null,
-        "remark": null,
-        "id": "f796896ac1c445c183456c500502bef0",
-        "modelId": "1bd29eedeaaf4a3da83212fbb1793fd5",
-        "deviceName": "璁惧1",
-        "deviceType": null,
-        "longitude": 125.14336018333184,
-        "latitude": 46.558980802047344,
-        "altitude": -0.0019061848373990704,
-        "belongingRoute": "绾胯矾1",
-        "face": 60,
-        "label": "璁惧1",
-        "children": [
-    {
-        "id": "197f21d1d1a28cf6",
-        "label": "鍦伴潰鐐�0",
-        "longitude": 125.14335344922452,
-        "latitude": 46.558982037049276,
-        "height": 5.556334669315725,
-        "children": [
-            {
-                "id": "197f21d1d1adcbe6",
-                "label": "绌轰腑鐐�0",
-                "longitude": 125.14330233595797,
-                "latitude": 46.55904743869546,
-                "height": 6.468726016875199
-            }
-        ]
-    },
-    {
-        "id": "197f21d1d1a4aa12",
-        "label": "鍦伴潰鐐�1",
-        "longitude": 125.14335458905991,
-        "latitude": 46.558981268478746,
-        "height": 7.384477227891685,
-        "children": [
-            {
-                "id": "197f21d1d1a846ae",
-                "label": "绌轰腑鐐�1",
-                "longitude": 125.14298096389273,
-                "latitude": 46.558969173376134,
-                "height": 22.10867400719622
-            }
-        ]
-    },
-    {
-        "id": "197f21d1d1a52190",
-        "label": "鍦伴潰鐐�2",
-        "longitude": 125.14336589537841,
-        "latitude": 46.558981709304724,
-        "height": 7.424676991507425,
-        "children": [
-            {
-                "id": "197f21d1d1a6a4fe",
-                "label": "绌轰腑鐐�2",
-                "longitude": 125.14339720378332,
-                "latitude": 46.5590446327473,
-                "height": 16.720685909327106
-            }
-        ]
-    },
-    {
-        "id": "197f21d1d1a272b1",
-        "label": "鍦伴潰鐐�3",
-        "longitude": 125.14336689453488,
-        "latitude": 46.558981604123645,
-        "height": 5.516875737104807,
-        "children": [
-            {
-                "id": "197f21d1d1af7638",
-                "label": "绌轰腑鐐�3",
-                "longitude": 125.14397230855407,
-                "latitude": 46.55882377669704,
-                "height": 45.87173852318548
-            }
-        ]
-    }
-]
-    }
-],
+        treeData:[],
         defaultProps: {
           children: 'children',
           label: 'label'
@@ -348,15 +96,11 @@
   },
   methods:{
     handleClose(){
-      console.log("close")
       this.dialogVisible = false
-      this.$emit('close')
     },
     flyToLocal(row){
       console.log(row)
-      console.log(viewer)
-      //  const position = Cesium.Cartesian3.fromDegrees(row.longitude,row.latitude, row.altitude);
-       const position = Cesium.Cartesian3.fromDegrees(0,0,0);
+       const position = Cesium.Cartesian3.fromDegrees(row.longitude,row.latitude, row.altitude);
 
       // 璁剧疆妯″瀷鏂瑰悜锛堝彲閫夛級
       const heading = Cesium.Math.toRadians(row.face); // 鏈濅笢鍗楁柟鍚�
@@ -373,7 +117,7 @@
         position: position,
         orientation: orientation,
         model: {
-          uri: "http://192.168.1.5:9000/tower/2025/07/11/閾佸_20250711093701A001.glb", // 鏇挎崲鎴愪綘鐨勬ā鍨嬭矾寰�
+          uri: row?.ardTowerModel.modelRoute, // 鏇挎崲鎴愪綘鐨勬ā鍨嬭矾寰�
           scale: 1,
         },
         label: {
@@ -421,29 +165,27 @@
             type: 'warning'
           })
         }
-        this.tableData = this.tableData.concat(arr)
+        this.tableData = this.treeData.concat(arr)
       }
       const dealTreeData =this.dealTee()
-      // this.treeData = dealTreeData
-      console.log(this.treeData)
+      this.treeData = dealTreeData
     },
     dealTee(){
+      console.log(this.tableData)
      return  this.tableData.map(item => ({
         ...item,
         label: item.deviceName,
-        children: []
       }));
     },
     deleteData(row){
       // 鎵惧埌 id 涓� "1" 鐨勫厓绱犵储寮�
       const index = this.tableData.findIndex(item => item.id === row.id);
-
       // 濡傛灉鎵惧埌浜嗭紝鍒犻櫎璇ュ厓绱�
       if (index !== -1) {
         this.tableData.splice(index, 1);
       }
       const dealTreeData = this.dealTee()
-      // this.treeData = dealTreeData
+      this.treeData = dealTreeData
     },
     chooseModel(row){
       this.deviceId = row.id
@@ -455,117 +197,67 @@
     receiveModel(obj){
       //deal閫昏緫
       console.log(obj)
+      let flightTemplateId =obj.modelObj.id
+      let deviceId = obj.deviceId
       this.dealTableTemplate(obj)
+      // let 
+      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.dealTreeMerge(obj)
     },
+    //杩斿洖鏁版嵁杞崲鏍戠粨鏋�
+    transformFlightData(data) {
+      const result = [];
+
+      data.forEach(item => {
+        // 鎵惧埌绗竴涓� groundPoint锛屼綔涓轰唬琛�
+        const groundPoint = item.groundPointVo?.[0];
+
+        // 鐢熸垚 children 鑺傜偣
+        const children = groundPoint ? [{
+          id: groundPoint.id,
+          label: groundPoint.targetName,
+          longitude: groundPoint.longitude,
+          latitude: groundPoint.latitude,
+          height: groundPoint.height
+        }] : [];
+
+        // 鐢熸垚绌轰腑鐐�
+        result.push({
+          id: item.id,
+          label: item.targetName,
+          longitude: item.longitude,
+          latitude: item.latitude,
+          height: item.altitude,
+          children
+        });
+      });
+
+      return result;
+    },
     dealTableTemplate(obj){
-      const target = this.tableData.find(item => item.id === obj.deviceId)
-      if (target) {
-        this.$set(target, 'mode', obj.modelObj.name) // 鉁� Vue2 闇�瑕佷娇鐢� $set 浠ョ‘淇濆搷搴斿紡
+      const targetTableData = this.tableData.find(item => item.id === obj.deviceId)
+      const targetTreeData = this.treeData.find(item => item.id === obj.deviceId)
+      if (targetTableData) {
+        this.$set(targetTableData, 'mode', obj.modelObj.templateName) // 鉁� Vue2 闇�瑕佷娇鐢� $set 浠ョ‘淇濆搷搴斿紡
+      }
+      if (targetTreeData) {
+        this.$set(targetTreeData, 'mode', obj.modelObj.templateName) // 鉁� Vue2 闇�瑕佷娇鐢� $set 浠ョ‘淇濆搷搴斿紡
       }
     },
-    dealTreeMerge(obj){
-      let newChildrenData= [
-        { id: 100, label: '鏂板瓙鑺傜偣A',children:[{id: 1001,label: '鏂板瓙鑺傜偣A-1'}]},
-        { id: 101, label: '鏂板瓙鑺傜偣B' }
-      ]
+    dealTreeMerge(obj,data){
       this.treeData.forEach(item => {
         if(item.id == obj.deviceId) {
           // 鏇挎崲绗竴灞傛瘡涓妭鐐圭殑 children
-          this.$set(item, 'children', JSON.parse(JSON.stringify(newChildrenData)));
+          this.$set(item, 'children', JSON.parse(JSON.stringify(data)));
         }
       });
-    },
-    drawConnectionsWithLabels1111(devices) {
-      const airPoints = [];
-
-      devices.forEach(device => {
-        if (!Array.isArray(device.children)) return;
-
-        device.children.forEach(groundPoint => {
-          console.log(groundPoint)
-          const groundPos = Cesium.Cartesian3.fromDegrees(
-            groundPoint.longitude,
-            groundPoint.latitude,
-            groundPoint.height
-          );
-
-          // 鉁� 鍦伴潰鐐癸細娣诲姞瀹炰綋 + label
-          viewer.entities.add({
-            position: groundPos,
-            point: {
-              pixelSize: 6,
-              color: Cesium.Color.BLUE
-            },
-            label: {
-              text: groundPoint.label || '',
-              font: '14px sans-serif',
-              fillColor: Cesium.Color.WHITE,
-              style: Cesium.LabelStyle.FILL_AND_OUTLINE,
-              outlineWidth: 2,
-              outlineColor: Cesium.Color.BLACK,
-              verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
-              pixelOffset: new Cesium.Cartesian2(0, -12)
-            }
-          });
-
-          // 閬嶅巻绌轰腑鐐�
-          if (Array.isArray(groundPoint.children)) {
-            groundPoint.children.forEach(airPoint => {
-              console.log(airPos)
-              const airPos = Cesium.Cartesian3.fromDegrees(
-                airPoint.longitude,
-                airPoint.latitude,
-                airPoint.height
-              );
-
-              // 鉁� 绌轰腑鐐癸細娣诲姞瀹炰綋 + label
-              viewer.entities.add({
-                position: airPos,
-                point: {
-                  pixelSize: 6,
-                  color: Cesium.Color.YELLOW
-                },
-                label: {
-                  text: airPoint.label || '',
-                  font: '14px sans-serif',
-                  fillColor: Cesium.Color.YELLOW,
-                  style: Cesium.LabelStyle.FILL_AND_OUTLINE,
-                  outlineWidth: 2,
-                  outlineColor: Cesium.Color.BLACK,
-                  verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
-                  pixelOffset: new Cesium.Cartesian2(0, -12)
-                }
-              });
-
-              // 鉁� 鍦伴潰鐐� 鉃� 绌轰腑鐐� 钃濊壊铏氱嚎
-              viewer.entities.add({
-                polyline: {
-                  positions: [groundPos, airPos],
-                  width: 2,
-                  material: new Cesium.PolylineDashMaterialProperty({
-                    color: Cesium.Color.BLUE,
-                    dashLength: 8
-                  })
-                }
-              });
-
-              airPoints.push(airPos);
-            });
-          }
-        });
-      });
-
-      // 鉁� 鎵�鏈夌┖涓偣 鉃� 榛勮壊瀹炵嚎杩炴帴
-      if (airPoints.length > 1) {
-        viewer.entities.add({
-          polyline: {
-            positions: airPoints,
-            width: 3,
-            material: Cesium.Color.YELLOW
-          }
-        });
-      }
     },
     drawConnectionsWithLabels(devices) {
       const airPoints = [];
@@ -657,183 +349,57 @@
         });
       }
     },
-    draw(){
-      this.drawConnectionsWithLabels(this.treeData)
-    },
-    test(){
-        this.treeData = this.swapGroundAir(this.treeData);        
-    },
-    swapGroundAir(data) {
-      
-      return data.map(device => {
-        const newChildren = [];
-
-        device.children.forEach(ground => {
-          const air = ground.children && ground.children[0];
-          if (air) {
-            newChildren.push({
-              ...air,
-              children: [
-                {
-                  ...ground,
-                  children: undefined
-                }
-              ]
-            });
-          }
-        });
-
-        return {
-          ...device,
-          children: newChildren
+    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
         };
-      });
-    },
-    huixian(){
-      let data=[
-    {
-        "altitude": 35.09683139439875,
-        "ardGroundPoint": [
-            {
-                "height": 35.0960134603141,
-                "latitude": 0.000032899894086000126,
-                "longitude": 3.2789183307897707e-7,
-                "pointNumber": 1,
-                "targetName": "鍦伴潰鐐�0"
-            }
-        ],
-        "latitude": 0.0009372188427979371,
-        "longitude": 0.000009340650264268872,
-        "pointNumber": 1,
-        "targetName": "绌轰腑鐐�0"
-    },
-    {
-        "altitude": 40.057437157900914,
-        "ardGroundPoint": [
-            {
-                "height": 40.05662385374772,
-                "latitude": 0.00002759265968150938,
-                "longitude": 7.877836487599675e-7,
-                "pointNumber": 1,
-                "targetName": "鍦伴潰鐐�1"
-            }
-        ],
-        "latitude": 0.0009315830781716235,
-        "longitude": 0.000026597143043885405,
-        "pointNumber": 2,
-        "targetName": "绌轰腑鐐�1"
-    },
-    {
-        "altitude": 90.05743715790092,
-        "ardGroundPoint": [
-            {
-                "height": 40.05662385374772,
-                "latitude": 0.00002759265968150938,
-                "longitude": 7.877836487599675e-7,
-                "pointNumber": 1,
-                "targetName": "鍦伴潰鐐�1-鍔犻珮"
-            }
-        ],
-        "latitude": 0.0009315830781716235,
-        "longitude": 0.000026597143043885405,
-        "pointNumber": 3,
-        "targetName": "绌轰腑鐐�1-鍔犻珮"
-    },
-    {
-        "altitude": 85.4017386642163,
-        "ardGroundPoint": [
-            {
-                "height": 35.09000336658791,
-                "latitude": -0.0000329911085806409,
-                "longitude": 4.656954257439534e-7,
-                "pointNumber": 1,
-                "targetName": "鍦伴潰鐐�2"
-            }
-        ],
-        "latitude": -0.0009372610742669285,
-        "longitude": 0.000013144727598247196,
-        "pointNumber": 4,
-        "targetName": "绌轰腑鐐�2-鍔犻珮"
-    },
-    {
-        "altitude": 35.401738664216296,
-        "ardGroundPoint": [
-            {
-                "height": 35.09000336658791,
-                "latitude": -0.0000329911085806409,
-                "longitude": 4.656954257439534e-7,
-                "pointNumber": 1,
-                "targetName": "鍦伴潰鐐�2"
-            }
-        ],
-        "latitude": -0.0009372610742669285,
-        "longitude": 0.000013144727598247196,
-        "pointNumber": 5,
-        "targetName": "绌轰腑鐐�2"
-    }
-]
-      let aaa = this.convertToTree(data)
-      console.log(aaa)
-      this.drawLines(aaa)
-    },
-    convertToTree(data) {
-      return data.map((item, index) => {
-        const parentId = 'air_' + index;
-        return {
-          id: parentId,
-          label: item.targetName,
-          longitude: item.longitude,
-          latitude: item.latitude,
-          height: item.altitude,
-          children: (item.ardGroundPoint || []).map((g, i) => {
-            return {
-              id: parentId + '_ground_' + i,
-              label: g.targetName,
-              longitude: g.longitude,
-              latitude: g.latitude,
-              height: g.height
-            }
-          })
-        }
-      });
-    },
-    drawLines(treeData) {
-      console.log(treeData)
-      // 鏀堕泦绌轰腑鐐逛綅缃�
-      const airPositions = treeData.map(point => {
-        return Cesium.Cartesian3.fromDegrees(
-          point.longitude,
-          point.latitude,
-          point.height
-        );
-      });
+        console.log(newGround)
+        // 澶勭悊瀛愮┖涓偣
+        newGround.children = item.children.map(child => {
+          const airPoint = Cesium.Cartesian3.fromDegrees(child.longitude, child.latitude, child.height);
+          const rotatedAirPoint = this.rotateAroundPoint( airPoint,towerPoint, rotationAngle);
+          const rotatedAirCarto = Cesium.Cartographic.fromCartesian(rotatedAirPoint);
 
-      // 1. 绌轰腑鐐逛箣闂寸敤榛勮壊瀹炵嚎杩炴帴
-      viewer.entities.add({
-        polyline: {
-          positions: airPositions,
-          width: 2,
-          material: Cesium.Color.YELLOW
-        }
-      });
-
-      // 2. 姣忎釜绌轰腑鐐逛笌鍦伴潰鐐圭敤钃濊壊铏氱嚎杩炴帴
-      treeData.forEach(point => {
-        const airPos = Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude, point.height);
-        point.children.forEach(child => {
-          const groundPos = Cesium.Cartesian3.fromDegrees(child.longitude, child.latitude, child.height);
-          viewer.entities.add({
-            polyline: {
-              positions: [airPos, groundPos],
-              width: 1,
-              material: new Cesium.PolylineDashMaterialProperty({
-                color: Cesium.Color.BLUE,
-                dashLength: 8
-              })
-            }
-          });
+          return {
+            ...child,
+            longitude: Cesium.Math.toDegrees(rotatedAirCarto.longitude),
+            latitude: Cesium.Math.toDegrees(rotatedAirCarto.latitude),
+            height: rotatedAirCarto.height
+          };
         });
+
+        return newGround;
       });
+    },
+    //聽璁$畻鐐笰缁曠偣B閫嗘椂閽堟棆杞寚瀹氳搴﹀悗鐨勬柊浣嶇疆
+    //  绌轰腑鐐规垨鑰呭湴闈㈢偣绗涘崱灏斿潗鏍� 濉旂殑绗涘崱灏斿潗鏍�    濉旂殑鏈濆悜鍊�
+    rotateAroundPoint(startPoint,pivotPoint,rotationAngle) {
+      //聽鍒涘缓涓�涓粠B鐐瑰埌鏈湴鍧愭爣绯荤殑杞崲鐭╅樀锛堜笢鏂瑰悜涓篨杞达紝鍖楁柟鍚戜负Y杞达紝鍨傜洿鏂瑰悜涓篫杞达級
+     const transformationMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(pivotPoint);
+      //聽鑾峰彇涓栫晫鍧愭爣绯诲埌鏈湴鍧愭爣绯荤殑杞崲鐭╅樀
+     const inverseTransformationMatrix = Cesium.Matrix4.inverse(transformationMatrix,new Cesium.Matrix4());
+      //聽灏咥鐐硅浆鎹㈠埌灞�閮ㄥ潗鏍囩郴涓�
+     const localStartPoint = Cesium.Matrix4.multiplyByPoint(inverseTransformationMatrix, startPoint,new Cesium.Cartesian3());
+      //聽璁$畻A鐐瑰湪灞�閮ㄥ潗鏍囩郴涓�嗘椂閽堟棆杞寚瀹氳搴﹀悗鐨勬柊浣嶇疆
+     const rotatedX = localStartPoint.x * Math.cos(rotationAngle) + localStartPoint.y * Math.sin(rotationAngle);
+     const rotatedY = localStartPoint.y * Math.cos(rotationAngle) - localStartPoint.x * Math.sin(rotationAngle);
+     const rotatedZ = localStartPoint.z; //聽Z杞村潗鏍囦繚鎸佷笉鍙�
+      //聽灏嗘棆杞悗鐨勫眬閮ㄥ潗鏍囪浆鎹㈠洖涓栫晫鍧愭爣绯�
+     return Cesium.Matrix4.multiplyByPoint(transformationMatrix,聽new聽Cesium.Cartesian3(rotatedX,聽rotatedY,聽rotatedZ),聽new聽Cesium.Cartesian3());
     }
   }
 }
diff --git a/src/views/system/project/components/chooseModelDialog.vue b/src/views/system/project/components/chooseModelDialog.vue
index a601599..ec172e3 100644
--- a/src/views/system/project/components/chooseModelDialog.vue
+++ b/src/views/system/project/components/chooseModelDialog.vue
@@ -1,17 +1,17 @@
 <template>
   <el-dialog
-    title="閫夋嫨妯℃澘"
+    title="閫夋嫨椋炶妯℃澘"
     :visible.sync="dialogVisible"
     @close="cancel"
     width="20%">
     <el-form ref="form" :model="form" label-width="80px" :rules="rules">
-      <el-form-item label="妯℃澘">
-        <el-select v-model="form.modelObj" placeholder="璇烽�夋嫨妯℃澘">
+      <el-form-item label="椋炶妯℃澘">
+        <el-select v-model="form.modelObj" placeholder="璇烽�夋嫨椋炶妯℃澘" @change="handleChange">
           <el-option
               v-for="item in templateArr"
               :key="item.id"
-              :label="item.name"
-              :value="item">
+              :label="item.templateName"
+              :value="item.id">
             </el-option>
         </el-select>
       </el-form-item>
@@ -22,7 +22,9 @@
     </el-form>
   </el-dialog>
 </template>
+
 <script>
+import { flyDataInfo} from "@/api/system/template"
   export default {
     name:'chooseModelDialog',
     components: {
@@ -47,21 +49,9 @@
             },
         ],
         selectArr:[],
-        form:{},
-        templateArr:[
-          {
-            id:111,
-            name:'妯℃澘1'
-          },
-          {
-            id:222,
-            name:'妯℃澘2'
-          },
-          {
-            id:333,
-            name:'妯℃澘3'
-          }
-        ],
+        form:{
+        },
+        templateArr:[],
         rules:{
           modelObj: [
             { required: true, message: '璇烽�夋嫨妯℃澘', trigger: 'change' }
@@ -72,6 +62,12 @@
     mounted() {
       console.log(this.deviceId)
       if(this.deviceId){
+        flyDataInfo(this.deviceId).then(res=>{
+          console.log(res)
+          if(res.code == 200 ) {
+            this.templateArr = res.rows
+          }
+        })
         //鐐瑰嚮妯℃澘鏌ヨ璁惧涓嬬殑鍏宠仈妯″瀷鐨勬墍鏈夋ā鏉� 
       }
     },  
@@ -79,11 +75,15 @@
       cancel(){
         this.$emit('cancelModel')
       }, 
+      handleChange(value){
+         this.form.deviceId = this.deviceId
+        this.form.modelObj =this.templateArr.find(item => item.id === value)
+      },
       submit(){
         // this.selectArr 
-        //鍙嶆樉鍙傛暟浼犻�抩ption瀵硅薄  
-        this.form.deviceId = this.deviceId
-        console.log(this.form)
+        // //鍙嶆樉鍙傛暟浼犻�抩ption瀵硅薄  
+        // this.form.deviceId = this.deviceId
+        // console.log(this.form)
         this.$emit('receiveModel',this.form)
         this.$emit('cancelModel')
       },
diff --git a/src/views/system/project/index.vue b/src/views/system/project/index.vue
index 1eb8747..1c14cb7 100644
--- a/src/views/system/project/index.vue
+++ b/src/views/system/project/index.vue
@@ -2,7 +2,7 @@
   <div class="app-container">
      <el-row :gutter="20">
        <el-col :span=24 :xs="24">
-        <AppTable ref="AppTable" selection :showDeptSearch="false" :url="'tower/point/list'" :tableColumns="tableColumns"
+        <AppTable ref="AppTable" selection :showDeptSearch="false" :url="'tower/project/list'" :tableColumns="tableColumns"
           :tableFilter="tableFilter">
           <template #operatorBox="{ row }">
             <el-button type="primary" plain icon="el-icon-plus" size="mini"
diff --git a/src/views/system/shootPoint/components/shootPointDialog.vue b/src/views/system/shootPoint/components/shootPointDialog.vue
index c33bac6..3f2f6a8 100644
--- a/src/views/system/shootPoint/components/shootPointDialog.vue
+++ b/src/views/system/shootPoint/components/shootPointDialog.vue
@@ -51,22 +51,28 @@
   </div>
 </template>
 <script>
+import { compileToFunctions } from "vue-template-compiler";
 import CesiumMap from "../../../../utils/components/cesium-map.vue";
 import InitMap from "../../../../utils/components/init-map.vue";
 import ChooseModelDialog from './chooseModelDialog.vue';
-import { addPoint} from "@/api/system/template"
- let globalon  = 0
+import { addPoint , getPointInfo} from "@/api/system/template"
+let globalon  = 0
 let globalat = 0
 let towerHeight = 47.47
-const centerCartesian = Cesium.Cartesian3.fromDegrees(globalon,globalat , 0)
+//濉旂殑鏈濆悜绠楁硶鎵�鐢ㄥ埌鐨� 鏃嬭浆搴︽暟
 let rotationAngle = Cesium.Math.toRadians(0)
-let relativeData 
 export default{
   name:'shootPointDialog',
    components: {
     CesiumMap,
     ChooseModelDialog,
     InitMap
+  },
+  props: {
+    templateId: {
+      type: String,
+      defaule: null
+    }
   },
   data(){
     return{
@@ -90,8 +96,84 @@
     }
   },
   mounted(){
+    if(this.templateId) {
+      //棰勮閫昏緫
+      getPointInfo(this.templateId).then(res=>{
+        if(res.code == 200 ) {
+          this.getRowData(res.data)
+          let drawArr = this.convertToTree(res.data.ardListWayPointsLS)
+          setTimeout(() => {
+            //娓叉煋鏃堕棿闂 鍔犱釜寤舵椂鍣�
+            this.drawLines(drawArr)
+          }, 500);
+        }
+      })
+    }
   },  
   methods:{
+    convertToTree(data) {
+      return data.map((item, index) => {
+        const parentId = 'air_' + index;
+        return {
+          id: parentId,
+          label: item.targetName,
+          longitude: item.longitude,
+          latitude: item.latitude,
+          height: item.altitude,
+          children: (item.ardGroundPoint || []).map((g, i) => {
+            return {
+              id: parentId + '_ground_' + i,
+              label: g.targetName,
+              longitude: g.longitude,
+              latitude: g.latitude,
+              height: g.height
+            }
+          })
+        }
+      });
+    },
+    drawLines(treeData) {
+      console.log(treeData)
+      console.log(window)
+      console.log(window.viewerM)
+      let viewer = window.viewerM
+
+      // 鏀堕泦绌轰腑鐐逛綅缃�
+      const airPositions = treeData.map(point => {
+        return Cesium.Cartesian3.fromDegrees(
+          point.longitude,
+          point.latitude,
+          point.height
+        );
+      });
+
+      // 1. 绌轰腑鐐逛箣闂寸敤榛勮壊瀹炵嚎杩炴帴
+      viewer.entities.add({
+        polyline: {
+          positions: airPositions,
+          width: 2,
+          material: Cesium.Color.YELLOW
+        }
+      });
+
+      // 2. 姣忎釜绌轰腑鐐逛笌鍦伴潰鐐圭敤钃濊壊铏氱嚎杩炴帴
+      treeData.forEach(point => {
+        const airPos = Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude, point.height);
+        point.children.forEach(child => {
+          const groundPos = Cesium.Cartesian3.fromDegrees(child.longitude, child.latitude, child.height);
+          viewer.entities.add({
+            polyline: {
+              positions: [airPos, groundPos],
+              width: 1,
+              material: new Cesium.PolylineDashMaterialProperty({
+                color: Cesium.Color.BLUE,
+                dashLength: 8
+              })
+            }
+          });
+        });
+      });
+    },
     addPoint(viewer, position, color, label) {
       viewer.entities.add({
         name: label,
@@ -170,6 +252,7 @@
         return newGround;
       });
     },
+    //鍚堝苟閫昏緫  灏嗛檮杩憂绫宠寖鍥村唴鐨勭偣鍚堝苟 骞朵笖澶勭悊鎴愭暟鎹�
     mergePoint(arr,mergeNumber,viewer){
       this.treeData = arr
       const result = this.replaceCloseChildrenWithHighestPoint(this.treeData,mergeNumber);
@@ -359,10 +442,14 @@
       console.log(row)
       this.modelName = row.modelName
       this.templateType = row.modelType
+      if(this.templateId){
+        this.form.templateName = row.templateName || ''
+      }
       this.chooseModelId = row.id
       towerHeight = row.towerHeight || 47.47
       this.showMap =false
       this.$nextTick(()=>{
+        // this.towerUrl = row.modelRoute
         this.towerUrl = row.modelRoute
         this.showMap = true
       })
diff --git a/src/views/system/shootPoint/index.vue b/src/views/system/shootPoint/index.vue
index 8ad757b..03f2833 100644
--- a/src/views/system/shootPoint/index.vue
+++ b/src/views/system/shootPoint/index.vue
@@ -9,6 +9,8 @@
               @click="handleAdd">鏂板妯℃澘</el-button>
           </template>
           <template #operator="{ row }">
+            <el-button size="mini" type="text" icon="el-icon-view"
+              @click="preview(row)">棰勮</el-button>
             <el-button size="mini" type="text" icon="el-icon-delete"
               @click="handleDelete(row)">鍒犻櫎</el-button>
           </template>
@@ -19,7 +21,7 @@
        </el-col>
      </el-row>
     
-    <shootPointDialog  @on-submit="$refs.AppTable.getData()"  v-if="showDialog" @close="close"></shootPointDialog>
+    <shootPointDialog  @on-submit="$refs.AppTable.getData()"  v-if="showDialog" @close="close" :templateId="templateId"></shootPointDialog>
   </div>
 </template>
 
@@ -67,7 +69,8 @@
         }
       ],
       showMap:false,
-      showDialog:false
+      showDialog:false,
+      templateId:null
     };
   },
   watch: {
@@ -79,6 +82,7 @@
   methods: {
     // 娣诲姞鏁版嵁
     handleAdd() {
+      this.templateId = null
       this.showMap  = false
       this.showDialog = true
       // this.$refs.shootPointDialog.show()
@@ -107,7 +111,11 @@
     // },
     close(){
       this.showDialog =false
-      this
+    },
+    preview(row){
+      console.log(row)
+      this.templateId = row.id
+      this.showDialog = true
     }
   },
 };

--
Gitblit v1.9.3