From 46442b030db95ae97b754711c6dc786376c3a6e1 Mon Sep 17 00:00:00 2001
From: GuLiMmo <2820890765@qq.com>
Date: Thu, 14 Mar 2024 17:28:36 +0800
Subject: [PATCH] update: kmz修改保持方式修改
---
src/utils/cesium/use-kmz-tsa.ts | 185 +++++-----------------------------------------
1 files changed, 20 insertions(+), 165 deletions(-)
diff --git a/src/utils/cesium/use-kmz-tsa.ts b/src/utils/cesium/use-kmz-tsa.ts
index 665aa36..f6671a9 100644
--- a/src/utils/cesium/use-kmz-tsa.ts
+++ b/src/utils/cesium/use-kmz-tsa.ts
@@ -1,8 +1,6 @@
-import { ref, getCurrentInstance } from 'vue'
+import { ref } from 'vue'
import {
analyzeKmzFile,
- getKmlParams,
- generateKmlFormat,
XMLToJSON,
JSONToXML
} from '/@/utils/cesium/kmz'
@@ -18,7 +16,7 @@
const kmlStr = ref('')
const kmzFile = ref<any>(null)
-const template = ref({
+const template = ref<any>({
author: '',
createTime: '',
updateTime: '',
@@ -91,7 +89,7 @@
],
},
})
-const waylines = ref({
+const waylines = ref<any>({
missionConfig: {
flyToWaylineMode: 'safely',
finishAction: 'goHome',
@@ -138,34 +136,6 @@
},
})
-// 点位参数
-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 fileRes = await analyzeKmzFile(fileUrl)
@@ -176,151 +146,36 @@
return false
}
kmlStr.value = kmzRes
+ const tplXmlJson = XMLToJSON(kmzRes)
+ template.value = tplXmlJson.Document
return kmzRes
}
const create = () => {
- const nowTime = new Date().getTime()
- const str = `
- <?xml version="1.0" encoding="UTF-8"?>
- <kml xmlns="http://www.opengis.net/kml/2.2" xmlns:wpml="http://www.dji.com/wpmz/1.0.5">
- <Document>
- <wpml:author>17304076412</wpml:author>
- <wpml:createTime>${nowTime}</wpml:createTime>
- <wpml:updateTime>${nowTime}</wpml:updateTime>
- <wpml:missionConfig>
- </wpml:missionConfig>
- <Folder>
- </Folder>
- </Document>
- </kml>
- `
- kmlStr.value = str
- }
- const writePoint = (settingParmas: any = {}, place: string, pointNumber: number = 0) => {
- 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',
- }) || ['']
- if (place === 'add') {
- 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
- }
- if (place === 'prev') {
- const currentPoint: string = points[pointNumber]
- const index = kmlStr.value.indexOf(currentPoint)
- const beforeStr = kmlStr.value.slice(0, index)
- const afterStr = kmlStr.value.slice(index + currentPoint.length)
- kmlStr.value = beforeStr + Placemark + currentPoint + afterStr
- // 更新点位序号
- const pointIndexList = getKmlParams(kmlStr.value, true, {
- name: 'index',
- findRegx: '([\\s\\S]*?)',
- mode: 'g',
- })
- pointIndexList?.forEach((pintIndex: string, index: number) => {
- kmlStr.value.replace(pintIndex, `<wpml:index>${index}</wpml:index>`)
- })
- }
- if (place === 'next') {
- const currentPoint: string = points[pointNumber + 1]
- const index = kmlStr.value.indexOf(currentPoint)
- const beforeStr = kmlStr.value.slice(0, index)
- const currentPointLength = currentPoint?.length || 0
- const afterStr = kmlStr.value.slice(index + currentPointLength)
- kmlStr.value = beforeStr + Placemark + currentPoint + afterStr
- // 更新点位序号
- const pointIndexList = getKmlParams(kmlStr.value, true, {
- name: 'index',
- findRegx: '([\\s\\S]*?)',
- mode: 'g',
- })
- pointIndexList?.forEach((pintIndex: string, index: number) => {
- kmlStr.value.replace(pintIndex, `<wpml:index>${index}</wpml:index>`)
- })
- }
- }
- const edit = (settingParmas: any = {}, keyName?: string, isKeyWpml: boolean = false) => {
- Object.keys(settingParmas).forEach((key: string) => {
- const regxVal: any = getKmlParams(kmlStr.value, true, {
- name: key,
- findRegx: '([\\s\\S]*?)',
- })
- const str = regxVal[1]
- if (str) {
- if (key === 'globalHeight') {
- const regxVal: any = getKmlParams(kmlStr.value, true, {
- name: 'height',
- findRegx: '([\\s\\S]*?)',
- mode: 'g',
- })
- const ellipsoidHeightRegx = getKmlParams(kmlStr.value, true, {
- name: 'ellipsoidHeight',
- findRegx: '([\\s\\S]*?)',
- mode: 'g',
- }) || ['']
- // 文件中的海拔高度
- const takeOffRefPointAGLHeightRegxStr = getKmlParams(kmlStr.value, true, {
- name: 'takeOffRefPointAGLHeight',
- findRegx: '([\\s\\S]*?)',
- }) || ['', '0']
- const posterHeight = Number(takeOffRefPointAGLHeightRegxStr[1])
- // 获取每个点是否使用全局高度
- const useGlobalHeightRegStr = getKmlParams(kmlStr.value, true, {
- name: 'useGlobalHeight',
- findRegx: '([\\s\\S]*?)',
- mode: 'g',
- }) || ['', '0']
- regxVal.forEach((heightStr: string, index: number) => {
- // 使用正则取值
- const getUseGlobalHeightValStr = getKmlParams(useGlobalHeightRegStr[index], true, {
- name: 'useGlobalHeight',
- findRegx: '([\\s\\S]*?)',
- }) || ['', '0']
- const isGlobalHeight = Boolean(Number(getUseGlobalHeightValStr[1]))
- if (isGlobalHeight) {
- // 替换height
- const rstr = generateKmlFormat({ height: settingParmas[key] })
- const rEllipsoidHeightStr = generateKmlFormat({ ellipsoidHeight: settingParmas[key] - posterHeight })
- kmlStr.value = kmlStr.value.replace(heightStr, rstr)
- kmlStr.value = kmlStr.value.replace(ellipsoidHeightRegx[index], rEllipsoidHeightStr)
- // 替换
- } else {
- const heightRegxVal: any = getKmlParams(heightStr, true, {
- name: 'height',
- findRegx: '([\\s\\S]*?)',
- })
- }
- })
- }
- const replaceStr = generateKmlFormat({ [key]: settingParmas[key] })
- kmlStr.value = kmlStr.value.replace(regxVal[0], replaceStr)
- } else {
- console.warn('没有找到对应的属性')
- }
- })
- }
+ }
const save = () => {
console.log('存在问题')
}
+ const generateXML = <T>(xmlJson: T) => {
+ return JSONToXML(xmlJson)
+ }
+
+ // 将wpmz/template.kml解析传来json转换回去,重新复制以便于后续绘制
+ watch(() => template.value, (newobj) => {
+ const xmlString = JSONToXML(newobj)
+ kmlStr.value = xmlString
+ }, {
+ deep: true
+ })
+
return {
init,
create,
- // write,
- writePoint,
- edit,
save,
+ generateXML
}
}
-export { kmlStr, fileAuthor }
+export { kmlStr, fileAuthor, template, waylines }
export default useKmzTsa
--
Gitblit v1.9.3