From 2d90fa3dc99fced159d0bc76939fd9b88e6aafe1 Mon Sep 17 00:00:00 2001
From: wangyawei <1796609990@qq.com>
Date: 星期五, 18 四月 2025 14:23:28 +0800
Subject: [PATCH] 接入视频流

---
 src/components/tools/LayerTree.vue     |  331 ++++++++++++++++++---------------
 src/components/tools/Aspect.vue        |   22 +
 src/utils/tools.js                     |  108 +++++-----
 src/components/tools/SlopeAnalysis.vue |   10 -
 src/components/tools/Tools.vue         |   81 ++++---
 5 files changed, 301 insertions(+), 251 deletions(-)

diff --git a/src/components/tools/Aspect.vue b/src/components/tools/Aspect.vue
index bd9a949..d34eb04 100644
--- a/src/components/tools/Aspect.vue
+++ b/src/components/tools/Aspect.vue
@@ -1,14 +1,20 @@
 // 鍧″悜鍒嗘瀽
 <template>
   <div class="aspect">
-    <el-button @click="handleDraw">缁樺埗鍖哄煙</el-button>
-    <el-button @click="handleClear">鍏抽棴鍧″害</el-button>
+    <div>
+      <el-button @click="handleDraw">缁樺埗鍖哄煙</el-button>
+      <el-button @click="handleClear">鍏抽棴鍧″害</el-button>
+    </div>
+    <div style="margin-top: 10px">
+      <el-button @click="handleaspect">鍧″害鍒嗘瀽</el-button>
+      <el-button @click="handleSlope">鍧″悜鍒嗘瀽</el-button>
+    </div>
   </div>
 </template>
 <script setup>
 import { reactive, defineEmits } from "vue";
 // 瀹氫箟 emit 鏂规硶
-const emit = defineEmits(["draw", "clear"]);
+const emit = defineEmits(["draw", "clear", "handleaspect", "handleSlope"]);
 const handleDraw = () => {
   console.log("缁樺埗鍖哄煙");
   emit("draw");
@@ -17,11 +23,19 @@
   console.log("鍏抽棴鍧″害");
   emit("clear");
 };
+const handleaspect = () => {
+  console.log("鍧″害鍒嗘瀽");
+  emit("handleaspect");
+};
+const handleSlope = () => {
+  console.log("鍧″悜鍒嗘瀽");
+  emit("handleSlope");
+};
 </script>
 <style lang="less" scoped>
 .aspect {
   width: 215px;
-  height: 50px;
+  // height: 50px;
   background: url("@/assets/img/tools/plotting_new.png") no-repeat;
   filter: opacity(83%);
   background-size: 100% 100%;
diff --git a/src/components/tools/LayerTree.vue b/src/components/tools/LayerTree.vue
index 5955992..293fbfd 100644
--- a/src/components/tools/LayerTree.vue
+++ b/src/components/tools/LayerTree.vue
@@ -1,22 +1,29 @@
 <template>
   <div class="layer-tree">
+    <<<<<<< HEAD <el-tree ref="treeRef" style="max-width: 600px" show-checkbox node-key="label" :default-checked-keys="defaultSelectedKeys" @check-change="handleCheckChange" :data="treeData" />
+    =======
     <el-tree ref="treeRef" style="max-width: 600px" show-checkbox node-key="label" :default-checked-keys="defaultSelectedKeys" @check-change="handleCheckChange" :data="treeData" />
+    >>>>>>> f82eb01fe65e513fb43342db0e25cafa0e0d2db8
   </div>
 </template>
 
 <script setup>
-import { ref, onMounted, onBeforeUnmount, watch, onUnmounted } from "vue"
-import { createPoint, removeEntities, addTileset } from "@/utils/map"
-import { deviceDictList, getDictName } from "@/constant/dict.js"
-import { useRoute } from "vue-router"
-import { loadAreaPolygon, clearAreaPolygon } from '@/utils/area'
-import { checkedKeys } from '@/store/index'
-import { getDuanMainData } from '@/api/index.js'
-const route = useRoute()
+import { ref, onMounted, onBeforeUnmount, watch, onUnmounted } from "vue";
+import { createPoint, removeEntities, addTileset } from "@/utils/map";
+import { deviceDictList, getDictName } from "@/constant/dict.js";
+import { useRoute } from "vue-router";
+import { loadAreaPolygon, clearAreaPolygon } from "@/utils/area";
+import { checkedKeys } from "@/store/index";
+import { getDuanMainData } from "@/api/index.js";
+const route = useRoute();
 const treeData = ref([
   {
     label: "涓夌淮鏈嶅姟",
-    children: [{ label: "妯″瀷鏁版嵁" }, { label: "鍦板舰鏁版嵁" }, { label: "褰卞儚鏁版嵁" }],
+    children: [
+      { label: "妯″瀷鏁版嵁" },
+      { label: "鍦板舰鏁版嵁" },
+      { label: "褰卞儚鏁版嵁" },
+    ],
   },
   {
     label: "鍥惧眰鏁版嵁",
@@ -41,40 +48,39 @@
       },
     ],
   },
-])
-const treeRef = ref(null)
-const treeMap = new Map()
-const defaultSelectedKeys = ref(["妯″瀷鏁版嵁", "褰卞儚鏁版嵁", "鍦板舰鏁版嵁"])
+]);
+const treeRef = ref(null);
+const treeMap = new Map();
+const defaultSelectedKeys = ref(["妯″瀷鏁版嵁", "褰卞儚鏁版嵁", "鍦板舰鏁版嵁"]);
 function handleCheckChange (data, checked, indeterminate) {
-  const label = data.label
-  const list = treeMap.get(label)
+  const label = data.label;
+  const list = treeMap.get(label);
   if (list) {
-    toggleLayerVisible(label, checked)
-    return
+    toggleLayerVisible(label, checked);
+    return;
   }
   switch (label) {
     case "妯″瀷鏁版嵁":
-      list.show = checked
-      break
+      list.show = checked;
+      break;
     case "鍖椾含甯傞殣鎮g偣":
-      console.log("鍖椾含甯傞殣鎮g偣", checked, indeterminate)
-      break
+      console.log("鍖椾含甯傞殣鎮g偣", checked, indeterminate);
+      break;
     case "瀛欒儭娌熼殣鎮g偣":
-      console.log("瀛欒儭娌熼殣鎮g偣", checked, indeterminate)
-      break
+      console.log("瀛欒儭娌熼殣鎮g偣", checked, indeterminate);
+      break;
     case "娉ョ煶娴侀殣鎮g偣闈㈡暟鎹�":
-      console.log("娉ョ煶娴侀殣鎮g偣闈㈡暟鎹�", checked, indeterminate)
-      break
+      console.log("娉ョ煶娴侀殣鎮g偣闈㈡暟鎹�", checked, indeterminate);
+      break;
     case "缁煎悎鐩戞祴璁惧淇℃伅":
-      console.log("缁煎悎鐩戞祴璁惧淇℃伅", checked, indeterminate)
-      break
+      console.log("缁煎悎鐩戞祴璁惧淇℃伅", checked, indeterminate);
+      break;
     case "瀛欒儭娌熶豢鐪熸爣娉ㄥ湴鐗�":
-      console.log("瀛欒儭娌熶豢鐪熸爣娉ㄥ湴鐗�", checked, indeterminate)
-      break
+      console.log("瀛欒儭娌熶豢鐪熸爣娉ㄥ湴鐗�", checked, indeterminate);
+      break;
     case "閬块櫓鐐�":
-      addTetrahedron()
-      break
-
+      addTetrahedron();
+      break;
   }
 }
 function initMap () {
@@ -92,6 +98,11 @@
     sourceType: "ctb",
     url: "http://106.120.22.26:9103/gisserver/ctsserver/llmbdem",
   })
