From a51171f691ec516929fbb29356ad9074d0439b6e Mon Sep 17 00:00:00 2001
From: GuLiMmo <2820890765@qq.com>
Date: Thu, 07 Mar 2024 17:32:45 +0800
Subject: [PATCH] update: 右键新增航线、事件编辑、kmz文件编辑

---
 src/utils/cesium/use-kmz-tsa.ts |   73 ++++++++++++++++++++++++++++++++----
 1 files changed, 65 insertions(+), 8 deletions(-)

diff --git a/src/utils/cesium/use-kmz-tsa.ts b/src/utils/cesium/use-kmz-tsa.ts
index a37e16e..2f49acf 100644
--- a/src/utils/cesium/use-kmz-tsa.ts
+++ b/src/utils/cesium/use-kmz-tsa.ts
@@ -1,11 +1,47 @@
-import { ref } from 'vue'
+import { ref, getCurrentInstance } from 'vue'
 import { analyzeKmzFile, getKmlParams, generateKmlFormat } from '/@/utils/cesium/kmz'
+import { getLngLatAltitude } from './mapUtils'
+import JSZIP from 'jszip'
+import { saveAs } from 'file-saver'
+
+const JsZip = new JSZIP()
 
 const kmlStr = ref('')
+const kmzFile = ref<any>(null)
+
+// 点位参数
+const placemark: any = {
+  Point: {
+    coordinates: '',
+  },
+  index: 0,
+  executeHeight: 80,
+  height: 80,
+  waypointSpeed: 10,
+  waypointHeadingParam: {
+    waypointHeadingMode: 'followWayline',
+    waypointHeadingAngle: 0,
+    waypointPoiPoint: '0.000000,0.000000,0.000000',
+    waypointHeadingPathMode: 'followBadArc',
+    waypointHeadingPoiIndex: 0,
+  },
+  waypointTurnParam: {
+    waypointTurnMode: 'toPointAndStopWithDiscontinuityCurvature',
+    waypointTurnDampingDist: 0.2,
+  },
+  useGlobalHeight: 1,
+  useGlobalSpeed: 1,
+  useGlobalHeadingParam: 1,
+  useGlobalTurnParam: 1,
+  useStraightLine: 1,
+  actionGroup: {},
+}
 
 const useKmzTsa = () => {
   const init = async (fileUrl: string, fileContent?: string) => {
-    const kmzRes: string = await analyzeKmzFile(fileUrl)
+    const fileRes = await analyzeKmzFile(fileUrl)
+    kmzFile.value = fileRes.file
+    const kmzRes = await fileRes.content
     if (fileContent) {
       kmlStr.value = fileContent
       return false
@@ -33,10 +69,26 @@
     kmlStr.value = str
   }
 
-  const write = (settingParmas: any = {}, name?: string, isWpml?: boolean = false) => {}
-
-  const del = () => {
+  // const write = (settingParmas: any = {}, name: string) => {
+  // }
+  const writePoint = (settingParmas: any = {}) => {
+    Object.keys(settingParmas).forEach((key: string) => {
+      placemark[key] = settingParmas[key]
+    })
+    const Placemark = `<Placemark>${generateKmlFormat(placemark)}</Placemark>`
+    const points: RegExpMatchArray = getKmlParams(kmlStr.value, false, {
+      name: 'Placemark',
+      findRegx: '([\\s\\S]*?)',
+      mode: 'g',
+    }) || ['']
+    const lastPoint = points[points.length - 1]
+    const index = kmlStr.value.indexOf(lastPoint)
+    const beforeStr = kmlStr.value.slice(0, index)
+    const afterStr = kmlStr.value.slice(index + lastPoint.length)
+    kmlStr.value = beforeStr + lastPoint + Placemark + afterStr
   }
+
+  const del = () => {}
 
   const edit = (settingParmas: any = {}, keyName?: string, isKeyWpml: boolean = false) => {
     Object.keys(settingParmas).forEach((key: string) => {
@@ -50,7 +102,7 @@
           const regxVal: any = getKmlParams(kmlStr.value, true, {
             name: 'height',
             findRegx: '([\\s\\S]*?)',
-            mode: 'g'
+            mode: 'g',
           })
           regxVal.forEach((heightStr: string) => {
             const rstr = generateKmlFormat({ height: settingParmas[key] })
@@ -66,13 +118,18 @@
   }
 
   const save = () => {
-    console.log(kmlStr.value)
+    JsZip.file('wpmz/template.kml', kmlStr.value)
+    kmzFile.value.file('wpmz/template.kml', kmlStr.value)
+    JsZip.generateAsync({ type: 'blob' }).then((content) => {
+      saveAs(content, '新建航线-' + new Date().toLocaleString() + '.kmz')
+    })
   }
 
   return {
     init,
     create,
-    write,
+    // write,
+    writePoint,
     del,
     edit,
     save,

--
Gitblit v1.9.3