From cf7752d995e09d48eca9a1ca5634a9e71ae46553 Mon Sep 17 00:00:00 2001
From: wangjuncheng <1>
Date: 星期二, 22 七月 2025 16:19:06 +0800
Subject: [PATCH] 透明度0 修改模型数据路径

---
 src/components/tools/LayerTree.vue | 1383 +++++++++++++++------------------------------------------
 1 files changed, 371 insertions(+), 1,012 deletions(-)

diff --git a/src/components/tools/LayerTree.vue b/src/components/tools/LayerTree.vue
index 6ae14c7..c217cd7 100644
--- a/src/components/tools/LayerTree.vue
+++ b/src/components/tools/LayerTree.vue
@@ -13,14 +13,32 @@
 </template>
 
 <script setup>
-import { ref, onMounted, onBeforeUnmount, watch, onUnmounted } from "vue";
-import { createPoint, removeEntities, addTileset } from "@/utils/map";
+import { ref, onMounted, watch, nextTick, onUnmounted, watchEffect } from "vue";
+import {
+  createPoint,
+  removeEntities,
+  addTileset,
+  clearAllPoints,
+} from "@/utils/map";
 import { deviceDictList, getDictName } from "@/constant/dict.js";
 import { useRoute } from "vue-router";
-import { loadAreaPolygon, clearAreaPolygon } from "@/utils/area";
+import {
+  loadAreaPolygon,
+  convertToGeoJson,
+  clearAreaPolygon,
+} from "@/utils/area";
 import { checkedKeys } from "@/store/index";
 import { getDuanMainData } from "@/api/index.js";
+import { useSimStore } from "@/store/simulation";
+import { getSafePoint } from "@/api/hpApi";
+
+const simStore = useSimStore();
 const route = useRoute();