+  // let TerrainLayer = earthCtrl.factory.createTerrainLayer({
+  //   sourceType: "ctb",
+  //   url: "https://tiles1.geovisearth.com/base/v1/terrain?token=486dac3bec56d7d7c2a581c150be2bd937462f1e8f3bc9c78b5658b396122405",
+  //   requestVertexNormals: true,
+  // });
   // treeMap.set("褰卞儚鏁版嵁", ImageryLayer)
   treeMap.set("鍦板舰鏁版嵁", TerrainLayer)
 }
@@ -257,23 +268,23 @@
     latitude: 40.533623,
     longitude: 116.602406,
   },
-])
+]);
 
-function initDevicePoint () {
-  let list = []
+function initDevicePoint() {
+  let list = [];
 
-  devicetList.value.forEach(item => {
-    item.type = getDictName(deviceDictList, item.dictDeviceType)
-    item.name = item.type
-    item.id = item.deviceId
-    item.className = "device"
-    item.showLabel = true
-    const entity = createPoint(item)
-    entity.show = false
+  devicetList.value.forEach((item) => {
+    item.type = getDictName(deviceDictList, item.dictDeviceType);
+    item.name = item.type;
+    item.id = item.deviceId;
+    item.className = "device";
+    item.showLabel = true;
+    const entity = createPoint(item);
+    entity.show = false;
 
-    list.push(entity)
-  })
-  treeMap.set("缁煎悎鐩戞祴璁惧淇℃伅", list)
+    list.push(entity);
+  });
+  treeMap.set("缁煎悎鐩戞祴璁惧淇℃伅", list);
 }
 
 const districtList = ref([
@@ -301,7 +312,8 @@
     monitor: "",
     monitorAdvice: "",
     name: "灏瑰瑗挎矡灏瑰缓鐕曞灞嬪悗宕╁闅愭偅鐐�",
-    number: "13716108909,13716029391,13716291714,13716191943,13716427398,13124792612",
+    number:
+      "13716108909,13716029391,13716291714,13716191943,13716427398,13124792612",
     preventionDes: "",
     preventionLevel: "",
     preventionPlan: "瀹氭湡宸℃煡锛岄璀﹁浆绉伙紝绔嬭绀虹墝",
@@ -352,7 +364,8 @@
     monitor: "",
     monitorAdvice: "",
     name: "娌宠タ浜庡嚖鑻卞灞嬪悗宕╁闅愭偅鐐�",
-    number: "13716108909,13716029391,13716291714,13716191943,13716427398,13124792612",
+    number:
+      "13716108909,13716029391,13716291714,13716191943,13716427398,13124792612",
     preventionDes: "",
     preventionLevel: "",
     preventionPlan: "瀹氭湡宸℃煡锛岄璀﹁浆绉伙紝绔嬭绀虹墝",
@@ -403,7 +416,8 @@
     monitor: "",
     monitorAdvice: "",
     name: "鍗楁灏忎笢娌熸偿鐭虫祦闅愭偅鐐�",
-    number: "13716108909,13716029391,13716291714,13716191943,13716427398,13124792612",
+    number:
+      "13716108909,13716029391,13716291714,13716191943,13716427398,13124792612",
     preventionDes: "",
     preventionLevel: "",
     preventionPlan: "瀹氭湡宸℃煡,绔嬭绀虹墝",
@@ -454,7 +468,8 @@
     monitor: "",
     monitorAdvice: "",
     name: "澶х獞娌熸偿鐭虫祦闅愭偅鐐�",
-    number: "13716108909,13716029391,13716291714,13716191943,13716427398,13124792612",
+    number:
+      "13716108909,13716029391,13716291714,13716191943,13716427398,13124792612",
     preventionDes: "宸茬洃娴嬨�佸凡娌荤悊",
     preventionLevel: "",
     preventionPlan: "瀹氭湡宸℃煡锛岄璀﹁浆绉伙紝绔嬭绀虹墝",
@@ -505,7 +520,8 @@
     monitor: "",
     monitorAdvice: "",
     name: "澶т笢娌熸偿鐭虫祦闅愭偅鐐�",
-    number: "13716108909,13716029391,13716291714,13716191943,13716427398,13124792612",
+    number:
+      "13716108909,13716029391,13716291714,13716191943,13716427398,13124792612",
     preventionDes: "宸叉不鐞�",
     preventionLevel: "",
     preventionPlan: "瀹氭湡宸℃煡锛岄璀﹁浆绉�",
@@ -556,8 +572,10 @@
     monitor: "",
     monitorAdvice: "",
     name: "灏瑰瑗挎矡娉ョ煶娴侀殣鎮g偣",
-    number: "13716108909,13716029391,13716291714,13716191943,13716427398,13124792612",
-    preventionDes: "宸茬洃娴嬶紱鐏惧浣撳彉鍖栵細4澶勫潯绉墿鍨锛屽爢绉嚦鍧¤剼锛屾柟閲忕害20m鲁銆�",
+    number:
+      "13716108909,13716029391,13716291714,13716191943,13716427398,13124792612",
+    preventionDes:
+      "宸茬洃娴嬶紱鐏惧浣撳彉鍖栵細4澶勫潯绉墿鍨锛屽爢绉嚦鍧¤剼锛屾柟閲忕害20m鲁銆�",
     preventionLevel: "",
     preventionPlan: "瀹氭湡宸℃煡锛岄璀﹁浆绉�",
     preventionUnit: "涔¢晣",
@@ -607,7 +625,8 @@
     monitor: "",
     monitorAdvice: "",
     name: "鍖楀ぇ鍦拌タ娲煎瓙娌熸偿鐭虫祦闅愭偅鐐�",
-    number: "13716108909,13716029391,13716291714,13716191943,13716427398,13124792612",
+    number:
+      "13716108909,13716029391,13716291714,13716191943,13716427398,13124792612",
     preventionDes: "娌熷彛姝e鎴垮眿锛岄檷闆ㄦ椂鍑烘按閲忓ぇ锛屽缓璁不鐞嗭紝姹涙湡鍔犲己宸℃煡",
     preventionLevel: "",
     preventionPlan: "瀹氭湡宸℃煡锛岄璀﹁浆绉伙紝绔嬭绀虹墝",
@@ -658,7 +677,8 @@
     monitor: "",
     monitorAdvice: "",
     name: "鑼冨搴勭帇绉�鑾插灞嬪悗宕╁闅愭偅鐐�",
-    number: "13716108909,13716029391,13716291714,13716191943,13716427398,13124792612",
+    number:
+      "13716108909,13716029391,13716291714,13716191943,13716427398,13124792612",
     preventionDes: "杈瑰潯杈冮櫋锛岄『鍚戝博灞傦紝鎴垮眿闈犺繎鍧¤剼锛屽缓璁敖蹇不鐞�",
     preventionLevel: "",
     preventionPlan: "瀹氭湡宸℃煡锛岄璀﹁浆绉伙紝绔嬭绀虹墝",
@@ -709,7 +729,8 @@
     monitor: "",
     monitorAdvice: "",
     name: "涓変憨鍦拌寖蹇犵敯瀹跺眿鍚庡穿濉岄殣鎮g偣",
-    number: "13716108909,13716029391,13716291714,13716191943,13716427398,13124792612",
+    number:
+      "13716108909,13716029391,13716291714,13716191943,13716427398,13124792612",
     preventionDes: "",
     preventionLevel: "",
     preventionPlan: "瀹氭湡宸℃煡锛岄璀﹁浆绉伙紝鏇存崲璀︾ず鐗�",
@@ -760,8 +781,10 @@
     monitor: "",
     monitorAdvice: "",
     name: "浜庡瑗挎矡娉ョ煶娴侀殣鎮g偣",
-    number: "13716108909,13716029391,13716291714,13716191943,13716427398,13124792612",
-    preventionDes: "宸茬洃娴嬶紝2018鏉戝凡娌荤悊锛涙矡鍙e爢绉墖鏄庢樉锛屾瀵规埧灞嬶紝寤鸿姹涙湡鍔犲己宸℃煡",
+    number:
+      "13716108909,13716029391,13716291714,13716191943,13716427398,13124792612",
+    preventionDes:
+      "宸茬洃娴嬶紝2018鏉戝凡娌荤悊锛涙矡鍙e爢绉墖鏄庢樉锛屾瀵规埧灞嬶紝寤鸿姹涙湡鍔犲己宸℃煡",
     preventionLevel: "",
     preventionPlan: "瀹氭湡宸℃煡锛岄璀﹁浆绉�",
     preventionUnit: "涔¢晣",
@@ -811,7 +834,8 @@
     monitor: "",
     monitorAdvice: "",
     name: "妞存爲搴曚笅涓滄矡娉ョ煶娴侀殣鎮g偣",
-    number: "13716108909,13716029391,13716291714,13716191943,13716427398,13124792612",
+    number:
+      "13716108909,13716029391,13716291714,13716191943,13716427398,13124792612",
     preventionDes: "宸叉不鐞嗭細濞佽儊瀵硅薄閲嶅锛氫笌110116030015閲嶅5鎴�11浜�",
     preventionLevel: "",
     preventionPlan: "瀹氭湡宸℃煡锛岄璀﹁浆绉伙紝绔嬭绀虹墝",
@@ -862,7 +886,8 @@
     monitor: "",
     monitorAdvice: "",
     name: "娌充笢鍗楁矡娉ョ煶娴侀殣鎮g偣",
-    number: "13716108909,13716029391,13716291714,13716191943,13716427398,13124792612",
+    number:
+      "13716108909,13716029391,13716291714,13716191943,13716427398,13124792612",
     preventionDes: "宸茬洃娴�",
     preventionLevel: "",
     preventionPlan: "瀹氭湡宸℃煡,绔嬭绀虹墝",
@@ -889,40 +914,39 @@
     volumePotential: "",
     width: 0,
   },
-])
+]);
 
