From 4bd6f36030948afc34e031fc9f4b8f8cc3dde6f9 Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Sat, 19 Apr 2025 19:03:51 +0800
Subject: [PATCH] feat:useTaskWayline使用方式调整
---
src/components/CurrentTaskDetails/RealTimeMap.vue | 59 +-------------
src/hooks/useTaskWayline/useTaskWayline.js | 155 ++++++++++++++++++++++++++++++++------
src/views/SignMachineNest/MachineRight/InspectionRaskList.vue | 21 ++--
3 files changed, 143 insertions(+), 92 deletions(-)
diff --git a/src/components/CurrentTaskDetails/RealTimeMap.vue b/src/components/CurrentTaskDetails/RealTimeMap.vue
index 207d811..625104c 100644
--- a/src/components/CurrentTaskDetails/RealTimeMap.vue
+++ b/src/components/CurrentTaskDetails/RealTimeMap.vue
@@ -6,9 +6,9 @@
import AmapMercatorTilingScheme from '@/utils/cesium/AmapMercatorTilingScheme'
import { Cartesian3, Terrain, Viewer } from 'cesium'
import { addBlueFilter } from '@/utils/cesium/common'
-import CreateFrustum from '@/utils/cesium/frustum/CreateFrustum'
-import aircraftGltf from '@/assets/gltf/aircraft.gltf'
import { useTaskWayline } from '@/hooks/useTaskWayline/useTaskWayline'
+
+const { init: initTaskWayline } = useTaskWayline()
const imageryProvider_ammapSL = new Cesium.UrlTemplateImageryProvider({
url: 'https://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}',
@@ -55,60 +55,9 @@
taskDetailsViewer?.value.camera.setView({
destination: Cartesian3.fromDegrees(115.763819, 28.787374, 5000),
})
+
+ initTaskWayline(taskDetailsViewer.value, deviceOsdInfo, taskDetails)
}
-
-let viewInfoFrustum
-// 设置视椎
-const setCreateFrustum = () => {
- const host = deviceOsdInfo.value?.data?.host
- if (!host) return
- viewInfoFrustum?.clear()
- if ([14, 0].includes(host.mode_code)) return
- const attitude_head = 180 + host.attitude_head
- const gimbal_pitch = 90 - Number(host?.payloads[0]?.gimbal_pitch) || 0
- viewInfoFrustum = new CreateFrustum(taskDetailsViewer?.value, {
- position: {
- longitude: host.longitude,
- latitude: host.latitude,
- altitude: host.height,
- },
- width: 30,
- height: 30,
- fov: 20.0,
- near: 3.0,
- far: 250.0,
- roll: gimbal_pitch,
- pitch: 0,
- heading: attitude_head,
- })
-}
-
-function setAircraftGltf() {
- const host = deviceOsdInfo.value?.data?.host
- const aircraftEntity = taskDetailsViewer.value.entities.getById('aircraftGltf')
- const position = Cesium.Cartesian3.fromDegrees(host.longitude, host.latitude, host.height)
- if (aircraftEntity) {
- aircraftEntity.position = new Cesium.ConstantPositionProperty(position)
- return
- }
- taskDetailsViewer.value.entities.add({
- id: 'aircraftGltf',
- position,
- model: {
- uri: aircraftGltf, // 或 .glb
- scale: 1.0, // 缩放比例
- minimumPixelSize: 64, // 最小像素尺寸(保证模型远处可见)
- maximumScale: 128, // 最大缩放(可选)
- },
- })
-}
-
-watch(deviceOsdInfo, () => {
- setCreateFrustum()
- setAircraftGltf()
-})
-
-useTaskWayline(taskDetailsViewer, taskDetails)
const removeMap = () => {
taskDetailsViewer?.value.entities.removeAll()
diff --git a/src/hooks/useTaskWayline/useTaskWayline.js b/src/hooks/useTaskWayline/useTaskWayline.js
index fe73342..506c46c 100644
--- a/src/hooks/useTaskWayline/useTaskWayline.js
+++ b/src/hooks/useTaskWayline/useTaskWayline.js
@@ -2,7 +2,7 @@
* @Author: shuishen 1109946754@qq.com
* @Date: 2025-04-19 14:24:34
* @LastEditors: shuishen 1109946754@qq.com
- * @LastEditTime: 2025-04-19 17:47:46
+ * @LastEditTime: 2025-04-19 19:00:36
* @FilePath: \command-center-dashboard\src\hooks\useTaskWayline\useTaskWayline.js
* @Description:
*
@@ -18,9 +18,12 @@
import * as Cesium from 'cesium'
import { Cartesian3 } from 'cesium'
+import aircraftGltf from '@/assets/gltf/aircraft.gltf'
+import CreateFrustum from '@/utils/cesium/frustum/CreateFrustum'
-export function useTaskWayline (viewer, taskDetails) {
- const newViewer = isRef(viewer) ? viewer : ref(viewer)
+export function useTaskWayline () {
+ let viewer = null
+ let deviceOsdInfo = null
// 解析kmz文件
const parsingFiles = async url => {
@@ -30,7 +33,7 @@
const waylinesXMLObj = removeTextKey(waylinesXMLJSON.Folder)
if (!waylinesXMLObj.Placemark.length) return
const allPoint = waylinesXMLObj.Placemark.map(item => item.Point.coordinates.split(','))
- flyVisual(allPoint, newViewer.value)
+ flyVisual(allPoint, viewer)
drawWayline(waylinesXMLObj)
}
@@ -43,7 +46,7 @@
removeEntitys()
// 起点
- newViewer.value.entities.add({
+ viewer.entities.add({
id: 'drone-job-wayline-start',
position: positions[0],
billboard: {
@@ -54,7 +57,7 @@
})
// 终点
- newViewer.value.entities.add({
+ viewer.entities.add({
id: 'drone-job-wayline-end',
position: positions[positions.length - 1],
billboard: {
@@ -66,7 +69,7 @@
})
// 路径线
- newViewer.value.entities.add({
+ viewer.entities.add({
id: 'drone-job-wayline-polyline',
polyline: {
width: 4,
@@ -82,34 +85,134 @@
})
}
- watch(
- [
- () => taskDetails.value?.way_lines?.length,
- () => newViewer.value
- ],
- (
- [wayLinesLength, curViewer],
- ) => {
- if (wayLinesLength && wayLinesLength > 0 && curViewer) {
- parsingFiles(taskDetails.value.way_lines[0].url)
- }
- },
- { immediate: true }
- )
- const removeEntitys = () => {
- const entitiesIDs = newViewer.value?.entities.values.map(i => i.id)
- Array.isArray(entitiesIDs) && entitiesIDs.forEach(item => {
- item.includes('drone-job-wayline-') && newViewer.value?.entities.removeById(item)
+
+ let viewInfoFrustum
+ // 设置视椎
+ const setCreateFrustum = (host) => {
+ if (!host) return
+ viewInfoFrustum?.clear()
+
+ const attitude_head = 180 + host?.attitude_head
+ const gimbal_pitch = 90 - Number(host?.payloads[0]?.gimbal_pitch) || 0
+
+ viewInfoFrustum = new CreateFrustum(viewer, {
+ position: {
+ longitude: host?.longitude,
+ latitude: host?.latitude,
+ altitude: host?.height,
+ },
+ width: 30,
+ height: 30,
+ fov: 20.0,
+ near: 3.0,
+ far: 250.0,
+ roll: gimbal_pitch,
+ pitch: 0,
+ heading: attitude_head,
})
}
+ function setAircraftGltf () {
+ const host = deviceOsdInfo.value?.data?.host
+
+ console.log(host, 1111111111)
+
+ const aircraftEntity = viewer?.entities.getById('aircraftGltf')
+ const position = Cesium.Cartesian3.fromDegrees(host?.longitude, host?.latitude, host?.height)
+ if (aircraftEntity) {
+ aircraftEntity.position = new Cesium.ConstantPositionProperty(position)
+ return
+ }
+
+ let entity = viewer?.entities.add({
+ id: 'aircraftGltf',
+ position,
+ label: {},
+ model: {
+ uri: aircraftGltf, // 或 .glb
+ scale: 1.0, // 缩放比例
+ minimumPixelSize: 64, // 最小像素尺寸(保证模型远处可见)
+ maximumScale: 128, // 最大缩放(可选)
+ },
+ })
+
+ const homeDistance = Math.floor(host?.home_distance) || 0
+ const distance = 1
+ const arrivalTime = 1
+ const totalDistance = 1
+ const usedTime = 1
+
+ entity.label = new Cesium.LabelGraphics({
+ text: `距离机场水平距离:${homeDistance}m\n距离下一个航点:${Math.round(
+ distance,
+ )}m\n预计到达下一航点时间:${arrivalTime}\n本次飞行时间:${usedTime}\n本次航线平面里程:${Math.round(
+ totalDistance,
+ )}m`,
+ font: '13px monospace',
+ showBackground: true,
+ horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
+ verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
+ disableDepthTestDistance: Number.POSITIVE_INFINITY,
+ pixelOffset: new Cesium.Cartesian2(0, -40),
+ show: true,
+ })
+ }
+
+ const mapEntityRemove = () => {
+ viewInfoFrustum?.clear()
+
+ viewer?.entities.removeById('aircraftGltf')
+ }
+
+ const removeEntitys = () => {
+ const entitiesIDs = viewer?.entities.values.map(i => i.id)
+
+ Array.isArray(entitiesIDs) && entitiesIDs.forEach(item => {
+ item.includes('drone-job-wayline-') && viewer?.entities.removeById(item)
+ })
+ }
+
+ const init = (v, wsInfo, taskDetails) => {
+ console.log(v, wsInfo, taskDetails)
+
+ viewer = v
+ deviceOsdInfo = computed(() => wsInfo.value?.device_osd)
+
+ watch(taskDetails,
+ () => {
+ if (taskDetails.value?.way_lines?.length) {
+ parsingFiles(taskDetails.value.way_lines[0].url)
+ }
+ },
+ { immediate: true }
+ )
+
+ watch(deviceOsdInfo, () => {
+ const host = deviceOsdInfo.value?.data?.host
+
+ if (!host) return
+
+ if ([14, 0].includes(host?.mode_code)) {
+ mapEntityRemove()
+ return
+ }
+
+ setCreateFrustum(host)
+ setAircraftGltf()
+ }
+ )
+ }
+
onBeforeUnmount(() => {
+ mapEntityRemove()
removeEntitys()
})
return {
- removeEntitys
+ init,
+ removeEntitys,
+ mapEntityRemove,
}
}
\ No newline at end of file
diff --git a/src/views/SignMachineNest/MachineRight/InspectionRaskList.vue b/src/views/SignMachineNest/MachineRight/InspectionRaskList.vue
index a93548d..693cfa6 100644
--- a/src/views/SignMachineNest/MachineRight/InspectionRaskList.vue
+++ b/src/views/SignMachineNest/MachineRight/InspectionRaskList.vue
@@ -78,7 +78,6 @@
import { useStore } from 'vuex'
import { useTaskWayline } from '@/hooks/useTaskWayline/useTaskWayline'
import { useTaskDetails } from '@/hooks/useTaskDetails/useTaskDetails'
-import { useTaskViewInfo } from '@/hooks/useTaskViewInfo/useTaskViewInfo'
import { useDroneWS } from '@/hooks/useDroneWS'
let viewer = null
@@ -211,6 +210,14 @@
}
}
+watch([() => tabIndex.value, () => tableList.value], async ([newTabIndex, newTableList]) => {
+ if (newTabIndex == 1 && newTableList.length > 0) {
+ await getTaskDetails(newTableList[0].wayline_job_info_id)
+ }
+})
+
+const { init: initTaskWayline, removeEntitys } = useTaskWayline()
+
onMounted(async () => {
viewer = window.$viewer
@@ -338,17 +345,9 @@
// job_id: '7aa5222c-2f8b-401e-b6ba-d6a550398829',
// },
// ]
+
+ initTaskWayline(viewer, wsInfo, taskDetails)
})
-
-watch([() => tabIndex.value, () => tableList.value], async ([newTabIndex, newTableList]) => {
- if (newTabIndex == 1 && newTableList.length > 0) {
- await getTaskDetails(newTableList[0].wayline_job_info_id)
- }
-})
-
-const { removeEntitys } = useTaskWayline(viewer || window.$viewer, taskDetails)
-
-useTaskViewInfo(viewer || window.$viewer, wsInfo, removeEntitys)
</script>
<style lang="scss" scoped>
--
Gitblit v1.9.3