From c76b6b7d56a681f4c0e62764fd922f90b4df03dd Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Thu, 20 Feb 2025 20:44:21 +0800
Subject: [PATCH] 安义基础配置调整

---
 src/views/pd/components/dynamicPanel.vue |  661 ++++++++++++++++++++++++++++++++-----------------------
 1 files changed, 385 insertions(+), 276 deletions(-)

diff --git a/src/views/pd/components/dynamicPanel.vue b/src/views/pd/components/dynamicPanel.vue
index 9abcdd1..2c7169f 100644
--- a/src/views/pd/components/dynamicPanel.vue
+++ b/src/views/pd/components/dynamicPanel.vue
@@ -2,17 +2,30 @@
  * @Author: shuishen 1109946754@qq.com
  * @Date: 2024-11-09 15:41:35
  * @LastEditors: shuishen 1109946754@qq.com
- * @LastEditTime: 2024-12-17 19:00:23
+ * @LastEditTime: 2025-02-12 20:00:22
  * @FilePath: \bigScreen\src\views\pd\components\dynamicPanel.vue
  * @Description: 
  * 
  * Copyright (c) 2024 by shuishen, All Rights Reserved. 
 -->
 <script setup>
+import EventBus from 'utils/bus'
+
 const { VITE_APP_BASE } = import.meta.env
 
 const emit = defineEmits(['closePanel'])
 import { onUnmounted } from 'vue'
+
+import { spatialAnalysisPoint } from "@/api/space/space"
+
+import { useMap } from 'store/map'
+const mapStore = useMap()
+import { usePointStore } from 'store/usepoint'
+const pointStore = usePointStore()
+
+onMounted(() => {
+  pointStore.updateSharedData(1)
+})
 
 let lineTime = null
 let timeOne = null