-function initDistrictPoint () {
-  let list = []
-  districtList.value.forEach(item => {
-    item.showBillboard = true
-    item.className = "district"
-    item.type = '娉ョ煶娴�'
-    const entity = createPoint(item)
-    entity.show = false
-    list.push(entity)
-  })
-  treeMap.set("瀛欒儭娌熼殣鎮g偣", list)
+function initDistrictPoint() {
+  let list = [];
+  districtList.value.forEach((item) => {
+    item.showBillboard = true;
+    item.className = "district";
+    item.type = "娉ョ煶娴�";
+    const entity = createPoint(item);
+    entity.show = false;
+    list.push(entity);
+  });
+  treeMap.set("瀛欒儭娌熼殣鎮g偣", list);
 }
 
+let divPointList = [];
 
-let divPointList = []
+function initDuanmianPoint() {
+  getDuanMainData().then((res) => {
+    const duanmianList = res.data;
+    const list = [];
+    duanmianList.forEach((item) => {
+      item.id = item.id + item.alias;
+      item.name = item.alias;
+      item.longitude = item.lon;
+      item.latitude = item.lat;
+      item.showBillboard = false;
+      item.className = "district";
 
-function initDuanmianPoint () {
-  getDuanMainData().then(res => {
-    const duanmianList = res.data
-    const list = []
-    duanmianList.forEach(item => {
-      item.id = item.id + item.alias
-      item.name = item.alias
-      item.longitude = item.lon
-      item.latitude = item.lat
-      item.showBillboard = false
-      item.className = "district"
-
-      const entity = createPoint(item)
-      entity.show = false
-      list.push(entity)
-      return
+      const entity = createPoint(item);
+      entity.show = false;
+      list.push(entity);
+      return;
       const divPoint = earthCtrl.factory.createDivPoint(
         item.alias,
         { lon: longitude, lat: latitude },
@@ -937,26 +961,23 @@
           near: 0,
           far: 500000,
         }
-      )
-      divPoint.item.show = false
-      console.log(divPoint)
+      );
+      divPoint.item.show = false;
+      console.log(divPoint);
 
-      divPointList.push(divPoint.item)
-    })
-    treeMap.set("瀛欒儭娌熶豢鐪熸爣娉ㄥ湴鐗�", list)
-  })
-
+  divPointList.push(divPoint.item);
+});
+treeMap.set("瀛欒儭娌熶豢鐪熸爣娉ㄥ湴鐗�", list);
+  });
 }
 
