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/pages/page-web/projects/components/route-edit/index.vue | 76 ++++++++++++++++++++++++++------------
1 files changed, 52 insertions(+), 24 deletions(-)
diff --git a/src/pages/page-web/projects/components/route-edit/index.vue b/src/pages/page-web/projects/components/route-edit/index.vue
index e3a05a0..ba5110c 100644
--- a/src/pages/page-web/projects/components/route-edit/index.vue
+++ b/src/pages/page-web/projects/components/route-edit/index.vue
@@ -73,16 +73,16 @@
</template>
<script setup lang="ts">
-import _ from 'lodash'
+import _, { template } from 'lodash'
import * as Cesium from 'cesium'
import setting from './components/setting.vue'
-import useKmzTsa, { kmlStr } from '/@/utils/cesium/use-kmz-tsa'
+import useKmzTsa, { kmlStr, template as xmlTemplate } from '/@/utils/cesium/use-kmz-tsa'
import { ref, reactive, defineEmits, defineProps, watch, onMounted } from 'vue'
import { ArrowLeftOutlined, CaretDownOutlined, SaveOutlined } from '@ant-design/icons-vue'
import { cesiumOperation } from '/@/hooks/use-cesium-tsa'
import { useMyStore } from '/@/store'
import ImageTrailMaterial from '/@/utils/cesium/ImageTrailMaterial'
-import useMapDraw, { kmlEntities as globalEntities } from '/@/utils/cesium/use-map-draw'
+import useMapDraw, { kmlEntities as globalEntities, selectPointIndex as pointIdx } from '/@/utils/cesium/use-map-draw'
import { getKmlParams } from '/@/utils/cesium/kmz'
import { getHaeHeight } from '/@/utils/cesium/mapUtils'
const store = useMyStore()
@@ -207,8 +207,10 @@
global.$viewer.entities.remove(nextPointEntity)
kmlEntities.value.forEach((entity: Cesium.Entity | any, i: number) => {
entity.billboard.image = createBillboard(i + 1, '#61d396')
+ entity.label.show = false
})
selectPointIndex.value = null
+ pointIdx.value = null
return
}
if (prevPointEntity) {
@@ -242,11 +244,14 @@
kmlEntities.value.forEach((entity: Cesium.Entity | any, i: number) => {
if (i === index) {
entity.billboard.image = createBillboard(index + 1, '#f3be4f')
+ entity.label.show = true
} else {
entity.billboard.image = createBillboard(i + 1, '#61d396')
+ entity.label.show = false
}
})
selectPointIndex.value = index
+ pointIdx.value = index
}
// 添加右键事件,弹出窗口
@@ -331,59 +336,82 @@
const longitude = Cesium.Math.toDegrees(c2Postion.longitude)
const latitude = Cesium.Math.toDegrees(c2Postion.latitude)
// 获取全局高度
- const globalHeight: any = getKmlParams(kmlStr.value, true, {
- name: 'globalHeight',
- findRegx: '([\\s\\S]*?)',
- })
- const height = Number(globalHeight[1])
+ const globalHeight: string = xmlTemplate.value.Folder.globalHeight['#text']
+ const height = Number(globalHeight)
+ // 右键点击的位置
const createPointPosition = Cesium.Cartesian3.fromDegrees(longitude, latitude, height)
const entity: Cesium.Entity = global.$viewer.entities.add({
position: createPointPosition,
})
- const posterHeightRegStr = getKmlParams(kmlStr.value, true, {
- name: 'takeOffRefPointAGLHeight',
- findRegx: '([\\s\\S]*?)',
- }) || ['', 0]
- const posterHeight = Number(posterHeightRegStr[1])
- // 加入kml文件中
+ // 起飞点海拔
+ const takeOffRefPointAGLHeight = xmlTemplate.value.missionConfig.takeOffRefPointAGLHeight
+ const posterHeight = Number(takeOffRefPointAGLHeight['#text'])
+ // 当前点位个数
+ const points = xmlTemplate.value.Folder.Placemark
+ // 加入到解析的JSON对象中
const setting = {
Point: {
- coordinates: `${longitude},${latitude}`,
+ coordinates: { '#text': `${longitude.toFixed(6)},${latitude.toFixed(6)}` },
},
- index: tragetPointArr.value.length,
- height,
- ellipsoidHeight: height - posterHeight,
+ index: { '#text': points.length },
+ height: { '#text': height },
+ ellipsoidHeight: { '#text': height - posterHeight },
+ isRisky: { '#text': 0 },
+ useGlobalHeadingParam: { '#text': 1 },
+ useGlobalHeight: { '#text': 1 },
+ useGlobalSpeed: { '#text': 1 },
+ useGlobalTurnParam: { '#text': 1 },
+ useStraightLine: { '#text': 1 },
+ waypointHeadingParam: {
+ waypointHeadingAngle: { '#text': 0 },
+ waypointHeadingMode: { '#text': 'followWayline' },
+ waypointHeadingPathMode: { '#text': 'followBadArc' },
+ waypointHeadingPoiIndex: { '#text': 0 },
+ waypointPoiPoint: { '#text': '0.000000,0.000000,0.000000' },
+ },
+ waypointSpeed: { '#text': 10 },
+ waypointTurnParam: {
+ waypointTurnDampingDist: { '#text': 0.2 },
+ waypointTurnMode: { '#text': 'toPointAndStopWithDiscontinuityCurvature' },
+ },
}
removeAllDataSource()
removeAllPoint()
if (className === 'finally-point') {
- kmzUtils.writePoint(setting, 'add')
globalEntities.value.push(entity)
+ xmlTemplate.value.Folder.Placemark.push(setting)
tragetPointArr.value.push({
position: createPointPosition,
eventList: [],
+ isUseGlobalHeight: Boolean(setting.useGlobalHeight['#text']),
})
}
if (className === 'add-prev-point') {
- kmzUtils.writePoint(setting, 'prev', selectPointIndex.value)
globalEntities.value.splice(selectPointIndex.value, 0, entity)
+ xmlTemplate.value.Folder.Placemark.splice(selectPointIndex.value, 0, setting)
tragetPointArr.value.splice(selectPointIndex.value, 0, {
position: createPointPosition,
eventList: [],
+ isUseGlobalHeight: Boolean(setting.useGlobalHeight['#text']),
})
}
if (className === 'add-next-point') {
- kmzUtils.writePoint(setting, 'next', selectPointIndex.value)
const index = _.cloneDeep(selectPointIndex.value + 1)
globalEntities.value.splice(index, 0, entity)
+ xmlTemplate.value.Folder.Placemark.splice(index, 0, setting)
tragetPointArr.value.splice(index, 0, {
position: createPointPosition,
eventList: [],
+ isUseGlobalHeight: Boolean(setting.useGlobalHeight['#text']),
})
}
- mapDraw.drawWayline(globalEntities.value, kmlStr.value)
- // clearCesiumMap()
- // createMapMarker(undefined, [...kmlEntities.value, entity])
+ // 更新点位序号
+ xmlTemplate.value.Folder.Placemark.forEach((placemark: { index: { [x: string]: number } }, index: number) => {
+ placemark.index['#text'] = index
+ })
+
+ const xmlStr = kmzUtils.generateXML(xmlTemplate.value)
+ mapDraw.drawWayline(globalEntities.value, xmlStr)
})
}
--
Gitblit v1.9.3