+
+/**
+ * 鍥惧眰鏍戦厤缃暟鎹�
+ * 鍖呭惈涓夌淮鏈嶅姟鍜屽浘灞傛暟鎹袱澶у垎绫�
+ */
 const treeData = ref([
   {
     label: "涓夌淮鏈嶅姟",
@@ -33,1068 +51,409 @@
   {
     label: "鍥惧眰鏁版嵁",
     children: [
-      {
-        label: "鍖椾含甯傞殣鎮g偣",
-      },
-      {
-        label: "瀛欒儭娌熼殣鎮g偣",
-      },
-      // {
-      // 	label: "娉ョ煶娴侀殣鎮g偣闈㈡暟鎹�",
-      // },
-      {
-        label: "缁煎悎鐩戞祴璁惧淇℃伅",
-      },
-      {
-        label: "瀛欒儭娌熶豢鐪熸爣娉ㄥ湴鐗�",
-      },
-      {
-        label: "閬块櫓鐐�",
-      },
+      { label: "鍖椾含甯傞殣鎮g偣" },
+      { label: "瀛欒儭娌熼殣鎮g偣" },
+      { label: "缁煎悎鐩戞祴璁惧淇℃伅" },
+      { label: "瀛欒儭娌熸柇闈�" },
+      { label: "閬块櫓鍦烘墍" },
     ],
   },
 ]);
+
+// 榛樿閫変腑鐨勮妭鐐癸紙鍦板舰鏁版嵁榛樿寮�鍚級
+const defaultSelectedKeys = ref(["鍦板舰鏁版嵁"]);
+
+// Tree 瀹炰緥寮曠敤
 const treeRef = ref(null);
+
+// 瀛樺偍鍥惧眰瀹炰綋鐨� Map锛岀敤浜庣鐞嗘墍鏈夊浘灞�
 const treeMap = new Map();
-const defaultSelectedKeys = ref(["妯″瀷鏁版嵁", "褰卞儚鏁版嵁", "鍦板舰鏁版嵁"]);
-function handleCheckChange(data, checked, indeterminate) {
+
+// 鍦板舰鏁版嵁瀹炰緥
+let TerrainLayer = null;
+// 褰卞儚鏁版嵁瀹炰緥
+let ImageryLayer = null;
+
+/**
+ * 鍒濆鍖栧湴褰㈡暟鎹浘灞�
+ */
+async function initTerrainLayer() {
+  try {
+    TerrainLayer = await earthCtrl.factory.createTerrainLayer({
+      sourceType: "ctb",
+      url: "http://106.120.22.26:9103/gisserver/ctsserver/sunhugoudem",
+      requestVertexNormals: true,
+    });
+    treeMap.set("鍦板舰鏁版嵁", TerrainLayer);
+  } catch (error) {
+    console.error("鍦板舰鏁版嵁鍒濆鍖栧け璐�:", error);
+  }
+}
+
+/**
+ * 鍒濆鍖栧奖鍍忔暟鎹浘灞�
+ */
+async function initImageryLayer() {
+  try {
+    ImageryLayer = await earthCtrl.factory.createImageryLayer({
+      sourceType: "tms",
+      url: "http://106.120.22.26:9103/gisserver/tmsserver/sunhugoudom",
+    });
+    treeMap.set("褰卞儚鏁版嵁", ImageryLayer);
+  } catch (error) {
+    console.error("褰卞儚鏁版嵁鍒濆鍖栧け璐�:", error);
+  }
+}
+
+/**
+ * 澶勭悊鏍戣妭鐐瑰嬀閫夊彉鍖�
+ * @param {Object} data - 鑺傜偣鏁版嵁
+ * @param {Boolean} checked - 鏄惁閫変腑
+ * @param {Boolean} indeterminate - 涓嶇‘瀹氱姸鎬�
+ */
+function handleCheckChange(data, checked) {
   const label = data.label;
-  const list = treeMap.get(label);
-  if (list) {
-    toggleLayerVisible(label, checked);
+
+  // 鍦板舰鏁版嵁澶勭悊
+  if (label === "鍦板舰鏁版嵁") {
+    handleTerrainLayer(checked);
     return;
   }
-  switch (label) {
-    case "妯″瀷鏁版嵁":
-      list.show = checked;
-      break;
-    case "鍖椾含甯傞殣鎮g偣":
-      console.log("鍖椾含甯傞殣鎮g偣", checked, indeterminate);
-      break;
-    case "瀛欒儭娌熼殣鎮g偣":
-      console.log("瀛欒儭娌熼殣鎮g偣", checked, indeterminate);
-      break;
-    case "娉ョ煶娴侀殣鎮g偣闈㈡暟鎹�":
-      console.log("娉ョ煶娴侀殣鎮g偣闈㈡暟鎹�", checked, indeterminate);
-      break;
-    case "缁煎悎鐩戞祴璁惧淇℃伅":
-      console.log("缁煎悎鐩戞祴璁惧淇℃伅", checked, indeterminate);
-      break;
-    case "瀛欒儭娌熶豢鐪熸爣娉ㄥ湴鐗�":
-      console.log("瀛欒儭娌熶豢鐪熸爣娉ㄥ湴鐗�", checked, indeterminate);
-      break;
-    case "閬块櫓鐐�":
-      addTetrahedron();
-      break;
+
+  // 褰卞儚鏁版嵁澶勭悊
+  if (label === "褰卞儚鏁版嵁") {
+    handleImageryLayer(checked);
+    return;
+  }
+
+  // 妯″瀷鏁版嵁澶勭悊
+  if (label === "妯″瀷鏁版嵁") {
+    handleModelLayer(checked);
+    return;
+  }
+
+  // 璁惧淇℃伅澶勭悊
+  if (label === "缁煎悎鐩戞祴璁惧淇℃伅") {
+    simStore.DeviceShowSwitch = checked;
+    return;
+  }
+
+  // 闅愭偅鐐瑰鐞�
+  if (label === "瀛欒儭娌熼殣鎮g偣") {
+    simStore.DangerShowSwitch = checked;
+    return;
+  }
+
+  // 鍏朵粬鍥惧眰鐨勫鐞�
+  const layer = treeMap.get(label);
+  if (layer) {
+    toggleLayerVisible(label, checked);
   }
 }
-function initMap() {
-  // let modelPromise = addTileset(
-  // 	`http://106.120.22.26:9103/gisserver/c3dserver/sunhugou3d/tileset.json`
-  // )
-  // modelPromise.then(model => {
-  // 	treeMap.set("妯″瀷鏁版嵁", model)
-  // })
-  // let ImageryLayer = earthCtrl.factory.createImageryLayer({
-  // 	sourceType: "tms",
-  // 	url: "http://106.120.22.26:9103/gisserver/tmsserver/sunhugoudom",
-  // })
-  //   let TerrainLayer = earthCtrl.factory.createTerrainLayer({
-  //     sourceType: "ctb",
-  //     url: "http://106.120.22.26:9103/gisserver/ctsserver/sungugoudem",
-  //   });
-  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);
+
+/**
+ * 澶勭悊鍦板舰鍥惧眰
+ */
+function handleTerrainLayer(checked) {
+  if (checked) {
+    initTerrainLayer();
+    toggleLayerVisible("鍦板舰鏁版嵁", true);
+  } else {
+    const layer = treeMap.get("鍦板舰鏁版嵁");
+    if (layer) {
+      toggleLayerVisible("鍦板舰鏁版嵁", false);
+      layer.removeFromMap();
+      treeMap.delete("鍦板舰鏁版嵁");
+    }
+  }
 }
 
-const devicetList = ref([
-  {
-    deviceCode: "303A9016",
-    deviceId: "1821067878870257666",
-    deviceName: "瀛欒儭娌�(澧掓儏)",
-    dictDeviceType: "1437295822",
-    latitude: 40.56476666,
-    longitude: 116.5955361,
-  },
-  {
-    deviceCode: "01303A9016",
-    deviceId: "1821067850122498049",
-    deviceName: "瀛欒儭娌�(澧掓儏)",
-    dictDeviceType: "14372958380",
-    latitude: 40.56476666,
-    longitude: 116.5955361,
-  },
-  {
-    deviceCode: "1101161102180100010063",
-    deviceId: "1554360510040182786",
-    deviceName: "鎬�鏌斿尯鐞夌拑搴欓晣瀛欒儭娌熷肮瀹惰タ娌熼洦閲忚0063",
-    dictDeviceType: "1437295810",
-    latitude: 40.556589,
-    longitude: 116.579459,
-  },
-  {
-    deviceCode: "1101161102180100194030",
-    deviceId: "1554361328692826114",
-    deviceName: "鎬�鏌斿尯鐞夌拑搴欓晣瀛欒儭娌熸潙涓婂彴瀛愭渤涓滃崡娌熺紪鐮佸櫒4030",
-    dictDeviceType: "1437295815",
-    latitude: 40.554272,
-    longitude: 116.592583,
-  },
-  {
-    deviceCode: "1101161102180100031041",
-    deviceId: "1554360448702681089",
-    deviceName: "鎬�鏌斿尯鐞夌拑搴欓晣瀛欒儭娌熸潙涓婂彴瀛愭渤涓滃崡娌熸澹颁华1041",
-    dictDeviceType: "1437295832",
-    latitude: 40.553236,
-    longitude: 116.592304,
-  },
-  {
-    deviceCode: "1101161102180100022007",
-    deviceId: "1554360273959587842",
-    deviceName: "鎬�鏌斿尯鐞夌拑搴欓晣瀛欒儭娌熸潙涓婂彴瀛愭渤涓滃崡娌熷惈姘寸巼2007",
-    dictDeviceType: "1437295822",
-    latitude: 40.545821,
-    longitude: 116.586354,
-  },
-  {
-    deviceCode: "1101161102180100225406",
-    deviceId: "1554360478494822402",
-    deviceName: "鎬�鏌斿尯鐞夌拑搴欓晣瀛欒儭娌熸潙涓婂彴瀛愭渤涓滃崡娌熸祦閫熶华5406",
-    dictDeviceType: "1437295821",
-    latitude: 40.554368,
-    longitude: 116.592989,
-  },
-  {
-    deviceCode: "1101161102180100055006",
-    deviceId: "1554360276627165185",
-    deviceName: "鎬�鏌斿尯鐞夌拑搴欓晣瀛欒儭娌熸潙涓婂彴瀛愭渤涓滃崡娌熸偿浣嶈5006",
-    dictDeviceType: "1437295811",
-    latitude: 40.554398,
-    longitude: 116.592929,
-  },
-  {
-    deviceCode: "1101161102180100010064",
-    deviceId: "1554360452670492674",
-    deviceName: "鎬�鏌斿尯鐞夌拑搴欓晣瀛欒儭娌熸潙涓婂彴瀛愭渤涓滃崡娌熼洦閲忚0064",
-    dictDeviceType: "1437295810",
-    latitude: 40.545741,
-    longitude: 116.586304,
-  },
-  {
-    deviceCode: "1101161102180100183030",
-    deviceId: "1554360533087883265",
-    deviceName: "鎬�鏌斿尯鐞夌拑搴欓晣瀛欒儭娌熸潙涓婂彴瀛愭渤涓滃崡娌熸憚鍍忓ご3030",
-    dictDeviceType: "1437295825",
-    latitude: 40.554272,
-    longitude: 116.592583,
-  },
-  {
-    deviceCode: "1101161102180100194031",
-    deviceId: "1554361328877375489",
-    deviceName: "鎬�鏌斿尯鐞夌拑搴欓晣瀛欒儭娌熸ご鏍戝簳涓嬩笢娌熺紪鐮佸櫒4031",
-    dictDeviceType: "1437295815",
-    latitude: 40.554035,
-    longitude: 116.59786,
-  },
-  {
-    deviceCode: "1101161102180100055007",
-    deviceId: "1554360509775941634",
-    deviceName: "鎬�鏌斿尯鐞夌拑搴欓晣瀛欒儭娌熸ご鏍戝簳涓嬩笢娌熸偿浣嶈5007",
-    dictDeviceType: "1437295811",
-    latitude: 40.554729,
-    longitude: 116.598165,
-  },
-  {
-    deviceCode: "1101161102180100031042",
-    deviceId: "1554360448916590593",
-    deviceName: "鎬�鏌斿尯鐞夌拑搴欓晣瀛欒儭娌熸ご鏍戝簳涓嬩笢娌熸澹颁华1042",
-    dictDeviceType: "1437295832",
-    latitude: 40.549398,
-    longitude: 116.600387,
-  },
-  {
-    deviceCode: "1101161102180100225407",
-    deviceId: "1554360478658400257",
-    deviceName: "鎬�鏌斿尯鐞夌拑搴欓晣瀛欒儭娌熸ご鏍戝簳涓嬩笢娌熸祦閫熶华5407",
-    dictDeviceType: "1437295821",
-    latitude: 40.55481,
-    longitude: 116.598025,
-  },
-  {
-    deviceCode: "1101161102180100022008",
-    deviceId: "1554360274165108737",
-    deviceName: "鎬�鏌斿尯鐞夌拑搴欓晣瀛欒儭娌熸ご鏍戝簳涓嬩笢娌熷惈姘寸巼2008",
-    dictDeviceType: "1437295822",
-    latitude: 40.544645,
-    longitude: 116.596511,
-  },
-  {
-    deviceCode: "1101161102180100183031",
-    deviceId: "1554360533255655426",
-    deviceName: "鎬�鏌斿尯鐞夌拑搴欓晣瀛欒儭娌熸ご鏍戝簳涓嬩笢娌熸憚鍍忓ご3031",
-    dictDeviceType: "1437295825",
-    latitude: 40.554035,
-    longitude: 116.59786,
-  },
-  {
-    deviceCode: "1101161102180100010065",
-    deviceId: "1554360452888596482",
-    deviceName: "鎬�鏌斿尯鐞夌拑搴欓晣瀛欒儭娌熸ご鏍戝簳涓嬩笢娌熼洦閲忚0065",
-    dictDeviceType: "1437295810",
-    latitude: 40.543104,
-    longitude: 116.59585,
-  },
-  {
-    deviceCode: "1101161102180100031040",
-    deviceId: "1554360448383913986",
-    deviceName: "鎬�鏌斿尯鐞夌拑搴欓晣瀛欒儭娌熸潙浜庡瑗挎矡娆″0浠�1040",
-    dictDeviceType: "1437295832",
-    latitude: 40.563822,
-    longitude: 116.592648,
-  },
-  {
-    deviceCode: "1101161102180100010062",
-    deviceId: "1554360452519497730",
-    deviceName: "鎬�鏌斿尯鐞夌拑搴欓晣瀛欒儭娌熸潙浜庡瑗挎矡闆ㄩ噺璁�0062",
-    dictDeviceType: "1437295810",
-    latitude: 40.558778,
-    longitude: 116.586892,
-  },
-  {
-    deviceCode: "1101160042160100010005",
-    deviceId: "1554360582698110977",
-    deviceName: "鎬�鏌斿尯闆佹爾闀囧寳婀炬潙鍖楁灄澶х煶闂ㄦ矡闆ㄩ噺璁�0005",
-    dictDeviceType: "1437295810",
-    latitude: 40.533623,
-    longitude: 116.602406,
-  },
-]);
-
-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;
-
-    list.push(entity);
-  });
-  treeMap.set("缁煎悎鐩戞祴璁惧淇℃伅", list);
+/**
+ * 澶勭悊褰卞儚鍥惧眰
+ */
+function handleImageryLayer(checked) {
+  if (checked) {
+    initImageryLayer();
+    toggleLayerVisible("褰卞儚鏁版嵁", true);
+  } else {
+    const layer = treeMap.get("褰卞儚鏁版嵁");
+    if (layer) {
+      toggleLayerVisible("褰卞儚鏁版嵁", false);
+      layer.removeFromMap();
+      treeMap.delete("褰卞儚鏁版嵁");
+    }
+  }
 }
 
-const districtList = ref([
-  {
-    activeStatus: "",
-    areaCode: "",
-    areaName: "",
-    brookLength: 0,
-    checkId: "",
-    city: "鍖椾含甯�",
-    codeProvince: "110116",
-    county: "鎬�鏌�",
-    dangerLevel: "",
-    disasterStatus: "",
-    drainageArea: "",
-    elevation: 0,
-    featureDes: "",
-    groupMonitor: "鏉庢姊�,瀛欐鍜�,鑼冩弧鐢�,绉﹀缓鏉�,瀛欐姹�,瀛欐浼�",
-    hasPlan: "",
-    id: "110116020058",
-    latitude: 40.56652778,
-    length: 0,
-    district: "鐞夌拑搴欓晣瀛欒儭娌熸潙灏瑰瑗挎矡灏瑰缓鐕曞灞嬪悗",
-    longitude: 116.5803889,
-    monitor: "",
-    monitorAdvice: "",
-    name: "灏瑰瑗挎矡灏瑰缓鐕曞灞嬪悗宕╁闅愭偅鐐�",
-    number:
-      "13716108909,13716029391,13716291714,13716191943,13716427398,13124792612",
-    preventionDes: "",
-    preventionLevel: "",
-    preventionPlan: "瀹氭湡宸℃煡锛岄璀﹁浆绉伙紝绔嬭绀虹墝",
-    preventionUnit: "涔¢晣",
-    principal: "",
-    province: "鍖椾含甯�",
-    qp: "",
-    reason: "",
-    responsibleUnit: "",
-    riskLevel: "",
-    scale: "灏忓瀷",
-    stableLevel: "",
-    status: "",
-    thickness: 0,
-    threatenFamily: 2,
-    threatenMoney: 0,
-    threatenPopulation: "3",
-    threatenType: "",
-    town: "鐞夌拑搴欓晣",
-    trigger: "",
-    type: "宕╁",
-    village: "瀛欒儭娌熸潙",
-    volume: "",
-    volumePotential: "",
-    width: 0,
-  },
-  {
-    activeStatus: "",
-    areaCode: "",
-    areaName: "",
-    brookLength: 0,
-    checkId: "",
-    city: "鍖椾含甯�",
-    codeProvince: "110116",
-    county: "鎬�鏌�",
-    dangerLevel: "",
-    disasterStatus: "",
-    drainageArea: "",
-    elevation: 0,
-    featureDes: "",
-    groupMonitor: "鏉庢姊�,瀛欐鍜�,鑼冩弧鐢�,绉﹀缓鏉�,瀛欐姹�,瀛欐浼�",
-    hasPlan: "",
-    id: "110116020078",
-    latitude: 40.56497222,
-    length: 0,
-    district: "鐞夌拑搴欓晣瀛欒儭娌熸潙娌宠タ浜庡嚖鑻卞灞嬪悗",
-    longitude: 116.5955278,
-    monitor: "",
-    monitorAdvice: "",
-    name: "娌宠タ浜庡嚖鑻卞灞嬪悗宕╁闅愭偅鐐�",
-    number:
-      "13716108909,13716029391,13716291714,13716191943,13716427398,13124792612",
-    preventionDes: "",
-    preventionLevel: "",
-    preventionPlan: "瀹氭湡宸℃煡锛岄璀﹁浆绉伙紝绔嬭绀虹墝",
-    preventionUnit: "涔¢晣",
-    principal: "",
-    province: "鍖椾含甯�",
-    qp: "",
-    reason: "",
-    responsibleUnit: "",
-    riskLevel: "",
-    scale: "灏忓瀷",
-    stableLevel: "",
-    status: "",
-    thickness: 0,
-    threatenFamily: 4,
-    threatenMoney: 0,
-    threatenPopulation: "6",
-    threatenType: "",
-    town: "鐞夌拑搴欓晣",
-    trigger: "",
-    type: "宕╁",
-    village: "瀛欒儭娌熸潙",
-    volume: "",
-    volumePotential: "",
-    width: 0,
-  },
-  {
-    activeStatus: "",
-    areaCode: "",
-    areaName: "",
-    brookLength: 0,
-    checkId: "",
-    city: "鍖椾含甯�",
-    codeProvince: "110116",
-    county: "鎬�鏌�",
-    dangerLevel: "",
-    disasterStatus: "",
-    drainageArea: "",
-    elevation: 0,
-    featureDes: "",
-    groupMonitor: "鏉庢姊�,瀛欐鍜�,鑼冩弧鐢�,绉﹀缓鏉�,瀛欐姹�,瀛欐浼�",
-    hasPlan: "",
-    id: "110116030041",
-    latitude: 40.55369444,
-    length: 0,
-    district: "鐞夌拑搴欓晣瀛欒儭娌熷叕璺�",
-    longitude: 116.6002778,
-    monitor: "",
-    monitorAdvice: "",
-    name: "鍗楁灏忎笢娌熸偿鐭虫祦闅愭偅鐐�",
-    number:
-      "13716108909,13716029391,13716291714,13716191943,13716427398,13124792612",
-    preventionDes: "",
-    preventionLevel: "",
-    preventionPlan: "瀹氭湡宸℃煡,绔嬭绀虹墝",
-    preventionUnit: "涔¢晣",
-    principal: "",
-    province: "鍖椾含甯�",
-    qp: "",
-    reason: "",
-    responsibleUnit: "",
-    riskLevel: "",
-    scale: "灏忓瀷",
-    stableLevel: "",
-    status: "",
-    thickness: 0,
-    threatenFamily: 0,
-    threatenMoney: 0,
-    threatenPopulation: "",
-    threatenType: "",
-    town: "鐞夌拑搴欓晣",
-    trigger: "",
-    type: "娉ョ煶娴�",
-    village: "瀛欒儭娌熸潙",
-    volume: "",
-    volumePotential: "",
-    width: 0,
-  },
-  {
-    activeStatus: "",
-    areaCode: "",
-    areaName: "",
-    brookLength: 0,
-    checkId: "",
-    city: "鍖椾含甯�",
-    codeProvince: "110116",
-    county: "鎬�鏌�",
-    dangerLevel: "",
-    disasterStatus: "",
-    drainageArea: "",
-    elevation: 0,
-    featureDes: "",
-    groupMonitor: "鏉庢姊�,瀛欐鍜�,鑼冩弧鐢�,绉﹀缓鏉�,瀛欐姹�,瀛欐浼�",
-    hasPlan: "",
-    id: "110116030015",
-    latitude: 40.55277778,
-    length: 0,
-    district: "鐞夌拑搴欓晣瀛欒儭娌熸潙鍗楁鏉戝ぇ绐戞矡",
-    longitude: 116.5994722,
-    monitor: "",
-    monitorAdvice: "",
-    name: "澶х獞娌熸偿鐭虫祦闅愭偅鐐�",
-    number:
-      "13716108909,13716029391,13716291714,13716191943,13716427398,13124792612",
-    preventionDes: "宸茬洃娴嬨�佸凡娌荤悊",
-    preventionLevel: "",
-    preventionPlan: "瀹氭湡宸℃煡锛岄璀﹁浆绉伙紝绔嬭绀虹墝",
-    preventionUnit: "涔¢晣",
-    principal: "",
-    province: "鍖椾含甯�",
-    qp: "",
-    reason: "",
-    responsibleUnit: "",
-    riskLevel: "",
-    scale: "涓瀷",
-    stableLevel: "",
-    status: "",
-    thickness: 0,
-    threatenFamily: 5,
-    threatenMoney: 0,
-    threatenPopulation: "11",
-    threatenType: "",
-    town: "鐞夌拑搴欓晣",
-    trigger: "",
-    type: "娉ョ煶娴�",
-    village: "瀛欒儭娌熸潙",
-    volume: "",
-    volumePotential: "",
-    width: 0,
-  },
-  {
-    activeStatus: "",
-    areaCode: "",
-    areaName: "",
-    brookLength: 0,
-    checkId: "",
-    city: "鍖椾含甯�",
-    codeProvince: "110116",
-    county: "鎬�鏌�",
-    dangerLevel: "",
-    disasterStatus: "",
-    drainageArea: "",
-    elevation: 0,
-    featureDes: "",
-    groupMonitor: "鏉庢姊�,瀛欐鍜�,鑼冩弧鐢�,绉﹀缓鏉�,瀛欐姹�,瀛欐浼�",
-    hasPlan: "",
-    id: "110116030076",
-    latitude: 40.55972222,
-    length: 0,
-    district: "鐞夌拑搴欓晣瀛欒儭娌熸潙涓滃潕澶т笢娌�",
-    longitude: 116.5916667,
-    monitor: "",
-    monitorAdvice: "",
-    name: "澶т笢娌熸偿鐭虫祦闅愭偅鐐�",
-    number:
-      "13716108909,13716029391,13716291714,13716191943,13716427398,13124792612",
-    preventionDes: "宸叉不鐞�",
-    preventionLevel: "",
-    preventionPlan: "瀹氭湡宸℃煡锛岄璀﹁浆绉�",
-    preventionUnit: "涔¢晣",
-    principal: "",
-    province: "鍖椾含甯�",
-    qp: "",
-    reason: "",
-    responsibleUnit: "",
-    riskLevel: "",
-    scale: "灏忓瀷",
-    stableLevel: "",
-    status: "",
-    thickness: 0,
-    threatenFamily: 1,
-    threatenMoney: 0,
-    threatenPopulation: "2",
-    threatenType: "",
-    town: "鐞夌拑搴欓晣",
-    trigger: "",
-    type: "娉ョ煶娴�",
-    village: "瀛欒儭娌熸潙",
-    volume: "",
-    volumePotential: "",
-    width: 0,
-  },
-  {
-    activeStatus: "",
-    areaCode: "",
-    areaName: "",
-    brookLength: 0,
-    checkId: "",
-    city: "鍖椾含甯�",
-    codeProvince: "110116",
-    county: "鎬�鏌�",
-    dangerLevel: "",
-    disasterStatus: "",
-    drainageArea: "",
-    elevation: 0,
-    featureDes: "",
-    groupMonitor: "鏉庢姊�,瀛欐鍜�,鑼冩弧鐢�,绉﹀缓鏉�,瀛欐姹�,瀛欐浼�",
-    hasPlan: "",
-    id: "110116030074",
-    latitude: 40.56580556,
-    length: 0,
-    district: "鐞夌拑搴欓晣瀛欒儭娌熸潙灏瑰瑗挎矡",
-    longitude: 116.59,
-    monitor: "",
-    monitorAdvice: "",
-    name: "灏瑰瑗挎矡娉ョ煶娴侀殣鎮g偣",
-    number:
-      "13716108909,13716029391,13716291714,13716191943,13716427398,13124792612",
-    preventionDes:
-      "宸茬洃娴嬶紱鐏惧浣撳彉鍖栵細4澶勫潯绉墿鍨锛屽爢绉嚦鍧¤剼锛屾柟閲忕害20m鲁銆�",
-    preventionLevel: "",
-    preventionPlan: "瀹氭湡宸℃煡锛岄璀﹁浆绉�",
-    preventionUnit: "涔¢晣",
-    principal: "",
-    province: "鍖椾含甯�",
-    qp: "",
-    reason: "",
-    responsibleUnit: "",
-    riskLevel: "",
-    scale: "涓瀷",
-    stableLevel: "",
-    status: "",
-    thickness: 0,
-    threatenFamily: 7,
-    threatenMoney: 0,
-    threatenPopulation: "12",
-    threatenType: "",
-    town: "鐞夌拑搴欓晣",
-    trigger: "",
-    type: "娉ョ煶娴�",
-    village: "瀛欒儭娌熸潙",
-    volume: "",
-    volumePotential: "",
-    width: 0,
-  },
-  {
-    activeStatus: "",
-    areaCode: "",
-    areaName: "",
-    brookLength: 0,
-    checkId: "",
-    city: "鍖椾含甯�",
-    codeProvince: "110116",
-    county: "鎬�鏌�",
-    dangerLevel: "",
-    disasterStatus: "",
-    drainageArea: "",
-    elevation: 0,
-    featureDes: "",
-    groupMonitor: "鏉庢姊�,瀛欐鍜�,鑼冩弧鐢�,绉﹀缓鏉�,瀛欐姹�,瀛欐浼�",
-    hasPlan: "",
-    id: "110116030053",
-    latitude: 40.57361111,
-    length: 0,
-    district: "鐞夌拑搴欓晣瀛欒儭娌熸潙鍖楀ぇ鍦拌タ娲煎瓙娌�",
-    longitude: 116.5897222,
-    monitor: "",
-    monitorAdvice: "",
-    name: "鍖楀ぇ鍦拌タ娲煎瓙娌熸偿鐭虫祦闅愭偅鐐�",
-    number:
-      "13716108909,13716029391,13716291714,13716191943,13716427398,13124792612",
-    preventionDes: "娌熷彛姝e鎴垮眿锛岄檷闆ㄦ椂鍑烘按閲忓ぇ锛屽缓璁不鐞嗭紝姹涙湡鍔犲己宸℃煡",
-    preventionLevel: "",
-    preventionPlan: "瀹氭湡宸℃煡锛岄璀﹁浆绉伙紝绔嬭绀虹墝",
-    preventionUnit: "涔¢晣",
-    principal: "",
-    province: "鍖椾含甯�",
-    qp: "",
-    reason: "",
-    responsibleUnit: "",
-    riskLevel: "",
-    scale: "涓瀷",
-    stableLevel: "",
-    status: "",
-    thickness: 0,
-    threatenFamily: 6,
-    threatenMoney: 0,
-    threatenPopulation: "10",
-    threatenType: "",
-    town: "鐞夌拑搴欓晣",
-    trigger: "",
-    type: "娉ョ煶娴�",
-    village: "瀛欒儭娌熸潙",
-    volume: "",
-    volumePotential: "",
-    width: 0,
-  },
-  {
-    activeStatus: "",
-    areaCode: "",
-    areaName: "",
-    brookLength: 0,
-    checkId: "",
-    city: "鍖椾含甯�",
-    codeProvince: "110116",
-    county: "鎬�鏌�",
-    dangerLevel: "",
-    disasterStatus: "",
-    drainageArea: "",
-    elevation: 0,
-    featureDes: "",
-    groupMonitor: "鏉庢姊�,瀛欐鍜�,鑼冩弧鐢�,绉﹀缓鏉�,瀛欐姹�,瀛欐浼�",
-    hasPlan: "",
-    id: "110116020102",
-    latitude: 40.55972222,
-    length: 0,
-    district: "鐞夌拑搴欓晣瀛欒儭娌熸潙鑼冨搴勭帇绉�鑾插灞嬪悗",
-    longitude: 116.5922222,
-    monitor: "",
-    monitorAdvice: "",
-    name: "鑼冨搴勭帇绉�鑾插灞嬪悗宕╁闅愭偅鐐�",
-    number:
-      "13716108909,13716029391,13716291714,13716191943,13716427398,13124792612",
-    preventionDes: "杈瑰潯杈冮櫋锛岄『鍚戝博灞傦紝鎴垮眿闈犺繎鍧¤剼锛屽缓璁敖蹇不鐞�",
-    preventionLevel: "",
-    preventionPlan: "瀹氭湡宸℃煡锛岄璀﹁浆绉伙紝绔嬭绀虹墝",
-    preventionUnit: "涔¢晣",
-    principal: "",
-    province: "鍖椾含甯�",
-    qp: "",
-    reason: "",
-    responsibleUnit: "",
-    riskLevel: "",
-    scale: "灏忓瀷",
-    stableLevel: "",
-    status: "",
-    thickness: 0,
-    threatenFamily: 1,
-    threatenMoney: 0,
-    threatenPopulation: "3",
-    threatenType: "",
-    town: "鐞夌拑搴欓晣",
-    trigger: "",
-    type: "宕╁",
-    village: "瀛欒儭娌熸潙",
-    volume: "",
-    volumePotential: "",
-    width: 0,
-  },
-  {
-    activeStatus: "",
-    areaCode: "",
-    areaName: "",
-    brookLength: 0,
-    checkId: "",
-    city: "鍖椾含甯�",
-    codeProvince: "110116",
-    county: "鎬�鏌�",
-    dangerLevel: "",
-    disasterStatus: "",
-    drainageArea: "",
-    elevation: 0,
-    featureDes: "",
-    groupMonitor: "鏉庢姊�,瀛欐鍜�,鑼冩弧鐢�,绉﹀缓鏉�,瀛欐姹�,瀛欐浼�",
-    hasPlan: "",
-    id: "110116020742",
-    latitude: 40.57680556,
-    length: 0,
-    district: "鐞夌拑搴欓晣瀛欒儭娌熸潙涓変憨鍦拌寖蹇犵敯瀹跺眿鍚�",
-    longitude: 116.5887222,
-    monitor: "",
-    monitorAdvice: "",
-    name: "涓変憨鍦拌寖蹇犵敯瀹跺眿鍚庡穿濉岄殣鎮g偣",
-    number:
-      "13716108909,13716029391,13716291714,13716191943,13716427398,13124792612",
-    preventionDes: "",
-    preventionLevel: "",
-    preventionPlan: "瀹氭湡宸℃煡锛岄璀﹁浆绉伙紝鏇存崲璀︾ず鐗�",
-    preventionUnit: "涔¢晣",
-    principal: "",
-    province: "鍖椾含甯�",
-    qp: "",
-    reason: "",
-    responsibleUnit: "",
-    riskLevel: "",
-    scale: "涓瀷",
-    stableLevel: "",
-    status: "",
-    thickness: 0,
-    threatenFamily: 8,
-    threatenMoney: 0,
-    threatenPopulation: "23",
-    threatenType: "",
-    town: "鐞夌拑搴欓晣",
-    trigger: "",
-    type: "宕╁",
-    village: "瀛欒儭娌熸潙",
-    volume: "",
-    volumePotential: "",
-    width: 0,
-  },
-  {
-    activeStatus: "",
-    areaCode: "",
-    areaName: "",
-    brookLength: 0,
-    checkId: "",
-    city: "鍖椾含甯�",
-    codeProvince: "110116",
-    county: "鎬�鏌�",
-    dangerLevel: "",
-    disasterStatus: "",
-    drainageArea: "",
-    elevation: 0,
-    featureDes: "",
-    groupMonitor: "鏉庢姊�,瀛欐鍜�,鑼冩弧鐢�,绉﹀缓鏉�,瀛欐姹�,瀛欐浼�",
-    hasPlan: "",
-    id: "110116030040",
-    latitude: 40.56344444,
-    length: 0,
-    district: "鐞夌拑搴欓晣瀛欒儭娌熸潙娌宠タ浜庡瑗挎矡",
-    longitude: 116.5953889,
-    monitor: "",
-    monitorAdvice: "",
-    name: "浜庡瑗挎矡娉ョ煶娴侀殣鎮g偣",
-    number:
-      "13716108909,13716029391,13716291714,13716191943,13716427398,13124792612",
-    preventionDes:
-      "宸茬洃娴嬶紝2018鏉戝凡娌荤悊锛涙矡鍙e爢绉墖鏄庢樉锛屾瀵规埧灞嬶紝寤鸿姹涙湡鍔犲己宸℃煡",
-    preventionLevel: "",
-    preventionPlan: "瀹氭湡宸℃煡锛岄璀﹁浆绉�",
-    preventionUnit: "涔¢晣",
-    principal: "",
-    province: "鍖椾含甯�",
-    qp: "",
-    reason: "",
-    responsibleUnit: "",
-    riskLevel: "",
-    scale: "涓瀷",
-    stableLevel: "",
-    status: "",
-    thickness: 0,
-    threatenFamily: 18,
-    threatenMoney: 0,
-    threatenPopulation: "59",
-    threatenType: "",
-    town: "鐞夌拑搴欓晣",
-    trigger: "",
-    type: "娉ョ煶娴�",
-    village: "瀛欒儭娌熸潙",
-    volume: "",
-    volumePotential: "",
-    width: 0,
-  },
-  {
-    activeStatus: "",
-    areaCode: "",
-    areaName: "",
-    brookLength: 0,
-    checkId: "",
-    city: "鍖椾含甯�",
-    codeProvince: "110116",
-    county: "鎬�鏌�",
-    dangerLevel: "",
-    disasterStatus: "",
-    drainageArea: "",
-    elevation: 0,
-    featureDes: "",
-    groupMonitor: "鏉庢姊�,瀛欐鍜�,鑼冩弧鐢�,绉﹀缓鏉�,瀛欐姹�,瀛欐浼�",
-    hasPlan: "",
-    id: "110116030055",
-    latitude: 40.55283333,
-    length: 0,
-    district: "鐞夌拑搴欓晣瀛欒儭娌熸潙妞存爲搴曚笅涓滄矡",
-    longitude: 116.5999444,
-    monitor: "",
-    monitorAdvice: "",
-    name: "妞存爲搴曚笅涓滄矡娉ョ煶娴侀殣鎮g偣",
-    number:
-      "13716108909,13716029391,13716291714,13716191943,13716427398,13124792612",
-    preventionDes: "宸叉不鐞嗭細濞佽儊瀵硅薄閲嶅锛氫笌110116030015閲嶅5鎴�11浜�",
-    preventionLevel: "",
-    preventionPlan: "瀹氭湡宸℃煡锛岄璀﹁浆绉伙紝绔嬭绀虹墝",
-    preventionUnit: "涔¢晣",
-    principal: "",
-    province: "鍖椾含甯�",
-    qp: "",
-    reason: "",
-    responsibleUnit: "",
-    riskLevel: "",
-    scale: "涓瀷",
-    stableLevel: "",
-    status: "",
-    thickness: 0,
-    threatenFamily: 5,
-    threatenMoney: 0,
-    threatenPopulation: "11",
-    threatenType: "",
-    town: "鐞夌拑搴欓晣",
-    trigger: "",
-    type: "娉ョ煶娴�",
-    village: "瀛欒儭娌熸潙",
-    volume: "",
-    volumePotential: "",
-    width: 0,
-  },
-  {
-    activeStatus: "",
-    areaCode: "",
-    areaName: "",
-    brookLength: 0,
-    checkId: "",
-    city: "鍖椾含甯�",
-    codeProvince: "110116",
-    county: "鎬�鏌�",
-    dangerLevel: "",
-    disasterStatus: "",
-    drainageArea: "",
-    elevation: 0,
-    featureDes: "",
-    groupMonitor: "鏉庢姊�,瀛欐鍜�,鑼冩弧鐢�,绉﹀缓鏉�,瀛欐姹�,瀛欐浼�",
-    hasPlan: "",
-    id: "110116030054",
-    latitude: 40.56166667,
-    length: 0,
-    district: "鐞夌拑搴欓晣瀛欒儭娌熸潙涓婂彴瀛愭渤涓滃崡娌�",
-    longitude: 116.5997222,
-    monitor: "",
-    monitorAdvice: "",
-    name: "娌充笢鍗楁矡娉ョ煶娴侀殣鎮g偣",
-    number:
-      "13716108909,13716029391,13716291714,13716191943,13716427398,13124792612",
-    preventionDes: "宸茬洃娴�",
-    preventionLevel: "",
-    preventionPlan: "瀹氭湡宸℃煡,绔嬭绀虹墝",
-    preventionUnit: "涔¢晣",
-    principal: "",
-    province: "鍖椾含甯�",
-    qp: "",
-    reason: "",
-    responsibleUnit: "",
-    riskLevel: "",
-    scale: "灏忓瀷",
-    stableLevel: "",
-    status: "",
-    thickness: 0,
-    threatenFamily: 0,
-    threatenMoney: 0,
-    threatenPopulation: "",
-    threatenType: "",
-    town: "鐞夌拑搴欓晣",
-    trigger: "",
-    type: "娉ョ煶娴�",
-    village: "瀛欒儭娌熸潙",
-    volume: "",
-    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 handleModelLayer(checked) {
+  if (checked) {
+    addTileset(
+      // "http://106.120.22.26:9103/gisserver/c3dserver/sunhugou3d/tileset.json"
+      "http://192.168.37.61:9004/tile/model/service/Iakp0nhx/tileset.json?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo"
+    )
+      .then((model) => {
+        treeMap.set("妯″瀷鏁版嵁", model);
+        toggleLayerVisible("妯″瀷鏁版嵁", true);
+      })
+      .catch(console.error);
+  } else {
+    toggleLayerVisible("妯″瀷鏁版嵁", false);
+  }
 }
 
-let divPointList = [];
+/**
+ * 鍒囨崲鍥惧眰鍙鎬�
+ * @param {String} name - 鍥惧眰鍚嶇О
+ * @param {Boolean} visible - 鏄惁鍙
+ */
+function toggleLayerVisible(name, visible) {
+  const layer = treeMap.get(name);
+  if (!layer) {
+    console.warn(`鍥惧眰 ${name} 涓嶅瓨鍦╜);
+    return;
+  }
 
+  // 澶勭悊涓嶅悓绫诲瀷鐨勫浘灞�
+  if (Array.isArray(layer)) {
+    // 瀹炰綋鏁扮粍
+    layer.forEach((entity) => {
+      entity.show = visible;
+      if (visible && !viewer.entities.contains(entity)) {
+        viewer.entities.add(entity);
+      }
+    });
+  } else if (typeof layer.setVisible === "function") {
+    // 鑷畾涔夊浘灞傛帴鍙�
+    layer.setVisible(visible);
+  } else if (typeof layer.show === "boolean") {
+    // 鏅�氬彲鏄剧ず瀵硅薄
+    layer.show = visible;
+  }
+
+  viewer.scene.requestRender();
+}
+
+/**
+ * 娓呴櫎鍥惧眰瀹炰綋
+ * @param {String} layerName - 鍥惧眰鍚嶇О
+ */
+// 鏆備笖淇濈暀
+// async function clearLayerEntities(layerName) {
+//   const list = treeMap.get(layerName);
+//   if (list && Array.isArray(list)) {
+//     for (const item of list) {
+//       const entity = await item;
+//       if (layerName == "缁煎悎鐩戞祴璁惧淇℃伅") {
+//         removeEntities(entity.deviceId);
+//       } else if (layerName == "瀛欒儭娌熼殣鎮g偣") {
+//         removeEntities(entity.hdId);
+//       }
+//     }
+//   }
+//   treeMap.delete(layerName);
+// }
+
+/**
+ * 娓呴櫎鍥惧眰瀹炰綋
+ * @param {String} layerName - 鍥惧眰鍚嶇О
+ */
+// 姝ゅ嚱鏁颁紭鍖栦簡鍦ㄦā鎷熶豢鐪熼〉闈紝濡傛灉鐐瑰嚮鐩綍鏍戦�変腑鍙栨秷锛屾偿浣嶈浠嶆樉绀�
+async function clearLayerEntities(layerName) {
+  const isMnfzPage = route.path === "/mnfz"; // 鍒ゆ柇鏄惁涓� /mnfz 椤甸潰
+
+  const list = treeMap.get(layerName);
+  if (list && Array.isArray(list)) {
+    for (const item of list) {
+      const entity = await item;
+
+      let shouldRemove = true; // 榛樿瑕佸垹闄�
+
+      // 濡傛灉鏄� /mnfz 椤甸潰锛屽苟涓旀槸鈥滄偿浣嶈鈥濓紝鍒欎笉鍒犻櫎
+      if (isMnfzPage && entity.type === "娉ヤ綅璁�") {
+        shouldRemove = false;
+      }
+
+      if (shouldRemove) {
+        if (layerName === "缁煎悎鐩戞祴璁惧淇℃伅") {
+          removeEntities(entity.deviceId);
+        } else if (layerName === "瀛欒儭娌熼殣鎮g偣") {
+          removeEntities(entity.hdId);
+        }
+      }
+    }
+  }
+
+  treeMap.delete(layerName);
+}
+
+watchEffect(async () => {
+  clearLayerEntities("缁煎悎鐩戞祴璁惧淇℃伅");
+
+  if (simStore.DeviceShowSwitch) {
+    // 浣跨敤 Promise.all 绛夊緟鎵�鏈夊紓姝ユ搷浣滃畬鎴�
+    const deviceListPromises = simStore.devices
+      .filter((item) => item.deviceName?.includes("瀛欒儭娌�"))
+      .map(async (item) => {
+        const entity = viewer.entities.getById(item.deviceId);
+        item.type = getDictName(deviceDictList, item.dictDeviceType);
+        item.name = item.deviceName.split("瀛欒儭娌�")[1];
+        item.id = item.deviceId;
+        item.className = "device";
+        item.showLabel = true;
+        await createPoint(item); // 纭繚 createPoint 杩斿洖涓�涓� Promise 鎴栬�呮湰韬氨鏄紓姝ュ嚱鏁�
+        return item; // 杩斿洖澶勭悊鍚庣殑 item
+      });
+
+    // 绛夊緟鎵�鏈夊紓姝ユ搷浣滃畬鎴�
+    const deviceList = await Promise.all(deviceListPromises);
+
+    if (deviceList.length) {
+      treeMap.set("缁煎悎鐩戞祴璁惧淇℃伅", deviceList);
+    }
+  }
+});
+
+// 鐩戞帶闅愭偅鐐瑰紑鍏冲彉鍖�
+watchEffect(async () => {
+  clearLayerEntities("瀛欒儭娌熼殣鎮g偣");
+
+  if (simStore.DangerShowSwitch) {
+    const filteredPoints = simStore.DangerPoint.filter((item) =>
+      item.position?.includes("瀛欒儭娌�")
+    );
+
+    const dangerPointPromises = filteredPoints.map(async (item) => {
+      const entity = viewer.entities.getById(item.hdId);
+      item.id = item.hdId;
+      item.name = item.hdName;
+      item.latitude = item.lat;
+      item.longitude = item.lon;
+      item.showBillboard = true;
+      item.type = item.disasterType;
+      item.className = "district";
+      await createPoint(item); // 纭繚 createPoint 鏄紓姝ュ嚱鏁�
+      return item; // 杩斿洖澶勭悊濂界殑 item
+    });
+
+    try {
+      const resolvedPoints = await Promise.all(dangerPointPromises);
+
+      if (resolvedPoints.length) {
+        treeMap.set("瀛欒儭娌熼殣鎮g偣", resolvedPoints);
+      }
+    } catch (error) {
+      console.error("鍒涘缓闅愭偅鐐规椂鍙戠敓閿欒:", error);
+    }
+  }
+});
+
+/**
+ * 鍒濆鍖栨柇闈㈢偣鏁版嵁
+ */
 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);
+    const list = res.data.map((item) => {
+      const entity = createPoint({
+        id: item.id + item.alias,
+        name: item.alias,
+        latitude: item.lat,
+        longitude: item.lon,
+        showBillboard: false,
+        className: "district",
+      });
       entity.show = false;
-      list.push(entity);
-      return;
-      const divPoint = earthCtrl.factory.createDivPoint(
-        item.alias,
-        { lon: longitude, lat: latitude },
-        {
-          type: "custom",
-          offset: ["c", 60],
-          description: `
-			<div class="divPoint-custom">
-				<p>${item.alias}</p>
-			</div>
-		  `,
-          near: 0,
-          far: 500000,
-        }
-      );
-      divPoint.item.show = false;
-      console.log(divPoint);
-
-      divPointList.push(divPoint.item);
+      return entity;
     });
-    treeMap.set("瀛欒儭娌熶豢鐪熸爣娉ㄥ湴鐗�", list);
+    treeMap.set("瀛欒儭娌熸柇闈�", list);
   });
 }
 
-function addTetrahedron(visible) {
-  const emergencyAreaList = [];
-
-  loadAreaPolygon("/json/emergency_area.geojson", true).then((entities) => {
-    emergencyAreaList.push(...entities);
-  });
-  // console.log('polygon', polygon);
-
-  let list = [
-    {
-      name: "灏瑰缓鍗庡",
-      longitude: 116.593517,
-      latitude: 40.568391,
-      altitude: 528.45,
-    },
-    {
-      name: "鑼冩尟姹熷",
-      longitude: 116.591059,
-      latitude: 40.574068,
-      altitude: 528,
-    },
-    {
-      name: "鍚庡潯",
-      longitude: 116.597975,
-      latitude: 40.558199,
-      altitude: 528,
-    },
-  ];
-  list.forEach((item) => {
-    let point = earthCtrl.factory.addTetrahedron({
-      position: {
-        lon: item.longitude,
-        lat: item.latitude,
-        height: item.altitude,
-      },
-      multiple: 1.0,
-      scale: new SmartEarth.Cesium.Cartesian3(20, 20, 20),
+/**
+ * 娣诲姞閬块櫓鍦烘墍鏁版嵁
+ */
+function addTetrahedron() {
+  getSafePoint(110116110218).then((res) => {
+    const geoJsonData = convertToGeoJson(res.data); // 杞崲涓� GeoJSON
+    // 鍔犺浇 GeoJSON 鏁版嵁鍒板湴鍥�
+    loadAreaPolygon(geoJsonData, true).then((entities) => {
+      entities.forEach((entity) => (entity.show = false));
+      treeMap.set("閬块櫓鍦烘墍", entities);
     });
-    console.log("point", point);
-    emergencyAreaList.push(point);
   });
-  treeMap.set("閬块櫓鐐�", emergencyAreaList);
-}
-function toggleLayerVisible(name, checked) {
-  const entityList = treeMap.get(name);
-  if (Array.isArray(entityList) && entityList.length > 0) {
-    entityList.forEach((entity) => {
-      entity.show = checked;
-    });
-  }
-  treeMap.set(name, entityList);
 }
 
-function getData() {
-  initDevicePoint();
-  initDistrictPoint();
+/**
+ * 鍒濆鍖栨墍鏈夋暟鎹�
+ */
+function initData() {
   initDuanmianPoint();
+  addTetrahedron();
 }
 
-// 閫氳繃 store 浼犻�掗渶瑕侀�変腑鐨刱ey
+// 鐩戝惉 store 涓殑 checkedKeys 鍙樺寲
 watch(
   () => checkedKeys.value,
   (keys) => {
-    if (keys && Array.isArray(keys)) {
-      treeRef.value.setCheckedKeys(
-        defaultSelectedKeys.value.concat(keys),
-        true
-      );
+    if (Array.isArray(keys)) {
+      treeRef.value?.setCheckedKeys([...defaultSelectedKeys.value, ...keys]);
     }
   }
 );
 
+// 鐩戝惉璺敱鍙樺寲
 watch(
   () => route.fullPath,
   (path) => {
-    const defaultKeys = defaultSelectedKeys.value;
-    if (path == "/yhgl") {
-      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);
-    } else if (path == "/mnfz") {
-      treeRef.value.setCheckedKeys(
-        defaultKeys.concat("瀛欒儭娌熶豢鐪熸爣娉ㄥ湴鐗�"),
-        true
-      );
-      toggleLayerVisible("瀛欒儭娌熶豢鐪熸爣娉ㄥ湴鐗�", true);
-      toggleLayerVisible("瀛欒儭娌熼殣鎮g偣", false);
-      toggleLayerVisible("缁煎悎鐩戞祴璁惧淇℃伅", false);
-    } else {
-      treeRef.value.setCheckedKeys(defaultKeys, true);
-    }
-  }
+    const defaultKeys = [...defaultSelectedKeys.value];
+    const checkedKeys =
+      {
+        // 椤甸潰榛樿鍕鹃�夋樉绀哄湪姝ゅ
+        "/yhgl": [...defaultKeys, "瀛欒儭娌熼殣鎮g偣"],
+        "/zhjc": [...defaultKeys, "缁煎悎鐩戞祴璁惧淇℃伅"],
+        // "/mnfz": [...defaultKeys, "瀛欒儭娌熸柇闈�"],
+      }[path] || defaultKeys;
+
+    treeRef.value?.setCheckedKeys(checkedKeys);
+  },
+  { immediate: true }
 );
+
+// 缁勪欢鎸傝浇鏃跺垵濮嬪寲
 onMounted(() => {
-  initMap();
-  getData();
+  initTerrainLayer();
+  initData();
+  nextTick(() => {
+    treeRef.value?.setCheckedKeys(defaultSelectedKeys.value);
+  });
 });
+
+// 缁勪欢鍗歌浇鏃舵竻鐞嗚祫婧�
 onUnmounted(() => {
   viewer.entities.removeAll();
+  // 娓呯悊鎵�鏈夊浘灞傚紩鐢�
+  treeMap.forEach((layer) => {
+    if (layer.removeFromMap) {
+      layer.removeFromMap();
+    }
+  });
+  treeMap.clear();
 });
 </script>
 
 <style lang="less" scoped>
+@import url("../../assets/css/infobox.css");
+
 .layer-tree {
-  // position: absolute;
-  // top: 11%;
-  // right: 25%;
   background: url("@/assets/img/tools/plotting_new.png");
   width: 200px;
-  height: 200px;
   z-index: 99;
+  overflow: hidden;
+
+  :deep(.el-tree) {
+    overflow: hidden !important;
+  }
 }
 </style>

--
Gitblit v1.9.3