From 698eb73f035405124be45070712bf2edb5fbb361 Mon Sep 17 00:00:00 2001
From: chenyao <1219716595@qq.com>
Date: Thu, 25 Sep 2025 14:32:21 +0800
Subject: [PATCH] feat:日志文件新增轨迹功能
---
src/views/monitor/log/flightLog.vue | 134 ++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 132 insertions(+), 2 deletions(-)
diff --git a/src/views/monitor/log/flightLog.vue b/src/views/monitor/log/flightLog.vue
index ce69d6c..459d90c 100644
--- a/src/views/monitor/log/flightLog.vue
+++ b/src/views/monitor/log/flightLog.vue
@@ -67,6 +67,7 @@
<el-table-column label="操作" width="300" align="center">
<template #default="scope">
<el-button icon="el-icon-view" type="text" @click="handleDetail(scope.row)">查看</el-button>
+ <el-button icon="el-icon-view" type="text" @click="handleLineTrajectory(scope.row)">轨迹</el-button>
<el-button icon="el-icon-delete" type="text" @click="handleDelete(scope.row)">删除</el-button>
<!-- <el-button type="text" @click="handleStar(scope.row)">-->
<!-- <el-icon><Star /></el-icon>-->
@@ -86,7 +87,6 @@
</div>
<el-dialog class="ztzf-dialog" append-to-body v-model="isShowView" title="查看"
:width="pxToRem(1000)" :close-on-click-modal="false" :destroy-on-close="true">
- <!-- <div class="content"> -->
<el-table border :data="tableDataDetails" height="466">
<el-table-column label="序号" type="index" width="60"></el-table-column>
<el-table-column prop="flight_type" label="飞行类型" align="center" show-overflow-tooltip></el-table-column>
@@ -100,8 +100,10 @@
:page-sizes="[10, 20, 30, 40, 50, 100]" :size="size" v-model:current-page="detailParams.current"
v-model:page-size="detailParams.size" layout="total, sizes, prev, pager, next, jumper" :total="detailTotal"
@size-change="handleSizeChangeDetails" @current-change="handleCurrentChangeDetails" />
- <!-- </div> -->
</div>
+ </el-dialog>
+ <el-dialog class="ztzf-dialog" append-to-body v-model="isShowFlyMapView" title="查看" :width="pxToRem(1000)" :close-on-click-modal="false" :destroy-on-close="true">
+ <div id="flyMap" class="ztzf-cesium"></div>
</el-dialog>
</template>
<script setup>
@@ -109,8 +111,22 @@
// import { flightLogPage } from '@/api/airspace/airspace';
import { downloadXls } from '@/utils/util';
import { exportBlob } from '@/api/common'
+import * as Cesium from 'cesium';
+import { PublicCesium } from '@/utils/cesium/publicCesium';
import { ElMessage, ElMessageBox, ElLoading } from 'element-plus';
import { Delete, Search } from '@element-plus/icons-vue';
+import { ArrowLineMaterialProperty } from '@/utils/cesium/Material'
+import { flyVisual } from '@/utils/cesium/mapUtil'
+import rwqfdImg from '@/assets/images/signMachineNest/rwqfd.png'
+import endPointImg from '@/assets/images/EndPointicon.png'
+import { nextTick } from 'vue';
+
+let publicCesiumInstance = null;
+let viewer = null;
+const viewInstance = shallowRef(null);
+const homeViewer = shallowRef(null);
+
+let previewDataSource = null
const total = ref(0)
let rangTime = ref([])
@@ -127,6 +143,8 @@
let tableList = ref([])
let isShowView = ref(false)
+
+let isShowFlyMapView = ref(false)
let tabType = ref('全部')
@@ -181,12 +199,120 @@
function handleDetail(row) {
isShowView.value = true
detailParams.value.current = 1
+ detailParams.value.size = 10
detailParams.value.flightId = row.id
detailTotal.value = 0
droneFlightLogInfoPage(detailParams.value).then(res => {
tableDataDetails.value = res.data.data.records
detailTotal.value = res.data.data.total
})
+}
+// 地图
+const initMap = () => {
+ if (!document.getElementById('flyMap')) {
+ return;
+ }
+ publicCesiumInstance = new PublicCesium({
+ dom: 'flyMap',
+ flatMode: false,
+ terrain: true,
+ layerMode: 4,
+ contour: false,
+ });
+ homeViewer.value = publicCesiumInstance.getViewer();
+ viewer = publicCesiumInstance.getViewer();
+ viewInstance.value = publicCesiumInstance;
+ viewer.scene.globe.depthTestAgainstTerrain = true;
+ viewInstance.value.switchContour(true);
+};
+// 预览轨迹
+let arrowLineMaterialProperty = new ArrowLineMaterialProperty({
+ color: new Cesium.Color(128 / 255, 215 / 255, 255 / 255, 1),
+ directionColor: new Cesium.Color(1, 1, 1, 1),
+ outlineColor: new Cesium.Color(1, 1, 1, 1),
+ outlineWidth: 0,
+ speed: 5,
+})
+async function handleLineTrajectory(row) {
+ isShowFlyMapView.value = true;
+
+ // 确保地图容器已渲染
+ await nextTick();
+
+ // 确保地图初始化完成
+ // if (!viewer) {
+ // initMap();
+ // }
+ initMap();
+
+ detailParams.value.size = 9999;
+ detailParams.value.flightId = row.id;
+
+ const res = await droneFlightLogInfoPage(detailParams.value);
+ tableDataDetails.value = res.data.data.records;
+
+ // 清除现有数据源(如果有)
+ if (previewDataSource) {
+ viewer.dataSources.remove(previewDataSource);
+ }
+
+ // 创建新数据源
+ previewDataSource = new Cesium.CustomDataSource('previewDataSource');
+ await viewer.dataSources.add(previewDataSource);
+
+ // 确保数据有效
+ const validPositions = tableDataDetails.value
+ .filter(i => i.longitude && i.latitude && i.height)
+ .map(i => Cesium.Cartesian3.fromDegrees(
+ Number(i.longitude),
+ Number(i.latitude),
+ Number(i.height)
+ ));
+
+ console.log(validPositions, tableDataDetails.value)
+
+ if (validPositions.length > 0) {
+ // previewDataSource.entities.add({
+ // polyline: {
+ // width: 4,
+ // positions: validPositions,
+ // material: arrowLineMaterialProperty,
+ // clampToGround: false,
+ // },
+ // });
+ // 起点
+ previewDataSource.entities.add({
+ position: validPositions[0],
+ billboard: {
+ image: rwqfdImg,
+ width: 50,
+ height: 50,
+ },
+ })
+ // 终点
+ previewDataSource.entities.add({
+ position: validPositions[validPositions.length - 1],
+ billboard: {
+ image: new Cesium.ConstantProperty(endPointImg),
+ width: 30,
+ height: 30,
+ verticalOrigin: Cesium.VerticalOrigin.BOTTOM, // 底部对齐
+ },
+ })
+
+
+ flyVisual({
+ positionsData: tableDataDetails.value.map(i => [
+ Number(i.longitude),
+ Number(i.latitude),
+ Number(i.height)
+ ]),
+ viewer,
+ multiple: 20
+ });
+ } else {
+ console.warn('No valid positions data');
+ }
}
// 分页
function handleSizeChangeDetails(val) {
@@ -390,4 +516,8 @@
}
}
}
+#flyMap {
+ height: 500px;
+ width: 100%;
+}
</style>
\ No newline at end of file
--
Gitblit v1.9.3