-function addTetrahedron (visible) {
-  const emergencyAreaList = []
+function addTetrahedron(visible) {
+  const emergencyAreaList = [];
 
-  loadAreaPolygon("/json/emergency_area.geojson", true).then(entities => {
-    emergencyAreaList.push(...entities)
-  })
+  loadAreaPolygon("/json/emergency_area.geojson", true).then((entities) => {
+    emergencyAreaList.push(...entities);
+  });
   // console.log('polygon', polygon);
-
-
 
   let list = [
     {
@@ -977,8 +998,8 @@
       latitude: 40.558199,
       altitude: 528,
     },
-  ]
-  list.forEach(item => {
+  ];
+  list.forEach((item) => {
     let point = earthCtrl.factory.addTetrahedron({
       position: {
         lon: item.longitude,
@@ -987,70 +1008,78 @@
       },
       multiple: 1.0,
       scale: new SmartEarth.Cesium.Cartesian3(20, 20, 20),
-    })
-    console.log("point", point)
-    emergencyAreaList.push(point)
-
-  })
-  treeMap.set("閬块櫓鐐�", emergencyAreaList)
-
+    });
+    console.log("point", point);
+    emergencyAreaList.push(point);
+  });
+  treeMap.set("閬块櫓鐐�", emergencyAreaList);
 }