@@ -25,171 +38,65 @@
 const panelData = reactive({
   data: [
     {
+      type: 'demo',
       key: 1,
-      title: '典型案例1',
-      content: '南片区松节油储罐区泄漏事故: 南片区某企业松节油储罐泄漏,如不采取措施,将造成污染事故,影响到赣江下游水质。',
+      title: '典型案例',
+      content: '化工园区罐区泄漏事故: 化工园区某企业储罐泄漏,如不采取措施,将造成污染事故,影响到长江下游水质。',
 
-      oneCentent: '2024年11月11日11时,南片区某公司松节油储罐泄漏。企业关闭前置阀门切断泄漏源,向罐内适量注水,抬高液位。',
+      oneCentent: '2024年11月11日11时,化工园区某企业储罐泄漏。企业关闭前置阀门切断泄漏源,向罐内适量注水,抬高液位。',
       onePointPosition: {
-        lng: 115.10175740,
-        lat: 27.27356477
+        lng: 115.60652633,
+        lat: 29.80893013,
+        alt: 19
       },
       onetime: 0,
 
-      twoContent: '启动应急池的使用,将泄漏的松节油引导至应急池中。',
+      twoContent: '启动应急池的使用,将泄漏的化学原料引导至应急池中。',
       twoPointPosition: {
-        lng: 115.10198913,
-        lat: 27.27343615
+        lng: 115.6074303,
+        lat: 29.80929992,
+        alt: 17
       },
       twotime: 5000,
 
       lineCenter: {
-        lng: 115.10343807,
-        lat: 27.27256126
+        lng: 115.60786813,
+        lat: 29.80937902,
+        alt: 30
       },
-      linePosition: '115.10341051,27.27251643,64;115.10357817,27.27278003,64',
+      linePosition: '115.60782622,29.80955698,30;115.60783535,29.80913790,30',
       lineTime: 5000,
 
       threeContent: '企业采取紧急措施后,还有部分松节油进入厂外雨水管网。',
       threePointPosition: {
-        lng: 115.10343807,
-        lat: 27.27256126
+        lng: 115.60782622,
+        lat: 29.80955698,
+        alt: 30
       },
       threetime: 15000,
 
-      fourContent: '关闭绿源污水处理厂旁雨水排口,拦截污染水体。',
+      fourContent: '关闭园区闸坝,拦截污染水体。',
       fourPointPosition: {
-        lng: 115.10870094,
-        lat: 27.27185349
+        lng: 115.6269944,
+        lat: 29.80695862,
+        alt: 5
       },
       fourtime: 15000,
 
-      fiveContent: '启用绿源污水处理厂事故应急池,将已拦截废水泵入应急池。',
+      fiveContent: '应急指挥部指导企业处理受污染废水, 监测公共应急池水质 ,根据水质情况分批次进入生化系统处理。',
       fivePointPosition: {
-        lng: 115.10814596,
-        lat: 27.27257473
+        lng: 115.62761928,
+        lat: 29.80836521,
+        alt: 7
       },
       fivetime: 20000,
-
-      sixContent: '应急指挥部指导企业处理受污染废水, 监测公共应急池水质 ,根据水质情况分批次进入生化系统处理。',
-      sixPointPosition: {
-        lng: 115.10843364,
-        lat: 27.27320219
-      },
-      sixtime: 25000,
     },
 
     {
+      type: 'custom',
       key: 2,
-      title: '典型案例2',
-      content: '北片区碱类腐蚀性物质泄漏事故: 北片区某企业在生产过程中操作失误,大量含碱废水泄漏,如不采取措施,将造成污染事故,影响到赣江下游水质。',
-
-      oneCentent: '2024年09月16日14时,北片区某公司在生产过程中操作失误,大量含碱废水泄漏。企业关闭前置阀门,切断泄漏源。',
-      onePointPosition: {
-        lng: 115.10467136,
-        lat: 27.29415383
-      },
-      onetime: 0,
-
-      twoContent: '企业通过砂土等筑堤堵截泄漏废水,并引流至事故应急池。',
-      twoPointPosition: {
-        lng: 115.10545440,
-        lat: 27.29439753
-      },
-      twotime: 10000,
-
-      lineCenter: {
-        lng: 115.10627858,
-        lat: 27.29434439
-      },
-      linePosition: '115.10627726,27.29408853,64;115.10627703,27.29456132,64',
-      lineTime: 5000,
-
-      threeContent: '企业通过紧急处理,还有部分事故废水进入厂外雨水管网。',
-      threePointPosition: {
-        lng: 115.10627858,
-        lat: 27.29434439
-      },
-      threetime: 10000,
-
-      fourContent: '园区关闭北区雨水排口闸阀(拟建),拦截污染水体。',
-      fourPointPosition: {
-        lng: 115.10629605,
-        lat: 27.29785816
-      },
-      fourtime: 10000,
-
-      fiveContent: '园区启用北区公共应急池(拟建),将已拦截废水泵入应急池。',
-      fivePointPosition: {
-        lng: 115.106600,
-        lat: 27.296891
-      },
-      fivetime: 15000,
-
-      sixContent: '将拦截废水从应急池中通过北区污水提升泵站以及金工大道污水管网转移至绿源污水处理厂进行处置。',
-      sixPointPosition: {
-        lng: 115.10814596,
-        lat: 27.27257473
-      },
-      sixtime: 20000,
-
-      sevenContent: '排口下游展开应急监测,确保废水没有进入周边水系。',
-      sevenPointPosition: {
-        lng: 115.10542509,
-        lat: 27.29924475
-      },
-      seventime: 25000
-    },
-
-    {
-      key: 3,
-      title: '典型案例3',
-      content: '危险化学品运输事故: 北片区某企业的危化品运输车辆发生侧翻,大量盐酸流至路面,如不采取措施,将造成污染事故,影响到赣江下游水质。',
-
-      showModel: true,
-
-
-      oneCentent: '2024年09月16日14时,北片区某公司的危化品运输车辆发生侧翻,大量盐酸流至路面。',
-      onePointPosition: {
-        lng: 115.10639803,
-        lat: 27.27848014
-      },
-      onetime: 10000,
-
-      twoContent: '立即关闭雨水闸阀。',
-      twoPointPosition: {
-        lng: 115.10665321,
-        lat: 27.27720681
-      },
-      twotime: 13000,
-
-      threeContent: '调度金龙水库清水,稀释污染团。',
-      threePointPosition: {
-        lng: 115.10488545,
-        lat: 27.27678110
-      },
-      threetime: 13000,
-
-      fourContent: '转输至江西粤鹏环保高新技术开发有限公司事故应急池。',
-      fourPointPosition: {
-        lng: 115.10499264,
-        lat: 27.28048591
-      },
-      fourtime: 18000,
-
-      fiveContent: '转输至江西腾龙源环保科技有限公司事故应急池。',
-      fivePointPosition: {
-        lng: 115.10332118,
-        lat: 27.27831698
-      },
-      fivetime: 23000,
-
-      sixContent: '根据应急监测方案,立即开展监测,确保污染废水未进入外界水体。',
-      sixPointPosition: {
-        lng: 115.10665321,
-        lat: 27.27720681
-      },
-      sixtime: 28000,
+      title: '自定义案例',
+      content: '自定义风险源:化工园区某企业发生化学原料危害品泄漏,如不采取措施,将造成污染事故,影响到长江下游水质',
     },
   ]
 })
