From 553614ce8f6f6b7a2cfbe1572cd7edf597dbb9aa Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Mon, 02 Dec 2024 19:00:43 +0800
Subject: [PATCH] 地图点的高度处理调整

---
 src/views/pd/components/dynamicPanel.vue |  322 ++++++++++++++++++++++++++++++-----------------------
 1 files changed, 184 insertions(+), 138 deletions(-)

diff --git a/src/views/pd/components/dynamicPanel.vue b/src/views/pd/components/dynamicPanel.vue
index ed15e9b..a75cbaa 100644
--- a/src/views/pd/components/dynamicPanel.vue
+++ b/src/views/pd/components/dynamicPanel.vue
@@ -2,7 +2,7 @@
  * @Author: shuishen 1109946754@qq.com
  * @Date: 2024-11-09 15:41:35
  * @LastEditors: shuishen 1109946754@qq.com
- * @LastEditTime: 2024-11-28 19:36:24
+ * @LastEditTime: 2024-12-02 18:36:34
  * @FilePath: \bigScreen\src\views\pd\components\dynamicPanel.vue
  * @Description: 
  * 
@@ -47,7 +47,7 @@
         lat: 27.27256126
       },
       linePosition: '115.10341051,27.27251643,80;115.10357817,27.27278003,80',
-      lineTime: 10000,
+      lineTime: 5000,
 
       threeContent: '关闭绿源污水处理厂旁雨水排口,拦截污染水体。',
       threePointPosition: {
@@ -196,7 +196,7 @@
 
 ]
 
-let positions = modelPosition.map(i => [i.lng, i.lat, 64].join(',')).join(';')
+let positions = modelPosition.map(i => [i.lng, i.lat, i.ele || 64].join(',')).join(';')
 let tc = new DC.TrackController(window.$viewer)
 let track = new DC.Track(positions, 5)
 track.setModel(VITE_APP_BASE + 'gltf/car.gltf', {
@@ -208,6 +208,165 @@
 })
 
 tc.addTrack(track)