-function toggleLayerVisible (name, checked) {
-  const entityList = treeMap.get(name)
+function toggleLayerVisible(name, checked) {
+  const entityList = treeMap.get(name);
   if (Array.isArray(entityList) && entityList.length > 0) {
-    entityList.forEach(entity => {
-      entity.show = checked
-    })
+    entityList.forEach((entity) => {
+      entity.show = checked;
+    });
   }
-  treeMap.set(name, entityList)
+  treeMap.set(name, entityList);
 }
 
-function getData () {
-  initDevicePoint()
-  initDistrictPoint()
-  initDuanmianPoint()
+function getData() {
+  initDevicePoint();
+  initDistrictPoint();
+  initDuanmianPoint();
 }
 
 // 閫氳繃 store 浼犻�掗渶瑕侀�変腑鐨刱ey
-watch(() => checkedKeys.value, (keys) => {
-  if (keys && Array.isArray(keys)) {
-    treeRef.value.setCheckedKeys(defaultSelectedKeys.value.concat(keys), true)
+watch(
+  () => checkedKeys.value,
+  (keys) => {
+    if (keys && Array.isArray(keys)) {
+      treeRef.value.setCheckedKeys(
+        defaultSelectedKeys.value.concat(keys),
+        true
+      );
+    }
   }
-})
+);
 
 watch(
   () => route.fullPath,
-  path => {
-    const defaultKeys = defaultSelectedKeys.value
+  (path) => {
+    const defaultKeys = defaultSelectedKeys.value;
     if (path == "/yhgl") {
-      treeRef.value.setCheckedKeys(defaultKeys.concat("瀛欒儭娌熼殣鎮g偣"), true)
-      toggleLayerVisible("瀛欒儭娌熼殣鎮g偣", true)
-      toggleLayerVisible("缁煎悎鐩戞祴璁惧淇℃伅", false)
-      toggleLayerVisible("瀛欒儭娌熶豢鐪熸爣娉ㄥ湴鐗�", false)
-
+      treeRef.value.setCheckedKeys(defaultKeys.concat("瀛欒儭娌熼殣鎮g偣"), true);
+      toggleLayerVisible("瀛欒儭娌熼殣鎮g偣", true);
+      toggleLayerVisible("缁煎悎鐩戞祴璁惧淇℃伅", false);
+      toggleLayerVisible("瀛欒儭娌熶豢鐪熸爣娉ㄥ湴鐗�", false);
     } else if (path == "/zhjc") {
-      treeRef.value.setCheckedKeys(defaultKeys.concat("缁煎悎鐩戞祴璁惧淇℃伅"), true)
-      toggleLayerVisible("缁煎悎鐩戞祴璁惧淇℃伅", true)
-      toggleLayerVisible("瀛欒儭娌熼殣鎮g偣", false)
-      toggleLayerVisible("瀛欒儭娌熶豢鐪熸爣娉ㄥ湴鐗�", false)
+      treeRef.value.setCheckedKeys(
+        defaultKeys.concat("缁煎悎鐩戞祴璁惧淇℃伅"),
+        true
+      );
+      toggleLayerVisible("缁煎悎鐩戞祴璁惧淇℃伅", true);
+      toggleLayerVisible("瀛欒儭娌熼殣鎮g偣", false);
+      toggleLayerVisible("瀛欒儭娌熶豢鐪熸爣娉ㄥ湴鐗�", false);
     } else if (path == "/mnfz") {
-      treeRef.value.setCheckedKeys(defaultKeys.concat("瀛欒儭娌熶豢鐪熸爣娉ㄥ湴鐗�"), true)
-      toggleLayerVisible("瀛欒儭娌熶豢鐪熸爣娉ㄥ湴鐗�", true)
-      toggleLayerVisible("瀛欒儭娌熼殣鎮g偣", false)
-      toggleLayerVisible("缁煎悎鐩戞祴璁惧淇℃伅", false)
-
+      treeRef.value.setCheckedKeys(
+        defaultKeys.concat("瀛欒儭娌熶豢鐪熸爣娉ㄥ湴鐗�"),
+        true
+      );
+      toggleLayerVisible("瀛欒儭娌熶豢鐪熸爣娉ㄥ湴鐗�", true);
+      toggleLayerVisible("瀛欒儭娌熼殣鎮g偣", false);
+      toggleLayerVisible("缁煎悎鐩戞祴璁惧淇℃伅", false);
     } else {
-      treeRef.value.setCheckedKeys(defaultKeys, true)
+      treeRef.value.setCheckedKeys(defaultKeys, true);
     }
   }
-)
+);
 onMounted(() => {
-  initMap()
-  getData()
-})
+  initMap();
+  getData();
+});
 onUnmounted(() => {
-  viewer.entities.removeAll()
-})
+  viewer.entities.removeAll();
+});
 </script>
 
 <style lang="less" scoped>