@@ -237,6 +144,7 @@
 })
 
 tc.addTrack(track)
+let startClick = false
 
 const synth = window.speechSynthesis
 
@@ -258,6 +166,8 @@
 }
 
 const publicFun = (item) => {
+  if (startClick) pointStore.updateSharedData(3)
+
   let fourCenter = DC.Position.fromObject(item.fourPointPosition)
   let fourCircle = new DC.Circle(fourCenter, 30)
   fourCircle.setStyle({
@@ -271,7 +181,7 @@
   dynamicVectorLayer.addOverlay(fourCircle)
 
   let fourContent = new DC.DivIcon(
-    new DC.Position(item.fourPointPosition.lng, item.fourPointPosition.lat, 70),
+    new DC.Position(item.fourPointPosition.lng, item.fourPointPosition.lat, item.fourPointPosition.alt),
     `<div class="dynamic-map-popup">
                   <div class="content-wrap">
                     <div class="content">
@@ -285,21 +195,22 @@
 
   window.$viewer.flyToPosition(new DC.Position(item.fourPointPosition.lng, item.fourPointPosition.lat, 400, 0, -90, 0), () => {
     speak(item.fourContent, () => {
-      let fiveCenter = DC.Position.fromObject(item.fivePointPosition)
-      let fiveCircle = new DC.Circle(fiveCenter, 10)
-      fiveCircle.setStyle({
-        material: new DC.CircleWaveMaterialProperty({
-          color: DC.Color.fromRandom(),
-          speed: 20,
-          count: 5,
-          gradient: 0.5
+      if (item.fivePointPosition) {
+        let fiveCenter = DC.Position.fromObject(item.fivePointPosition)
+        let fiveCircle = new DC.Circle(fiveCenter, 10)
+        fiveCircle.setStyle({
+          material: new DC.CircleWaveMaterialProperty({
+            color: DC.Color.fromRandom(),
+            speed: 20,
+            count: 5,
+            gradient: 0.5
+          })
         })
-      })
-      dynamicVectorLayer.addOverlay(fiveCircle)
+        dynamicVectorLayer.addOverlay(fiveCircle)
 
-      let fiveContent = new DC.DivIcon(
-        new DC.Position(item.fivePointPosition.lng, item.fivePointPosition.lat, 70),
-        `<div class="dynamic-event-profile-map-popup">
+        let fiveContent = new DC.DivIcon(
+          new DC.Position(item.fivePointPosition.lng, item.fivePointPosition.lat, item.fivePointPosition.alt),
+          `<div class="dynamic-event-profile-map-popup">
                       <div class="content-wrap">
                         <div class="content">
                           <p>${item.fiveContent}</p>
@@ -307,27 +218,27 @@
                       </div>
                       <div class="arrow"></div>
                     </div>`
-      )
-      dynamicHtmlLayer.addOverlay(fiveContent)
-      // 执行对应的事件函数
-      window.$viewer.flyToPosition(new DC.Position(item.fivePointPosition.lng, item.fivePointPosition.lat, 400, 0, -90, 0), () => {
-        speak(item.fiveContent, () => {
-          if (item.sixPointPosition) {
-            let sixCenter = DC.Position.fromObject(item.sixPointPosition)
-            let sixCircle = new DC.Circle(sixCenter, 10)
-            sixCircle.setStyle({
-              material: new DC.CircleWaveMaterialProperty({
-                color: DC.Color.fromRandom(),
-                speed: 20,
-                count: 5,
-                gradient: 0.5
+        )
+        dynamicHtmlLayer.addOverlay(fiveContent)
+        // 执行对应的事件函数
+        window.$viewer.flyToPosition(new DC.Position(item.fivePointPosition.lng, item.fivePointPosition.lat, 400, 0, -90, 0), () => {
+          speak(item.fiveContent, () => {
+            if (item.sixPointPosition) {
+              let sixCenter = DC.Position.fromObject(item.sixPointPosition)
+              let sixCircle = new DC.Circle(sixCenter, 10)
+              sixCircle.setStyle({
+                material: new DC.CircleWaveMaterialProperty({
+                  color: DC.Color.fromRandom(),
+                  speed: 20,
+                  count: 5,
+                  gradient: 0.5
+                })
               })
-            })
-            dynamicVectorLayer.addOverlay(sixCircle)
+              dynamicVectorLayer.addOverlay(sixCircle)
 
-            let sixContent = new DC.DivIcon(
-              new DC.Position(item.sixPointPosition.lng, item.sixPointPosition.lat, 70),
-              `<div class="dynamic-map-popup">
+              let sixContent = new DC.DivIcon(
+                new DC.Position(item.sixPointPosition.lng, item.sixPointPosition.lat, 70),
+                `<div class="dynamic-map-popup">
                               <div class="content-wrap">
                                 <div class="content">
                                   <p>${item.sixContent}</p>
@@ -335,27 +246,27 @@
                               </div>
                               <div class="arrow"></div>
                           </div>`
-            )
-            dynamicHtmlLayer.addOverlay(sixContent)
-            // 执行对应的事件函数
-            window.$viewer.flyToPosition(new DC.Position(item.sixPointPosition.lng, item.sixPointPosition.lat, 400, 0, -90, 0), () => {
-              speak(item.sixContent, () => {
-                if (item.sevenPointPosition) {
-                  let sevenCenter = DC.Position.fromObject(item.sevenPointPosition)
-                  let sevenCircle = new DC.Circle(sevenCenter, 10)
-                  sevenCircle.setStyle({
-                    material: new DC.CircleWaveMaterialProperty({
-                      color: DC.Color.fromRandom(),
-                      speed: 20,
-                      count: 5,
-                      gradient: 0.5
+              )
+              dynamicHtmlLayer.addOverlay(sixContent)
+              // 执行对应的事件函数
+              window.$viewer.flyToPosition(new DC.Position(item.sixPointPosition.lng, item.sixPointPosition.lat, 400, 0, -90, 0), () => {
+                speak(item.sixContent, () => {
+                  if (item.sevenPointPosition) {
+                    let sevenCenter = DC.Position.fromObject(item.sevenPointPosition)
+                    let sevenCircle = new DC.Circle(sevenCenter, 10)
+                    sevenCircle.setStyle({
+                      material: new DC.CircleWaveMaterialProperty({
+                        color: DC.Color.fromRandom(),
+                        speed: 20,
+                        count: 5,
+                        gradient: 0.5
+                      })
                     })
-                  })
-                  dynamicVectorLayer.addOverlay(sevenCircle)
+                    dynamicVectorLayer.addOverlay(sevenCircle)
 
-                  let sevenContent = new DC.DivIcon(
-                    new DC.Position(item.sevenPointPosition.lng, item.sevenPointPosition.lat, 70),
-                    `<div class="dynamic-event-profile-map-popup">
+                    let sevenContent = new DC.DivIcon(
+                      new DC.Position(item.sevenPointPosition.lng, item.sevenPointPosition.lat, 70),
+                      `<div class="dynamic-event-profile-map-popup">
                               <div class="content-wrap">
                                 <div class="content">
                                   <p>${item.sevenContent}</p>
@@ -363,23 +274,26 @@
                               </div>
                               <div class="arrow"></div>
                           </div>`
-                  )
-                  dynamicHtmlLayer.addOverlay(sevenContent)
-                  // 执行对应的事件函数
-                  window.$viewer.flyToPosition(new DC.Position(item.sevenPointPosition.lng, item.sevenPointPosition.lat, 400, 0, -90, 0), () => {
-                    speak(item.sevenContent)
-                  }, 3)
-                }
-              })
-            }, 3)
-          }
-        })
-      }, 3)
+                    )
+                    dynamicHtmlLayer.addOverlay(sevenContent)
+                    // 执行对应的事件函数
+                    window.$viewer.flyToPosition(new DC.Position(item.sevenPointPosition.lng, item.sevenPointPosition.lat, 400, 0, -90, 0), () => {
+                      speak(item.sevenContent)
+                    }, 3)
+                  }
+                })
+              }, 3)
+            }
+          })
+        }, 3)
+      }
     })
   }, 3)
 }
 
 const twoFun = (item, cb = () => { }) => {
+  if (startClick) pointStore.updateSharedData(1)
+
   let twoCenter = DC.Position.fromObject(item.twoPointPosition)
   let twoCircle = new DC.Circle(twoCenter, 10)
   twoCircle.setStyle({
@@ -393,7 +307,7 @@
   dynamicVectorLayer.addOverlay(twoCircle)
 
   let twoContent = new DC.DivIcon(
-    new DC.Position(item.twoPointPosition.lng, item.twoPointPosition.lat, 70),
+    new DC.Position(item.twoPointPosition.lng, item.twoPointPosition.lat, item.twoPointPosition.alt),
     `<div class="dynamic-event-profile-map-popup">
           <div class="content-wrap">
             <div class="content">
@@ -414,22 +328,38 @@
 }
 
 const createLinePath = (item, cb = () => { }) => {
-  let polyline = new DC.Polyline(item.linePosition)
-  polyline.setStyle({
-    width: 20,
-    material: new DC.PolylineImageTrailMaterialProperty({
-      color: DC.Color.RED,
-      speed: 20,
-      image: VITE_APP_BASE + 'img/mapicon/right.png',
-      repeat: { x: 5, y: 1 }
-    }),
-    clampToGround: false
-  })
+  if (item.linePosition) {
+    let polyline = new DC.Polyline(item.linePosition)
+    polyline.setStyle({
+      width: 20,
+      material: new DC.PolylineImageTrailMaterialProperty({
+        color: DC.Color.RED,
+        speed: 20,
+        image: VITE_APP_BASE + 'img/mapicon/right.png',
+        repeat: { x: 5, y: 1 }
+      }),
+      clampToGround: false
+    })
 
-  dynamicLineVectorLayer.addOverlay(polyline)
+    dynamicLineVectorLayer.addOverlay(polyline)
+  } else {
+    if (startClick) pointStore.updateSharedData(2)
+
+    let threeCenter = DC.Position.fromObject(item.threePointPosition)
+    let threeCircle = new DC.Circle(threeCenter, 30)
+    threeCircle.setStyle({
+      material: new DC.CircleWaveMaterialProperty({
+        color: DC.Color.fromRandom(),
+        speed: 20,
+        count: 5,
+        gradient: 0.5
+      })
+    })
+    dynamicVectorLayer.addOverlay(threeCircle)
+  }
 
   let threeContent = new DC.DivIcon(
-    new DC.Position(item.threePointPosition.lng, item.threePointPosition.lat, 70),
+    new DC.Position(item.threePointPosition.lng, item.threePointPosition.lat, item.threePointPosition.alt),
     `<div class="dynamic-event-profile-map-popup">
           <div class="content-wrap">
             <div class="content">
@@ -449,47 +379,199 @@
     })
   }, 3)
 }
