From b498685e9c29c9c4b56f24f1ee1c9db9fd109ad9 Mon Sep 17 00:00:00 2001
From: jihongshun <1151753686@qq.com>
Date: 星期六, 12 七月 2025 17:23:02 +0800
Subject: [PATCH] 算法优化

---
 src/views/system/project/components/addPorjectDialog.vue |  694 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 680 insertions(+), 14 deletions(-)

diff --git a/src/views/system/project/components/addPorjectDialog.vue b/src/views/system/project/components/addPorjectDialog.vue
index cf5606f..fa4de99 100644
--- a/src/views/system/project/components/addPorjectDialog.vue
+++ b/src/views/system/project/components/addPorjectDialog.vue
@@ -13,6 +13,9 @@
                   <!-- <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'
@@ -23,15 +26,16 @@
                       width="150">
                     </el-table-column>
                     <el-table-column
-                      prop="muban"
+                      prop="mode"
                       label="妯℃澘"
-                      width="150">
+                      width="120">
                     </el-table-column>
                     <el-table-column
                       fixed="right"
                       label="鎿嶄綔"
-                      width="100">
+                      width="130">
                       <template slot-scope="scope">
+                        <el-button type="text" size="small" @click="chooseModel(scope.row)">妯℃澘</el-button>
                         <el-button type="text" size="small" @click="flyToLocal(scope.row)">瀹氫綅</el-button>
                         <el-button type="text" size="small" @click="deleteData(scope.row)">绉婚櫎</el-button>
                       </template>
@@ -63,28 +67,283 @@
         <el-button type="primary" @click="submit()" >鐢熸垚鑸嚎浠诲姟</el-button>
       </span>
     </el-dialog>
-     <chooseDeviceDialog v-if="showModel" @cancel ='cancel' @dealChooseArr="dealChooseArr" ></chooseDeviceDialog>
+     <chooseDeviceDialog v-if="showDevice" @cancel ='cancel' @dealChooseArr="dealChooseArr" ></chooseDeviceDialog>
+     <chooseModelDialog v-if="showModel" @cancelModel ='cancelModel' @receiveModel="receiveModel" :deviceId="deviceId"></chooseModelDialog>
   </div>
 </template>
 <script>
 import CesiumMap from "../../../../utils/components/cesium-map.vue";
 import chooseDeviceDialog from './chooseDeviceDialog.vue';
+import chooseModelDialog from './chooseModelDialog.vue';
 export  default{
   components: {
     CesiumMap,
-    chooseDeviceDialog
+    chooseDeviceDialog,
+    chooseModelDialog
   },
   data(){
     return{
        dialogVisible :true,
         tableData: [],
-        treeData:[],
+        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
+            }
+        ]
+    }
+]
+    }
+],
         defaultProps: {
           children: 'children',
           label: 'label'
         },
+        showDevice:false,
+        multipleSelection: [],
         showModel:false,
-        multipleSelection: []
+        deviceId:null
     }
   },
   methods:{
@@ -96,7 +355,8 @@
     flyToLocal(row){
       console.log(row)
       console.log(viewer)
-       const position = Cesium.Cartesian3.fromDegrees(row.longitude,row.latitude, row.altitude);
+      //  const position = Cesium.Cartesian3.fromDegrees(row.longitude,row.latitude, row.altitude);
+       const position = Cesium.Cartesian3.fromDegrees(0,0,0);
 
       // 璁剧疆妯″瀷鏂瑰悜锛堝彲閫夛級
       const heading = Cesium.Math.toRadians(row.face); // 鏈濅笢鍗楁柟鍚�
@@ -113,19 +373,35 @@
         position: position,
         orientation: orientation,
         model: {
-          uri: "http://192.168.1.5:9000/tower/2025/07/01/tower_20250701145739A004.glb", // 鏇挎崲鎴愪綘鐨勬ā鍨嬭矾寰�
-          scale: 1000,
+          uri: "http://192.168.1.5:9000/tower/2025/07/11/閾佸_20250711093701A001.glb", // 鏇挎崲鎴愪綘鐨勬ā鍨嬭矾寰�
+          scale: 1,
         },
+        label: {
+          show: true,
+          verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
+          horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
+          font: '28px Helvetica',
+          outlineColor: Cesium.Color.BLUE,
+          outlineWidth: 3,
+          fillColor: Cesium.Color.fromCssColorString('#FFFFFF'), //44c3cc
+          text: row.deviceName,
+          style: Cesium.LabelStyle.FILL_AND_OUTLINE,
+          pixelOffset: new Cesium.Cartesian2(0.0, -56.0),
+          scaleByDistance: new Cesium.NearFarScalar(1000, 0.6, 10000, 0.4),
+          pixelOffsetScaleByDistance: new Cesium.NearFarScalar(1000, 0.4, 10000, 0.4),
+          disableDepthTestDistance: 100000000
+        }
       });
       console.log(entity)
       // 椋炶鍒版ā鍨嬩綅缃�
+      console.log(this.treeData)
       viewer.flyTo(entity)
     },
     addDevice(){
-      this.showModel = true
+      this.showDevice = true
     },
     cancel(){
-      this.showModel = false
+      this.showDevice = false
     },
     hasSameId(array1, array2) {
       const ids1 = new Set(array1.map(item => item.id));
@@ -148,7 +424,7 @@
         this.tableData = this.tableData.concat(arr)
       }
       const dealTreeData =this.dealTee()
-      this.treeData = dealTreeData
+      // this.treeData = dealTreeData
       console.log(this.treeData)
     },
     dealTee(){
@@ -167,7 +443,397 @@
         this.tableData.splice(index, 1);
       }
       const dealTreeData = this.dealTee()
-      this.treeData = dealTreeData
+      // this.treeData = dealTreeData
+    },
+    chooseModel(row){
+      this.deviceId = row.id
+      this.showModel = true
+    },
+    cancelModel(){
+      this.showModel = false
+    },
+    receiveModel(obj){
+      //deal閫昏緫
+      console.log(obj)
+      this.dealTableTemplate(obj)
+      // this.dealTreeMerge(obj)
+    },
+    dealTableTemplate(obj){
+      const target = this.tableData.find(item => item.id === obj.deviceId)
+      if (target) {
+        this.$set(target, 'mode', obj.modelObj.name) // 鉁� Vue2 闇�瑕佷娇鐢� $set 浠ョ‘淇濆搷搴斿紡
+      }
+    },
+    dealTreeMerge(obj){
+      let newChildrenData= [
+        { id: 100, label: '鏂板瓙鑺傜偣A',children:[{id: 1001,label: '鏂板瓙鑺傜偣A-1'}]},
+        { id: 101, label: '鏂板瓙鑺傜偣B' }
+      ]
+      this.treeData.forEach(item => {
+        if(item.id == obj.deviceId) {
+          // 鏇挎崲绗竴灞傛瘡涓妭鐐圭殑 children
+          this.$set(item, 'children', JSON.parse(JSON.stringify(newChildrenData)));
+        }
+      });
+    },
+    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 = [];
+
+      devices.forEach(device => {
+        if (!Array.isArray(device.children)) return;
+
+        device.children.forEach(airPoint => {
+          // 绌轰腑鐐逛綅缃�
+          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,
+              outlineColor: Cesium.Color.BLACK,
+              outlineWidth: 2,
+              verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
+              pixelOffset: new Cesium.Cartesian2(0, -12)
+            }
+          });
+
+          airPoints.push(airPos);
+
+          // 閬嶅巻鍦伴潰鐐癸紙瀛愰」锛�
+          if (Array.isArray(airPoint.children)) {
+            airPoint.children.forEach(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,
+                  outlineColor: Cesium.Color.BLACK,
+                  outlineWidth: 2,
+                  verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
+                  pixelOffset: new Cesium.Cartesian2(0, -12)
+                }
+              });
+
+              // 鉁� 钃濊壊铏氱嚎杩炴帴锛氱┖涓偣 鉃� 鍦伴潰鐐�
+              viewer.entities.add({
+                polyline: {
+                  positions: [airPos, groundPos],
+                  width: 2,
+                  material: new Cesium.PolylineDashMaterialProperty({
+                    color: Cesium.Color.BLUE,
+                    dashLength: 8
+                  })
+                }
+              });
+            });
+          }
+        });
+      });
+
+      // 鉁� 榛勮壊瀹炵嚎杩炴帴鎵�鏈夌┖涓偣
+      if (airPoints.length > 1) {
+        viewer.entities.add({
+          polyline: {
+            positions: airPoints,
+            width: 3,
+            material: Cesium.Color.YELLOW
+          }
+        });
+      }
+    },
+    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
+        };
+      });
+    },
+    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
+        );
+      });
+
+      // 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
+              })
+            }
+          });
+        });
+      });
     }
   }
 }

--
Gitblit v1.9.3