+
+const synth = window.speechSynthesis
+
+const speak = (msg, continueFun = () => { }) => {
+  let u = new SpeechSynthesisUtterance()
+  u.lang = 'zh-TW'
+  u.text = msg
+  u.onend = () => {
+    continueFun()
+  }
+  synth.speak(u)
+}
+
+const publicFun = (item) => {
+  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),
+    `<div class="dynamic-map-popup">
+                  <div class="content-wrap">
+                    <div class="content">
+                      <p>${item.threeContent}</p>
+                    </div>
+                  </div>
+                  <div class="arrow"></div>
+                </div>`
+  )
+  dynamicHtmlLayer.addOverlay(threeContent)
+
+  window.$viewer.flyToPosition(new DC.Position(item.threePointPosition.lng, item.threePointPosition.lat, 400, 0, -90, 0), () => {
+    speak(item.threeContent, () => {
+      let FourCenter = DC.Position.fromObject(item.fourPointPosition)
+      let fourCircle = new DC.Circle(FourCenter, 10)
+      fourCircle.setStyle({
+        material: new DC.CircleWaveMaterialProperty({
+          color: DC.Color.fromRandom(),
+          speed: 20,
+          count: 5,
+          gradient: 0.5
+        })
+      })
+      dynamicVectorLayer.addOverlay(fourCircle)
+
+      let fourContent = new DC.DivIcon(
+        new DC.Position(item.fourPointPosition.lng, item.fourPointPosition.lat, 70),
+        `<div class="dynamic-event-profile-map-popup">
+                      <div class="content-wrap">
+                        <div class="content">
+                          <p>${item.fourContent}</p>
+                        </div>
+                      </div>
+                      <div class="arrow"></div>
+                    </div>`
+      )
+      dynamicHtmlLayer.addOverlay(fourContent)
+      // 执行对应的事件函数
+      window.$viewer.flyToPosition(new DC.Position(item.fourPointPosition.lng, item.fourPointPosition.lat, 400, 0, -90, 0), () => {
+        speak(item.fourContent, () => {
+          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)
+
+            let fiveContent = new DC.DivIcon(
+              new DC.Position(item.fivePointPosition.lng, item.fivePointPosition.lat, 70),
+              `<div class="dynamic-event-profile-map-popup">
+                              <div class="content-wrap">
+                                <div class="content">
+                                  <p>${item.fiveContent}</p>
+                                </div>
+                              </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)
+            }, 3)
+          }
+        })
+      }, 3)
+    })
+  }, 3)
+}
+
+const twoFun = (item, cb = () => { }) => {
+  let twoCenter = DC.Position.fromObject(item.twoPointPosition)
+  let twoCircle = new DC.Circle(twoCenter, 10)
+  twoCircle.setStyle({
+    material: new DC.CircleWaveMaterialProperty({
+      color: DC.Color.fromRandom(),
+      speed: 20,
+      count: 5,
+      gradient: 0.5
+    })
+  })
+  dynamicVectorLayer.addOverlay(twoCircle)
+
+  let twoContent = new DC.DivIcon(
+    new DC.Position(item.twoPointPosition.lng, item.twoPointPosition.lat, 70),
+    `<div class="dynamic-event-profile-map-popup">
+          <div class="content-wrap">
+            <div class="content">
+              <p>${item.twoContent}</p>
+              </div>
+              </div>
+              <div class="arrow"></div>
+              </div>`
+    // <p>特征污染物:${item.specificPollutant}</p>
+  )
+  dynamicHtmlLayer.addOverlay(twoContent)
+  // 执行对应的事件函数
+  window.$viewer.flyToPosition(new DC.Position(item.twoPointPosition.lng, item.twoPointPosition.lat, 400, 0, -90, 0), () => {
+    speak(item.twoContent, () => {
+      cb()
+    })
+  }, 3)
+}
+
+const createLinePath = (item, cb = () => { }) => {
+  lineTime = setTimeout(() => {
+    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)
+
+    window.$viewer.flyToPosition(new DC.Position(item.lineCenter.lng, item.lineCenter.lat, 400, 0, -90, 0), () => {
+      cb()
+    }, 3)
+  }, item.lineTime)
+}
 
 const schemeStart = (item) => {
   emit('closePanel')
@@ -259,6 +418,26 @@
         // <p>特征污染物:${item.specificPollutant}</p>
       )
       dynamicHtmlLayer.addOverlay(oneCentent)
+
+      speak(item.oneCentent, () => {
+        if (item.key == 2) {
+          createLinePath(item, () => {
+            twoFun(item, () => {
+              publicFun(item)
+            })
+          })
+        } else if (item.key == 1) {
+          twoFun(item, () => {
+            createLinePath(item, () => {
+              publicFun(item)
+            })
+          })
+        } else {
+          twoFun(item, () => {
+            publicFun(item)
+          })
+        }
+      })
     }
     if (item.showModel) {
       oneLoad()
@@ -268,144 +447,11 @@
       }, 3)
     }
   }, item.onetime)
-
-  item.linePosition && (lineTime = setTimeout(() => {
-    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)
-
-    window.$viewer.flyToPosition(new DC.Position(item.lineCenter.lng, item.lineCenter.lat, 400, 0, -90, 0), () => { }, 3)
-  }, item.lineTime))
-
-  timeTwo = setTimeout(() => {
-    let twoCenter = DC.Position.fromObject(item.twoPointPosition)
-    let twoCircle = new DC.Circle(twoCenter, 10)
-    twoCircle.setStyle({
-      material: new DC.CircleWaveMaterialProperty({
-        color: DC.Color.fromRandom(),
-        speed: 20,
-        count: 5,
-        gradient: 0.5
-      })
-    })
-    dynamicVectorLayer.addOverlay(twoCircle)
-
-    let twoContent = new DC.DivIcon(
-      new DC.Position(item.twoPointPosition.lng, item.twoPointPosition.lat, 70),
-      `<div class="dynamic-event-profile-map-popup">
-          <div class="content-wrap">
-            <div class="content">
-              <p>${item.twoContent}</p>
-              </div>
-              </div>
-              <div class="arrow"></div>
-              </div>`
-      // <p>特征污染物:${item.specificPollutant}</p>
-    )
-    dynamicHtmlLayer.addOverlay(twoContent)
-    // 执行对应的事件函数
-    window.$viewer.flyToPosition(new DC.Position(item.twoPointPosition.lng, item.twoPointPosition.lat, 400, 0, -90, 0), () => { }, 3)
-  }, item.twotime)
-
-  timeThree = setTimeout(() => {
-    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),
-      `<div class="dynamic-map-popup">
-          <div class="content-wrap">
-            <div class="content">
-              <p>${item.threeContent}</p>
-            </div>
-          </div>
-          <div class="arrow"></div>
-        </div>`
-    )
-    dynamicHtmlLayer.addOverlay(threeContent)
-
-    window.$viewer.flyToPosition(new DC.Position(item.threePointPosition.lng, item.threePointPosition.lat, 400, 0, -90, 0), () => { }, 3)
-  }, item.threetime)
-
-  item.fourPointPosition && (timeFour = setTimeout(() => {
-    let FourCenter = DC.Position.fromObject(item.fourPointPosition)
-    let fourCircle = new DC.Circle(FourCenter, 10)
-    fourCircle.setStyle({
-      material: new DC.CircleWaveMaterialProperty({
-        color: DC.Color.fromRandom(),
-        speed: 20,
-        count: 5,
-        gradient: 0.5
-      })
-    })
-    dynamicVectorLayer.addOverlay(fourCircle)
-
-    let fourContent = new DC.DivIcon(
-      new DC.Position(item.fourPointPosition.lng, item.fourPointPosition.lat, 70),
-      `<div class="dynamic-event-profile-map-popup">
-          <div class="content-wrap">
-            <div class="content">
-              <p>${item.fourContent}</p>
-              </div>
-              </div>
-              <div class="arrow"></div>
-              </div>`
-    )
-    dynamicHtmlLayer.addOverlay(fourContent)
-    // 执行对应的事件函数
-    window.$viewer.flyToPosition(new DC.Position(item.fourPointPosition.lng, item.fourPointPosition.lat, 400, 0, -90, 0), () => { }, 3)
-  }, item.fourtime))
-
-  item.fivePointPosition && (timeFive = setTimeout(() => {
-    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)
-
-    let fiveContent = new DC.DivIcon(
-      new DC.Position(item.fivePointPosition.lng, item.fivePointPosition.lat, 70),
-      `<div class="dynamic-event-profile-map-popup">
-          <div class="content-wrap">
-            <div class="content">
-              <p>${item.fiveContent}</p>
-              </div>
-              </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), () => { }, 3)
-  }, item.fivetime))
 }
 
 const clearAll = () => {
+  window.speechSynthesis.cancel()
+
   lineTime && (clearTimeout(lineTime), lineTime = null)
   timeOne && (clearTimeout(timeOne), timeOne = null)
   timeTwo && (clearTimeout(timeTwo), timeTwo = null)

--
Gitblit v1.9.3