1
wangjuncheng
3 天以前 0f71572b095e40c6e49cdaac632492819278aea4
src/components/tools/LayerTree.vue
@@ -1,5 +1,10 @@
<template>
  <div class="layer-tree">
    <!-- 添加按钮
    <el-button @click="printCurrentView" type="primary" style="margin-bottom: 10px;">
      打印当前视图信息
    </el-button> -->
    <!-- 图层树 -->
    <el-tree
      ref="treeRef"
      style="max-width: 600px"
@@ -14,7 +19,12 @@
<script setup>
import { ref, onMounted, watch, nextTick, onUnmounted, watchEffect } from "vue";
import { createPoint, removeEntities, addTileset } from "@/utils/map";
import {
  createPoint,
  removeEntities,
  addTileset,
  clearAllPoints,
} from "@/utils/map";
import { deviceDictList, getDictName } from "@/constant/dict.js";
import { useRoute } from "vue-router";
import {
@@ -31,10 +41,32 @@
const route = useRoute();
/**
 * 打印当前视图的相机状态
 */
 function printCurrentView() {
  window.Viewer = earthCtrl.viewer;// 假设你已经在 data 或 setup 中定义了 viewer
    const camera = earthCtrl.viewer.camera;
    const view = {
      destination: {
        x: camera.position.x,
        y: camera.position.y,
        z: camera.position.z,
      },
      orientation: {
        pitch: camera.pitch,
        roll: camera.roll,
        heading: camera.heading,
      },
    };
    console.log('当前视图参数:', view);
}
/**
 * 图层树配置数据
 * 包含三维服务和图层数据两大分类
 */
const treeData = ref([
 const treeData = ref([
  {
    label: "三维服务",
    children: [
@@ -53,6 +85,210 @@
      { label: "避险场所" },
    ],
  },
  {
    label: "南窖乡",
    children: [
      {
        label: "南窖乡影像",
        type: "imagery",
        url: "/imagery/tile/image/wmts/pTkjV3J9/{z}/{x}/{y}?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo"
      },
      {
        label: "南窖乡地形",
        type: "terrain",
        url: "/imagery/tile/terrain/TBKJCcqO?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo",
        view: {
          destination: { x: -2148291.712223941, y: 4429896.46897996, z: 4055778.9577251095 },
          orientation: { pitch: -0.7094729926433327, roll: 6.2829983479026374, heading: 6.228640490951177 }
        }
      },
      {
        label: "南窖乡地形模型1",
        type: "model",
        url: "/imagery/tile/model/service/LSR5ezfl/tileset.json?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo",
        view: {
          destination: { x: -2146689.939461115, y: 4426047.413821165, z: 4057984.6498454507 },
          orientation: { pitch: -0.9541138124492012, roll: 0.00031687828366511184, heading: 6.140422591164119 }
        }
      },
      {
        label: "南窖乡地形模型2",
        type: "model",
        url: "/imagery/tile/model/service/uNsdeKPc/tileset.json?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo",
        view: {
          destination: { x: -2145340.8188580503, y: 4424796.321883301, z: 4059623.85371558 },
          orientation: { pitch: -0.9541017116169872, roll: 0.000313870753641865, heading: 6.140425044701509 }
        }
      }
    ]
  },
  {
    label: "金鸡台村",
    children: [
      {
        label: "金鸡台村影像",
        type: "imagery",
        url: "/imagery/tile/image/wmts/qEToHR5Z/{z}/{x}/{y}?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo"
      },
      {
        label: "金鸡台村地形",
        type: "terrain",
        url: "/imagery/tile/terrain/aEIeI21o?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo",
        view: {
          destination: { x: -2130224.9623079575, y: 4426008.165349956, z: 4068795.580264238 },
          orientation: { pitch: -0.9127940858026111, roll: 6.282740114172059, heading: 0.08207325160381274 }
        }
      },
      {
        label: "金鸡台村模型1",
        type: "model",
        url: "/imagery/tile/model/service/1J2wMbnU/tileset.json?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo",
        view: {
          destination: { x: -2133104.794919741, y: 4425812.523913443, z: 4069478.3137610652 },
          orientation: { pitch: -0.9541137913665527, roll: 0.00031687304371175173, heading: 6.140422595438931 }
        }
      },
      {
        label: "金鸡台村模型2",
        type: "model",
        url: "/imagery/tile/model/service/gaeULxdB/tileset.json?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo",
        view: {
          destination: { x: -2130956.971562582, y: 4426818.080505688, z: 4069740.7525420994 },
          orientation: { pitch: -0.9541137309940142, roll: 0.0003168580385137787, heading: 6.140422607680212 }
        }
      },
      {
        label: "金鸡台村模型3",
        type: "model",
        url: "/imagery/tile/model/service/haujMGBj/tileset.json?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo",
        view: {
          destination: { x: -2132142.087145638, y: 4425161.123976678, z: 4070278.934587119 },
          orientation: { pitch: -0.9541140402489301, roll: 0.0003169349017886347, heading: 6.140422544975061 }
        }
      },
      {
        label: "金鸡台村模型4",
        type: "model",
        url: "/imagery/tile/model/service/qMRvXo9Q/tileset.json?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo",
        view: {
          destination: { x: -2127321.106886179, y: 4421820.211235223, z: 4068832.7651704233 },
          orientation: { pitch: -0.9541063907093843, roll: 0.00031503367875540533, heading: 6.140424095992006 }
        }
      }
    ]
  },
  {
    label: "龙泉庄村",
    children: [
      {
        label: "龙泉庄村影像",
        type: "imagery",
        url: "/imagery/tile/image/wmts/Tdjg608Z/{z}/{x}/{y}?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo"
      },
      {
        label: "龙泉庄村地形",
        type: "terrain",
        url: "/imagery/tile/terrain/pLtaLGeZ?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo",
        view: {
          destination: { x: -2168757.031244387, y: 4352617.776664691, z: 4114967.541317504 },
          orientation: { pitch: -0.4435676845783054, roll: 6.283154708563269, heading: 5.537612876549447 }
        }
      },
      {
        label: "龙泉庄村模型",
        type: "model",
        url: "/imagery/tile/model/service/vv0P5FuH/tileset.json?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo",
        view: {
          destination: { x: -2168663.968240228, y: 4355261.718587015, z: 4115712.067191204 },
          orientation: { pitch: -0.9540906570127872, roll: 0.00031112334289318255, heading: 6.140427286015401 }
        }
      }
    ]
  },
  {
    label: "峪沟村",
    children: [
      {
        label: "峪沟村影像",
        type: "imagery",
        url: "/imagery/tile/image/wmts/okRsdbWk/{z}/{x}/{y}?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo"
      },
      {
        label: "峪沟村地形",
        type: "terrain",
        url: "/imagery/tile/terrain/2LBx9e7E?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo",
        view: {
          destination: { x: -2170854.0167420367, y: 4358200.634596329, z: 4110425.3427262204 },
          orientation: { pitch: -0.847848874762068, roll: 0.00008577448108137986, heading: 0.4679505123692884 }
        }
      },
      {
        label: "峪沟村模型",
        type: "model",
        url: "/imagery/tile/model/service/4QnI3jUW/tileset.json?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo",
        view: {
          destination: { x: -2173100.959020146, y: 4359294.155857249, z: 4110691.2853415837 },
          orientation: { pitch: -0.9540973990229973, roll: 0.00031279893049074303, heading: 6.140425919087564 }
        }
      }
    ]
  },
  {
    label: "灵水村",
    children: [
      {
        label: "灵水村影像",
        type: "imagery",
        url: "/imagery/tile/image/wmts/sxVRibjH/{z}/{x}/{y}?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo"
      },
      {
        label: "灵水村地形",
        type: "terrain",
        url: "/imagery/tile/terrain/N0INPZIN?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo",
        view: {
          destination: { x: -2127000.0250662216, y: 4408369.621939603, z: 4078610.664222384 },
          orientation: { pitch: -0.4326441481504202, roll: 0.000025937982368162693, heading: 4.9973143963984015 }
        }
      },
      {
        label: "灵水村模型",
        type: "model",
        url: "/imagery/tile/model/service/hj3Ipgwk/tileset.json?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo",
        view: {
          destination: { x: -2128232.405466075, y: 4415420.0330180405, z: 4079261.2309530703 },
          orientation: { pitch: -0.9541075114138131, roll: 0.00031531221697900236, heading: 6.140423868761242 }
        }
      }
    ]
  },
  {
    label: "田庄村",
    children: [
      {
        label: "田庄村影像",
        type: "imagery",
        url: "/imagery/tile/image/wmts/EDtElo3U/{z}/{x}/{y}?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo"
      },
      {
        label: "田庄村地形",
        type: "terrain",
        url: "/imagery/tile/terrain/sDpC3pM8?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo",
        view: {
          destination: { x: -2136032.9273641515, y: 4399423.940210319, z: 4084681.6412534667 },
          orientation: { pitch: -0.6380935762087248, roll: 6.283155058648237, heading: 6.117892190518964 }
        }
      },
      {
        label: "田庄村模型",
        type: "model",
        url: "/imagery/tile/model/service/Iakp0nhx/tileset.json?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo",
        view: {
          destination: { x: -2138006.584911224, y: 4402665.343671573, z: 4086466.2821442005 },
          orientation: { pitch: -0.9541030942818041, roll: 0.0003142143946410769, heading: 6.140424764361058 }
        }
      }
    ]
  }
]);
// 默认选中的节点(地形数据默认开启)
@@ -91,22 +327,43 @@
async function initImageryLayer() {
  try {
    ImageryLayer = await earthCtrl.factory.createImageryLayer({
      sourceType: "tms",
      sourceType: "wmts",
      url: "http://106.120.22.26:9103/gisserver/tmsserver/sunhugoudom",
      // url: "/imagery/tile/image/wmts/pTkjV3J9/{z}/{x}/{y}?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo",
    });
    treeMap.set("影像数据", ImageryLayer);
  } catch (error) {
    console.error("影像数据初始化失败:", error);
  }
}
// async function initImageryLayerByName(name, url) {
//   try {
//     // 创建影像图层
//     const imageryLayer = await earthCtrl.factory.createImageryLayer({
//       sourceType: "wmts", // 根据实际情况调整sourceType
//       url: url,
//     });
//     // 将创建的影像图层添加到Cesium Viewer中
//     // if (imageryLayer) {
//     //   viewer.imageryLayers.add(imageryLayer);
//     // }
//     // 将图层实例保存到treeMap中
//     treeMap.set(name, imageryLayer);
//     console.log(`${name} 影像数据初始化成功`);
//   } catch (error) {
//     console.error(`${name} 影像数据初始化失败:`, error);
//   }
// }
/**
 * 处理树节点勾选变化
 * @param {Object} data - 节点数据
 * @param {Boolean} checked - 是否选中
 * @param {Boolean} indeterminate - 不确定状态
 */
function handleCheckChange(data, checked) {
 function handleCheckChange(data, checked) {
  const label = data.label;
  // 地形数据处理
@@ -139,13 +396,109 @@
    return;
  }
  // 村庄图层处理
// if (data.type === "imagery") {
//     if (checked) {
//       initImageryLayerByName(label, data.url);
//     } else {
//       const layer = treeMap.get(label);
//       if (layer) {
//         viewer.imageryLayers.remove(layer);
//         treeMap.delete(label);
//       }
//     }
//     return;
//   }
  if (data.type === "terrain") {
  handleTerrainLayerByName(label, data.url, checked, data.view);
  return;
}
if (data.type === "model") {
  handleModelLayerByUrl(label, data.url, checked, data.view);
  return;
}
  // 其他图层的处理
  const layer = treeMap.get(label);
  if (layer) {
    toggleLayerVisible(label, checked);
  }
}
async function handleTerrainLayerByName(name, url, checked, view) {
  if (checked) {
    try {
      const layer = await earthCtrl.factory.createTerrainLayer({
        sourceType: "ctb",
        url,
        requestVertexNormals: true,
      });
      treeMap.set(name, layer);
      viewer.terrain = layer;
      console.log(view, 'zhelishi shuju'); // 现在应该有数据了
      if (view && view.destination && view.orientation) {
        viewer.scene.camera.flyTo({
          destination: new Cesium.Cartesian3(
            view.destination.x,
            view.destination.y,
            view.destination.z
          ),
          orientation: {
            heading: view.orientation.heading,
            pitch: view.orientation.pitch,
            roll: view.orientation.roll
          }
        });
      }
    } catch (error) {
      console.error(`地形图层 ${name} 加载失败:`, error);
    }
  } else {
    const layer = treeMap.get(name);
    if (layer) {
      toggleLayerVisible(name, false);
      layer.removeFromMap();
      treeMap.delete(name);
    }
  }
}
async function handleModelLayerByUrl(name, url, checked, view) {
  if (checked) {
    try {
      const model = await addTileset(url);
      treeMap.set(name, model);
      viewer.scene.primitives.add(model);
      if (view && view.destination && view.orientation) {
        viewer.scene.camera.flyTo({
          destination: new Cesium.Cartesian3(
            view.destination.x,
            view.destination.y,
            view.destination.z
          ),
          orientation: {
            heading: view.orientation.heading,
            pitch: view.orientation.pitch,
            roll: view.orientation.roll
          }
        });
      }
    } catch (error) {
      console.error(`模型图层 ${name} 加载失败:`, error);
    }
  } else {
    const model = treeMap.get(name);
    if (model) {
      viewer.scene.primitives.remove(model);
      treeMap.delete(name);
    }
  }
}
/**
 * 处理地形图层
 */
@@ -186,7 +539,8 @@
function handleModelLayer(checked) {
  if (checked) {
    addTileset(
      "http://106.120.22.26:9103/gisserver/c3dserver/sunhugou3d/tileset.json"
      // "http://106.120.22.26:9103/gisserver/c3dserver/sunhugou3d/tileset.json"
      "/imagery/tile/model/service/Iakp0nhx/tileset.json?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo"
    )
      .then((model) => {
        treeMap.set("模型数据", model);
@@ -234,37 +588,75 @@
 * 清除图层实体
 * @param {String} layerName - 图层名称
 */
function clearLayerEntities(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 == "孙胡沟隐患点") {
//         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)) {
    list.forEach((entity) => {
      if (viewer.entities.contains(entity)) {
        viewer.entities.remove(entity);
    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 === "孙胡沟隐患点") {
          removeEntities(entity.hdId);
        }
      }
    }
  }
  treeMap.delete(layerName);
}
// 监控设备开关变化
watchEffect(() => {
watchEffect(async () => {
  clearLayerEntities("综合监测设备信息");
  if (simStore.DeviceShowSwitch) {
    const deviceList = simStore.devices
    // 使用 Promise.all 等待所有异步操作完成
    const deviceListPromises = simStore.devices
      .filter((item) => item.deviceName?.includes("孙胡沟"))
      .map((item) => {
        const entity = createPoint({
          ...item,
          type: getDictName(deviceDictList, item.dictDeviceType),
          name: item.deviceName.split("孙胡沟")[1],
          id: item.deviceId,
          className: "device",
          showLabel: true,
        });
        entity.show = true;
        return entity;
      .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);
@@ -273,28 +665,35 @@
});
// 监控隐患点开关变化
watchEffect(() => {
watchEffect(async () => {
  clearLayerEntities("孙胡沟隐患点");
  if (simStore.DangerShowSwitch) {
    const dangerPoints = simStore.DangerPoint.filter((item) =>
    const filteredPoints = simStore.DangerPoint.filter((item) =>
      item.position?.includes("孙胡沟")
    ).map((item) => {
      const entity = createPoint({
        id: item.hdId,
        name: item.hdName,
        latitude: item.lat,
        longitude: item.lon,
        showBillboard: true,
        type: item.disasterType,
        className: "district",
      });
      entity.show = true;
      return entity;
    );
    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
    });
    if (dangerPoints.length) {
      treeMap.set("孙胡沟隐患点", dangerPoints);
    try {
      const resolvedPoints = await Promise.all(dangerPointPromises);
      if (resolvedPoints.length) {
        treeMap.set("孙胡沟隐患点", resolvedPoints);
      }
    } catch (error) {
      console.error("创建隐患点时发生错误:", error);
    }
  }
});
@@ -324,7 +723,7 @@
 * 添加避险场所数据
 */
function addTetrahedron() {
  getSafePoint().then((res) => {
  getSafePoint(110116110218).then((res) => {
    const geoJsonData = convertToGeoJson(res.data); // 转换为 GeoJSON
    // 加载 GeoJSON 数据到地图
    loadAreaPolygon(geoJsonData, true).then((entities) => {