+const parseLineString = (lineString) => {
+  // 移除 "LINESTRING(" 和 ")"
+  const cleanedString = lineString.replace(/^LINESTRING\(/, '').replace(/\)$/, '')
 
-const schemeStart = (item) => {
+  // 使用逗号分割成坐标对字符串数组
+  const coordinatePairsString = cleanedString.split(',')
+
+  // 将每个坐标对字符串转换为数组,并解析成浮点数
+  const coordinatesArray = coordinatePairsString.map(pair => {
+    const [lon, lat] = pair.trim().split(' ')
+    return [parseFloat(lon), parseFloat(lat)]
+  })
+
+  return coordinatesArray
+}
+
+let publicEventHandle = {
+  oneCentent: 'xx年xx月xx日,企业发生化学原料危害品泄漏。',
+  onePointPosition: {
+    lng: null,
+    lat: null,
+    alt: null
+  },
+  onetime: 0,
+
+  twoContent: '关闭所有可能外溢事故污水的外排口,利用企业自身的围堰、应急池等环境应急防控设施,将污水控制在企业厂区内部。',
+  twoPointPosition: {
+    lng: null,
+    lat: null,
+    alt: null
+  },
+  twotime: 5000,
+
+  threeContent: '通过专用管道或临时转输措施,与相邻企业应急池、园区公共应急池等互联互通,拦截处置事故污水。',
+  threePointPosition: {
+    lng: null,
+    lat: null,
+    alt: null
+  },
+  threetime: 15000,
+
+  fourContent: '利用化工集中区内的坑塘、河道、沟渠以及周边水系等,构建环境应急防控空间,对进出园区的水体实施封闭或分段管控。',
+  fourPointPosition: {
+    lng: null,
+    lat: null,
+    alt: null
+  },
+  fourtime: 15000,
+}
+
+const wxEntityClick = (e) => {
+  const { attrParams } = e.overlay
+  clearAll()
+  pointStore.updateSharedData(1)
+  mapStore.setShowPreLevel(true)
+
+  spatialAnalysisPoint({
+    lng: attrParams.lng,
+    lat: attrParams.lat
+  }).then(res => {
+    let arr = res.data.data
+
+    publicEventHandle.onePointPosition = {
+      lng: attrParams.lng,
+      lat: attrParams.lat,
+      alt: 16
+    }
+
+    arr.forEach(item => {
+      if (item.preLevel == 1) {
+        publicEventHandle.twoPointPosition = {
+          lng: item.lng,
+          lat: item.lat,
+          alt: item.ele
+        }
+      }
+      if (item.preLevel == 2 && item.geom) {
+        var line = window.$turf.lineString(parseLineString(item.geom))
+        var pt = window.$turf.point([attrParams.lng, attrParams.lat])
+        var snapped = window.$turf.nearestPointOnLine(line, pt, { units: "miles" })
+        publicEventHandle.threePointPosition = {
+          lng: snapped.geometry.coordinates[0],
+          lat: snapped.geometry.coordinates[1],
+          alt: 30
+        }
+      }
+
+      if (item.preLevel == 3) {
+        publicEventHandle.fourPointPosition = {
+          lng: item.lng,
+          lat: item.lat,
+          alt: item.ele
+        }
+      }
+    })
+
+    timeOne = setTimeout(() => {
+      function oneLoad () {
+        let oneCenter = DC.Position.fromObject(publicEventHandle.onePointPosition)
+        let oneCircle = new DC.Circle(oneCenter, 20)
+        oneCircle.setStyle({
+          material: new DC.CircleWaveMaterialProperty({
+            color: DC.Color.RED.withAlpha(0.9),
+            speed: 20,
+            count: 5,
+            gradient: 0.5
+          })
+        })
+        dynamicVectorLayer.addOverlay(oneCircle)
+
+        let oneCentent = new DC.DivIcon(
+          new DC.Position(publicEventHandle.onePointPosition.lng, publicEventHandle.onePointPosition.lat, publicEventHandle.onePointPosition.alt),
+          `<div class="dynamic-map-popup">
+          <div class="content-wrap">
+            <div class="content">
+              <p>${publicEventHandle.oneCentent}</p>
+              </div>
+              </div>
+              <div class="arrow"></div>
+              </div>`
+          // <p>特征污染物:${publicEventHandle.specificPollutant}</p>
+        )
+        dynamicHtmlLayer.addOverlay(oneCentent)
+
+        speak(publicEventHandle.oneCentent, () => {
+          twoFun(publicEventHandle, () => {
+            createLinePath(publicEventHandle, () => {
+              publicFun(publicEventHandle)
+            })
+          })
+        })
+      }
+      if (publicEventHandle.showModel) {
+        oneLoad()
+      } else {
+        window.$viewer.flyToPosition(new DC.Position(publicEventHandle.onePointPosition.lng, publicEventHandle.onePointPosition.lat, 400, 0, -90, 0), () => {
+          oneLoad()
+        }, 3)
+      }
+    }, publicEventHandle.onetime)
+  })
+}
+
+EventBus.on('wxEntityClick', wxEntityClick)
+
+const schemeStart = (item, type) => {
   emit('closePanel')
   clearAll()
 
-  if (item.showModel) {
-    window.$viewer.flyToPosition("115.10587903,27.28374884,400,0,-90", () => {
-      track.setModel(VITE_APP_BASE + 'gltf/car.gltf', {
-        show: true,
-        scale: 0.0025,
-        // nodeTransformations: {
-        //   rotation: window.$Cesium.Quaternion.fromHeadingPitchRoll(window.$Cesium.Math.toRadians(0), window.$Cesium.Math.toRadians(0), window.$Cesium.Math.toRadians(0)),
-        // }
-      })
+  if (type == 1) {
+    if (startClick) {
+      EventBus.emit('restHandleDelChange', `4-1`)
+      EventBus.emit('restHandleDelChange', `4-2`)
+      EventBus.emit('restHandleDelChange', `4-3`)
+      EventBus.emit('restHandleDelChange', `4-9`)
+    }
 
-      tc.play()
-      tc.viewTrack(track, {
-        mode: '2',
-        pitch: -45,
-        range: 400
-      })
-    })
-  }
+    if (item.showModel) {
+      window.$viewer.flyToPosition("115.10587903,27.28374884,400,0,-90", () => {
+        track.setModel(VITE_APP_BASE + 'gltf/car.gltf', {
+          show: true,
+          scale: 0.0025,
+          // nodeTransformations: {
+          //   rotation: window.$Cesium.Quaternion.fromHeadingPitchRoll(window.$Cesium.Math.toRadians(0), window.$Cesium.Math.toRadians(0), window.$Cesium.Math.toRadians(0)),
+          // }
+        })
 
-  timeOne = setTimeout(() => {
-    function oneLoad () {
-      let oneCenter = DC.Position.fromObject(item.onePointPosition)
-      let oneCircle = new DC.Circle(oneCenter, 20)
-      oneCircle.setStyle({
-        material: new DC.CircleWaveMaterialProperty({
-          color: DC.Color.RED.withAlpha(0.9),
-          speed: 20,
-          count: 5,
-          gradient: 0.5
+        tc.play()
+        tc.viewTrack(track, {
+          mode: '2',
+          pitch: -45,
+          range: 400
         })
       })
-      dynamicVectorLayer.addOverlay(oneCircle)
+    }
 
-      let oneCentent = new DC.DivIcon(
-        new DC.Position(item.onePointPosition.lng, item.onePointPosition.lat, 70),
-        `<div class="dynamic-map-popup">
+    timeOne = setTimeout(() => {
+      function oneLoad () {
+        let oneCenter = DC.Position.fromObject(item.onePointPosition)
+        let oneCircle = new DC.Circle(oneCenter, 20)
+        oneCircle.setStyle({
+          material: new DC.CircleWaveMaterialProperty({
+            color: DC.Color.RED.withAlpha(0.9),
+            speed: 20,
+            count: 5,
+            gradient: 0.5
+          })
+        })
+        dynamicVectorLayer.addOverlay(oneCircle)
+
+        let oneCentent = new DC.DivIcon(
+          new DC.Position(item.onePointPosition.lng, item.onePointPosition.lat, item.onePointPosition.alt),
+          `<div class="dynamic-map-popup">
           <div class="content-wrap">
             <div class="content">
               <p>${item.oneCentent}</p>
@@ -497,41 +579,52 @@
               </div>
               <div class="arrow"></div>
               </div>`
-        // <p>特征污染物:${item.specificPollutant}</p>
-      )
-      dynamicHtmlLayer.addOverlay(oneCentent)
+          // <p>特征污染物:${item.specificPollutant}</p>
+        )
+        dynamicHtmlLayer.addOverlay(oneCentent)
 
-      speak(item.oneCentent, () => {
-        if (item.key == 2) {
-          twoFun(item, () => {
-            createLinePath(item, () => {
-              publicFun(item)
+        speak(item.oneCentent, () => {
+          if (item.key == 2) {
+            twoFun(item, () => {
+              createLinePath(item, () => {
+                publicFun(item)
+              })
             })
-          })
-        } else if (item.key == 1) {
-          twoFun(item, () => {
-            createLinePath(item, () => {
-              publicFun(item)
+          } else if (item.key == 1) {
+            twoFun(item, () => {
+              createLinePath(item, () => {
+                publicFun(item)
+              })
             })
-          })
-        } else {
-          twoFun(item, () => {
-            publicFun(item)
-          })
-        }
-      })
-    }
-    if (item.showModel) {
-      oneLoad()
-    } else {
-      window.$viewer.flyToPosition(new DC.Position(item.onePointPosition.lng, item.onePointPosition.lat, 400, 0, -90, 0), () => {
+          } else {
+            twoFun(item, () => {
+              createLinePath(item, () => {
+                publicFun(item)
+              })
+            })
+          }
+        })
+      }
+      if (item.showModel) {
         oneLoad()
-      }, 3)
-    }
-  }, item.onetime)
+      } else {
+        window.$viewer.flyToPosition(new DC.Position(item.onePointPosition.lng, item.onePointPosition.lat, 400, 0, -90, 0), () => {
+          oneLoad()
+        }, 3)
+      }
+    }, item.onetime)
+
+    startClick = false
+    mapStore.setStartCustomWx(startClick)
+  } else {
+    startClick = true
+    mapStore.setStartCustomWx(startClick)
+    EventBus.emit('restHandleCheckChange', `4`)
+  }
 }
 
 const clearAll = () => {
+  mapStore.setShowPreLevel(false)
   window.speechSynthesis.cancel()
 
   lineTime && (clearTimeout(lineTime), lineTime = null)
@@ -556,6 +649,15 @@
 }
 
 onUnmounted(() => {
+  if (startClick) {
+    EventBus.emit('restHandleDelChange', `4-1`)
+    EventBus.emit('restHandleDelChange', `4-2`)
+    EventBus.emit('restHandleDelChange', `4-3`)
+    EventBus.emit('restHandleDelChange', `4-9`)
+  }
+  mapStore.setStartCustomWx(false)
+  EventBus.off('wxEntityClick', wxEntityClick)
+
   clearAll()
 
   tc.clear()
@@ -590,9 +692,15 @@
               </div>
             </div>
 
-            <div class="footer-btn">
-              <div class="start-btn" @click="schemeStart(item)">
+            <div class="footer-btn" v-show="item.type == 'demo'">
+              <div class="start-btn" @click="schemeStart(item, 1)">
                 开始模拟
+              </div>
+            </div>
+
+            <div class="footer-btn" v-show="item.type != 'demo'">
+              <div class="start-btn" @click="schemeStart(item, 2)">
+                自定义风险源
               </div>
             </div>
           </div>
@@ -673,6 +781,7 @@
 .start-btn,
 .start-btn:focus,
 .start-btn:hover {
+  padding: 0 10px;
   display: inline-block;
   position: relative;
   min-width: 96px;

--
Gitblit v1.9.3