@@ -1063,4 +1092,4 @@
   height: 200px;
   z-index: 99;
 }
-</style>
\ No newline at end of file
+</style>
diff --git a/src/components/tools/SlopeAnalysis.vue b/src/components/tools/SlopeAnalysis.vue
index a12b918..71557c9 100644
--- a/src/components/tools/SlopeAnalysis.vue
+++ b/src/components/tools/SlopeAnalysis.vue
@@ -1,15 +1,6 @@
 <template>
   <div class="terrain-settings">
     <el-form :model="form" label-width="80px">
-      <!-- 鍦拌〃娓叉煋 -->
-      <el-form-item label="鍦拌〃娓叉煋">
-        <el-radio-group v-model="form.terrainRender">
-          <el-radio :label="0">鏃�</el-radio>
-          <el-radio :label="1">鍧″害</el-radio>
-        </el-radio-group>
-      </el-form-item>
-
-      <!-- 绛夐珮绾垮紑鍏� -->
       <el-form-item label="绛夐珮绾�">
         <el-switch
           v-model="form.contourLines"
@@ -51,7 +42,6 @@
 
 // 鍒濆鍖� form 鏁版嵁
 const form = reactive({
-  terrainRender: 0,
   contourLines: false,
   color: "red",
   spacing: 50,
diff --git a/src/components/tools/Tools.vue b/src/components/tools/Tools.vue
index 56ab6ec..bc15549 100644
--- a/src/components/tools/Tools.vue
+++ b/src/components/tools/Tools.vue
@@ -42,16 +42,18 @@
       <div v-show="echartsShow" id="sectionCharts" class="sectionChars">
         <div id="echartsView1" style="width: 100%; height: 100%"></div>
       </div>
-      <!-- 鍧″悜鍒嗘瀽 -->
+      <!-- 鍧″害鍧″悜鍒嗘瀽 -->
       <Aspect
         v-show="showAspect"
         @draw="SlopeArrow"
         @clear="SlopeArrowClose"
+        @handleaspect="handleaspect"
+        @handleSlope="handleSlope"
         class="popup-menu-see"
       />
       <SlopeAnalysis
         @draw="SlopeAnalysiss"
-        v-show="showSlope"
+        v-show="isContourLabel"
         class="popup-menu-see"
         @update-slope="onUpdateSlope"
       />
@@ -128,9 +130,6 @@
 // 鍧″悜绠ご寮圭獥
 const showAspect = ref(false);
 
-// 鍧″害鍒嗘瀽寮圭獥
-const showSlope = ref(false);
-
 // 宸ュ叿鍒楄〃
 const toolList = ref([
   {
@@ -162,8 +161,7 @@
     active: false,
     options: [
       { name: "鐐逛綅淇℃伅鎻愬彇", icon: "鐐逛綅淇℃伅鎻愬彇" },
-      { name: "鍧″害鍒嗘瀽", icon: "鍧″害鍧″悜鎻愬彇" },
-      { name: "鍧″悜鍒嗘瀽", icon: "鍧″害鍧″悜鎻愬彇" },
+      { name: "鍧″害鍧″悜鍒嗘瀽", icon: "鍧″害鍧″悜鎻愬彇" },
       { name: "鍓栭潰鎻愬彇", icon: "鍓栭潰鎻愬彇" },
       { name: "鎸栧~鏂硅绠�", icon: "鎸栧~鏂硅绠�" },
       { name: "绛夐珮绾垮垎鏋�", icon: "绛夐珮绾垮垎鏋�" },
@@ -201,7 +199,23 @@
 
 // 澶勭悊宸ュ叿鐐瑰嚮浜嬩欢
 function handleClick(tool, event) {
+  toolList.value.forEach((item) => {
+    item.active =
+      item.name === tool.name && currentToolOptions.value !== tool.options;
+  });
   console.log(tool.options);
+  // 濡傛灉褰撳墠宸ュ叿宸茬粡鏄縺娲荤姸鎬侊紝鍒欏叧闂畠
+  if (currentToolOptions.value === tool.options) {
+    currentToolOptions.value = null; // 娓呯┖褰撳墠宸ュ叿閫夐」
+    isPopupVisible.value = false; // 闅愯棌寮圭獥
+    seeAnalyzeShow.value = false; // 鍙鍩�
+    topographyShow.value = false; // 鍓栭潰
+    echartsShow.value = false; // 鍓栭潰echarts
+    showAspect.value = false; // 鍧″害鍧″悜鍒嗘瀽
+    showRain.value = false; // 闆ㄥぉ
+    showSnow.value = false; // 闆ぉ
+    return;
+  }
   // 濡傛灉宸ュ叿鍚嶇О鏄� "鍥惧眰绠$悊"
   if (tool.name === "鍥惧眰绠$悊") {
     showLayerTree.value = !showLayerTree.value; // 鍒囨崲鍥惧眰鏍戠殑鏄剧ず鐘舵��
@@ -210,7 +224,6 @@
     topographyShow.value = false; //鍓栭潰
     echartsShow.value = false; //鍓栭潰echarts
     showAspect.value = false; //鍧″悜绠ご
-    showSlope.value = false; //鍧″悜绠ご
     showRain.value = false; //闆ㄥぉ
     showSnow.value = false; //闆ㄥぉ
     return;
@@ -224,15 +237,17 @@
   topographyShow.value = false; //鍓栭潰
   echartsShow.value = false; //鍓栭潰echarts
   showAspect.value = false; //鍧″悜绠ご
-  showSlope.value = false; //鍧″悜绠ご
   showRain.value = false; //闆ㄥぉ
   showSnow.value = false; //闆ㄥぉ
 }
 
+const currentOption = ref(null);
+
 // 澶勭悊寮圭獥閫夐」鐐瑰嚮浜嬩欢
 function handleOptionClick(option) {
   isPopupVisible.value = false;
-  console.log("Selected option:", option);
+  currentOption.value = option.name;
+  console.log("Selected option:", currentOption.value);
   const actionMap = {
     鏄剧ず鍥惧眰: () => (showLayerTree.value = true),
     闅愯棌鍥惧眰: () => (showLayerTree.value = false),
@@ -278,11 +293,16 @@
     鍓栭潰鎻愬彇: () => {
       topographyShow.value = true;
     },
-    鍧″害鍒嗘瀽: () => {
-      showSlope.value = true;
-    },
-    鍧″悜鍒嗘瀽: () => {
+    鍧″害鍧″悜鍒嗘瀽: () => {
       showAspect.value = true;
+    },
+    绛夐珮绾垮垎鏋�: () => {
+      isContourLabel.value = true;
+      if (isContourLabel.value === false) {
+        mapUtils.createContourLabel();
+      } else {
+        mapUtils.closeContourLabel();
+      }
     },
     鐐逛綅淇℃伅鎻愬彇: () => {
       isPickActive.value = !isPickActive.value;
@@ -302,14 +322,6 @@
         mapUtils.FloodAnalysis("close");
       } else {
         mapUtils.FloodAnalysis();
-      }
-    },
-    绛夐珮绾垮垎鏋�: () => {
-      isContourLabel.value = !isContourLabel.value;
-      if (isContourLabel.value === false) {
-        mapUtils.createContourLabel();
-      } else {
-        mapUtils.closeContourLabel();
       }
     },
   };
@@ -374,6 +386,14 @@
   mapUtils.handleClear();
 };
 
+// 鍒掑垎鍖哄煙
+const SlopeArrow = () => {
+  mapUtils.hfqy();
+};
+// 鍧″害鍒嗘瀽
+const handleaspect = () => {
+  mapUtils.pdfx();
+};
 //鍧″害鐨勭澶磋搴�(瑙掑害涓�0~1,鑼冨洿鍐呯殑鍧囧寑鎻掑��)
 const angles = [
   0.0, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7,
@@ -401,18 +421,17 @@
   "#F0AD56",
   "#F2CC45",
 ];
-
-const SlopeArrow = () => {
+// 鍧″悜鍒嗘瀽
+const handleSlope = () => {
   mapUtils.pxjt(colors, angles);
 };
-// 鍏抽棴鍧″悜绠ご
+// 鍏抽棴鍧″害鍧″悜鍒嗘瀽
 const SlopeArrowClose = () => {
-  mapUtils.cleanupAnalysisTools();
+  mapUtils.clearPreviousAnalysis();
 };
 
-// 鍧″害鍒嗘瀽
+// 绛夐珮绾�
 const formData = reactive({
-  terrainRender: 0,
   contourLines: false,
   color: "red",
   spacing: 50,
@@ -420,14 +439,12 @@
 });
 
 const SlopeAnalysiss = () => {
-  mapUtils.pdfx(formData);
+  mapUtils.dgxfx(formData);
 };
 
-
-// 鍧″害
 const onUpdateSlope = (newOption) => {
   Object.assign(formData, newOption);
-  mapUtils.pdfx(formData);
+  mapUtils.dgxfx(formData);
 };
 
 // 闆�
diff --git a/src/utils/tools.js b/src/utils/tools.js
index 6b7c835..a56a9c7 100644
--- a/src/utils/tools.js
+++ b/src/utils/tools.js
@@ -25,6 +25,7 @@
   snowEffect: null, // 鏂板闆晥鏋滃疄渚�
   regionTerrain: null,
   polygonPosition: [],
+  PolygonArr: [],
 
   init(earthCtrl) {
     this.earthCtrl = earthCtrl;
@@ -91,81 +92,80 @@
   },
   // 鍖哄煙鍒掑垎宸ュ叿
   hfqy() {
-    // 鍒濆鍖栧尯鍩熷湴褰�
     this.regionTerrain = earthCtrl.factory.createRegionTerrain({});
     this.polygonPosition = [];
 
-    // 鍒涘缓缁樺埗宸ュ叿
-    const drawTool = earthCtrl.shapeTool.createDrawShapeTool((e) => {
-      try {
-        if (!e || !e.result) {
-          throw new Error('Invalid drawing result');
-        }
-
-        // 杞崲鍧愭爣骞跺瓨鍌�
-        const polygonI = [];
-        for (const point of e.result) {
-          const cartographic = earthCtrl.coreMap.scene.globe.ellipsoid.cartesianToCartographic(point);
-          const lon = Cesium.Math.toDegrees(cartographic.longitude);
-          const lat = Cesium.Math.toDegrees(cartographic.latitude);
-
-          polygonI.push(lon, lat, 0);
-          this.polygonPosition.push(lon, lat);
-        }
-
-        // 璁剧疆鍖哄煙鍦板舰
-        this.regionTerrain.setPositions(this.polygonPosition);
-        this.regionTerrain.setRegionEnabled(true);
-
-        // 娓呴櫎缁樺埗宸ュ叿
-        drawTool.removeFromMap();
-      } catch (error) {
-        console.error('Error during region drawing:', error);
-        drawTool.removeFromMap();
+    const draw = earthCtrl.shapeTool.createDrawShapeTool((e) => {
+      const polygonI = [];
+      for (const i of e.result) {
+        const ellipsoid = earthCtrl.coreMap.scene.globe.ellipsoid;
+        const cartographic = ellipsoid.cartesianToCartographic(i);
+        const lon = SmartEarth.Cesium.Math.toDegrees(
+          cartographic.longitude
+        ); // 缁忓害
+        const lat = SmartEarth.Cesium.Math.toDegrees(cartographic.latitude); // 绾害
+        polygonI.push(lon, lat, 0);
+        this.polygonPosition.push(lon, lat);
       }
+      this.PolygonArr.push({
+        id: earthCtrl.factory.createUUID(),
+        polygon: polygonI,
+      });
+      draw.removeFromMap();
+      this.regionTerrain.setPositions(this.polygonPosition);
+      this.regionTerrain.setRegionEnabled(true);
     });
-
-    return drawTool;
   },
+  // 鍧″害鍒嗘瀽
+  pdfx() {
+    if (this.regionTerrain) {
+      console.log('鍧″害鍒嗘瀽');
+      this.clearPreviousAnalysis(); // 鍏堟竻闄や箣鍓嶇殑鍒嗘瀽
+      this.regionTerrain.setType("slope");
+      this.regionTerrain.update();
+    }
+  },
+
   // 鍧″悜绠ご
   pxjt(colors, angles) {
-    this.hfqy()
+    if (this.regionTerrain) {
+      this.clearPreviousAnalysis(); // 鍏堟竻闄や箣鍓嶇殑鍒嗘瀽
+      this.regionTerrain.setType("aspect");
+      this.regionTerrain.update();
+    }
+
     this.slopeArrow = earthCtrl.factory.createSlopeArrow({});
     this.slopeArrow.setColorsAndAngles(colors, angles);
-    this.regionTerrain.setPositions(this.polygonPosition);
-    this.regionTerrain.setRegionEnabled(true);
     this.slopeArrow.setSlopeType(1);
   },
 
-  // 鍧″害鍒嗘瀽
-  pdfx(option) {
-    this.hfqy()
-    this.elevationTool = new SmartEarth.ElevationTool(earthCtrl)
-    if (option.terrainRender == '1') {
-      this.elevationTool.type = 'slope'
-    } else {
-      this.elevationTool.type = 'none'
-    }
-    this.elevationTool.tf = option.contourLines
-    this.elevationTool.setSpacing(option.spacing)
-    this.elevationTool.setWidth(option.lineWidth)
+  // 绛夐珮绾垮垎鏋�
+  dgxfx(option) {
+    this.clearPreviousAnalysis(); // 鍏堟竻闄や箣鍓嶇殑鍒嗘瀽
+    this.hfqy();
+    this.elevationTool = new SmartEarth.ElevationTool(earthCtrl);
+    this.elevationTool.tf = option.contourLines;
+    this.elevationTool.setSpacing(option.spacing);
+    this.elevationTool.setWidth(option.lineWidth);
     this.elevationTool.setContourColor(option.color);
     this.elevationTool.render();
   },
 
-  // 娓呯悊鎵�鏈夊垎鏋愬伐鍏�
-  cleanupAnalysisTools() {
-    // 鍧″悜绠ご
+  // 娓呴櫎涔嬪墠鐨勫垎鏋愶紙鍧″害銆佸潯鍚戙�佺瓑楂樼嚎锛�
+  clearPreviousAnalysis() {
+    if (this.regionTerrain) {
+      this.regionTerrain.setType("");
+      this.regionTerrain.update();
+    }
+
     if (this.slopeArrow) {
       this.slopeArrow.setSlopeType(0);
-      this.slopeArrow = null;
+      // this.slopeArrow = null;
     }
-    // 閫夋嫨鍖哄煙
-    if (this.regionTerrain) {
-      this.regionTerrain.setRegionEnabled(false);
-      this.regionTerrain = null;
+
+    if (this.elevationTool) {
+      this.elevationTool = null;
     }
-    this.polygonPosition = [];
   },
   // 鏍囩粯
   CreateLabel(pic, show) {

--
Gitblit v1.9.3