From 58aeb1b4b7fef38bfbba99231c46d1c6572e8712 Mon Sep 17 00:00:00 2001
From: chenyao <1219716595@qq.com>
Date: Fri, 14 Feb 2025 17:32:28 +0800
Subject: [PATCH] 修改一版
---
src/views/hooks/droneFly.ts | 172 +++++++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 143 insertions(+), 29 deletions(-)
diff --git a/src/views/hooks/droneFly.ts b/src/views/hooks/droneFly.ts
index d0391ab..e862907 100644
--- a/src/views/hooks/droneFly.ts
+++ b/src/views/hooks/droneFly.ts
@@ -5,6 +5,7 @@
import IndexedDBService from '@/utils/indexDB'
import CreateFrustum from '@/utils/cesium/frustum/CreateFrustum'
import { useMyStore } from '@/store'
+import { getTwoPointInfo } from '@/api/manage'
const { getEntityById, removeById, globalCesium, addLeftClickEvent, removeLeftClickEvent, flyTo } = cesiumOperation()
// 无人机实体
@@ -12,6 +13,10 @@
// 激光实体
let laserEntity = null
+
+// 两点之间线实体
+let twoLineEntity = null
+let myAppEntity = null;
export function droneFly () {
const store = useMyStore()
let deviceInfo = {} // 无人机信息
@@ -30,6 +35,16 @@
let lastTime = null
let viewInfoFrustum = null
+ // 手机设备定位
+ let me_latitude = 0;
+ let me_longitude = 0;
+ let me_altitude = 0;
+ // 扫射定位
+ let measure_target_longitude = 0;
+ let measure_target_latitude = 0;
+ let measure_target_altitude = 0;
+
+
async function initDock(data:any, sn:any, dockSn:any, workspaceId:any, ssLinePath:any, viewDroneInfo:any) {
// 获取workspaceId
wId = workspaceId
@@ -38,7 +53,7 @@
// 机场信息
dockInfo = data.dockInfo[`${dockSn}`]
viewDroneInfo = viewDroneInfo
- console.log('打印我想看的',viewDroneInfo.longitude)
+ console.log('导致地图不显示原因1',viewDroneInfo.longitude)
// 当前飞行任务创建时间
if (data.currentType === EDeviceTypeName.Aircraft && deviceInfo) {
const droneLngLat = {
@@ -64,16 +79,12 @@
dockInfo,
ssLinePath
)
- addFlyLaser(
- viewDroneInfo.longitude,
- viewDroneInfo.latitude,
- deviceInfo.height,
- deviceInfo.payloads[0],
- deviceInfo.attitude_head,
- deviceInfo,
- dockInfo,
- ssLinePath
- )
+ let domain = sessionStorage.getItem('domain')
+ if (domain !== '0') {
+ addFlyLaser(
+ deviceInfo.payloads[0]
+ )
+ }
setelCamera(
viewDroneInfo.longitude,
viewDroneInfo.latitude,
@@ -95,7 +106,6 @@
} else {
if (deviceInfo.mode_code && [3, 4, 5, 9, 10].includes(deviceInfo.mode_code)) {
initCreateFrustum(deviceInfo, viewDroneInfo)
- console.log('4444', viewDroneInfo.longitude)
addFlyGltf(
viewDroneInfo.longitude,
viewDroneInfo.latitude,
@@ -106,16 +116,12 @@
dockInfo,
ssLinePath
)
- addFlyLaser(
- viewDroneInfo.longitude,
- viewDroneInfo.latitude,
- deviceInfo.height,
- deviceInfo.payloads[0],
- deviceInfo.attitude_head,
- deviceInfo,
- dockInfo,
- ssLinePath
- )
+ let domain = sessionStorage.getItem('domain')
+ if (domain !== '0') {
+ addFlyLaser(
+ deviceInfo.payloads[0]
+ )
+ }
}
}
const imgRightBlue = new URL('@/assets/images/arrow-right-pink.png', import.meta.url).href
@@ -188,18 +194,24 @@
const imgLaser = new URL('@/assets/images/laser.png', import.meta.url).href
// 增加激光扫射点
- function addFlyLaser(lng:any, lat:any, alt:any, payloads:any, attitude_head:any, deviceInfo:any, dockInfo:any, ssLinePath:any) {
- console.log('哒哒哒', payloads)
+ function addFlyLaser(payloads:any) {
+ const startPosition = globalCesium.Cartesian3.fromDegrees(
+ me_longitude, me_latitude, 0
+ )
const position = globalCesium.Cartesian3.fromDegrees(
payloads.measure_target_longitude, payloads.measure_target_latitude, payloads.measure_target_altitude
)
+ measure_target_longitude = payloads.measure_target_longitude;
+ measure_target_latitude = payloads.measure_target_latitude;
+ measure_target_altitude = payloads.measure_target_altitude;
+
if (laserEntity && laserEntity != null) {
laserEntity.position = new globalCesium.CallbackProperty(function () {
return position
}, false)
- laserEntity.orientation = new globalCesium.CallbackProperty(function () {
- return orientation
- }, false)
+ // laserEntity.orientation = new globalCesium.CallbackProperty(function () {
+ // return orientation
+ // }, false)
laserEntity.show = true
@@ -217,6 +229,20 @@
}
})
}
+ removeById('route_two_line')
+ twoLineEntity = window.cesiumViewer.entities.add({
+ id: 'route_two_line',
+ polyline: {
+ positions: new globalCesium.CallbackProperty(() => [startPosition, position], false),
+ width: 5,
+ material: new globalCesium.PolylineDashMaterialProperty({
+ color: globalCesium.Color.YELLOW, // 虚线颜色
+ dashLength: 6.0, // 虚线段的长度
+ }),
+ zIndex: 1,
+ clampToGround: false,
+ }
+ })
// 增加激光扫射信息
laserEntity.label = new globalCesium.LabelGraphics({
text: `目标海拔:${Math.ceil(payloads.measure_target_altitude)}m\n测距距离:${Math.round(
@@ -286,7 +312,6 @@
async function createDroneEntityLabel (entity:any, deviceInfo:any, dockInfo:any, ssLinePath:any) {
deviceInfo = deviceInfo
if (currentTaskCreateTime === null) return
- console.log('77777', deviceInfo?.basic_osd?.longitude)
if (!deviceInfo?.longitude && !deviceInfo?.latitude) return
if (deviceInfo.mode_code !== 5) {
currentTaskCreateTime = null
@@ -538,7 +563,96 @@
heading: attitude_head,
})
}
+
+ // 获取手机定位和激光发射定位的高度和距离
+ function getTwoHeightWidth(workspaceId:String) {
+ getTwoPointInfo(workspaceId,me_latitude,me_longitude,measure_target_latitude,measure_target_longitude).then((res:any) => {
+ const heightDifference = res.data.heightDifference
+ const distance = res.data.distance
+ // 增加激光扫射信息
+ myAppEntity.label = new globalCesium.LabelGraphics({
+ text: `高度:${Math.ceil(heightDifference)}m\n距离:${Math.round(
+ Math.ceil(distance),
+ )}m`,
+ font: '13px monospace',
+ showBackground: true,
+ horizontalOrigin: globalCesium.HorizontalOrigin.CENTER,
+ verticalOrigin: globalCesium.VerticalOrigin.BOTTOM,
+ disableDepthTestDistance: Number.POSITIVE_INFINITY,
+ pixelOffset: new globalCesium.Cartesian2(0, -40),
+ show: true,
+ })
+ })
+ }
+
+ const meMapSrc = new URL('@/assets/images/me.png', import.meta.url).href
+ // 获取手机设备定位
+ function getPhoneLocation(value:Boolean, workspaceId:String) {
+ if (window.cesiumViewer == null) return
+ // 创建一个箭头实体
+ removeById('me_dw')
+ myAppEntity = window.cesiumViewer.entities.add({
+ id: 'me_dw',
+ position: globalCesium.Cartesian3.fromDegrees(0, 0, 0), // 初始位置
+ billboard: {
+ image: meMapSrc, // 箭头图片路径
+ width: 30,
+ height: 30,
+ alignedAxis: globalCesium.Cartesian3.UNIT_Z, // 对齐轴
+ },
+ // orientation: new globalCesium.CallbackProperty(() => {
+ // return globalCesium.Transforms.headingPitchRollQuaternion(
+ // myAppEntity.position.getValue(window.cesiumViewer.clock.currentTime),
+ // new globalCesium.HeadingPitchRoll(heading, 0, 0) // 设置朝向
+ // );
+ // }, false),
+ });
+
+ let heading = 0; // 初始朝向
+ // 获取设备朝向
+ // if (window.DeviceOrientationEvent) {
+ // window.addEventListener('deviceorientation', (event) => {
+ // if (event.alpha !== null) {
+ // heading = globalCesium.Math.toRadians(event.alpha); // 将 alpha 转换为弧度
+ // }
+ // });
+ // } else {
+ // console.log('手机不支持.');
+ // }
+
+ // 获取设备位置
+ if (navigator.geolocation) {
+ navigator.geolocation.watchPosition((position) => {
+ me_longitude = position.coords.longitude;
+ me_latitude = position.coords.latitude;
+ me_altitude = position.coords.altitude || 0;
+
+ // 更新箭头实体的位置
+ myAppEntity.position = globalCesium.Cartesian3.fromDegrees(me_longitude, me_latitude, me_altitude);
+ if (value) {
+ // 将相机定位到设备位置 只有点击图标才可以执行这里
+ window.cesiumViewer.camera.setView({
+ destination: globalCesium.Cartesian3.fromDegrees(me_longitude, me_latitude, me_altitude + 1000), // 相机高度
+ // orientation: {
+ // heading: heading, // 相机朝向
+ // pitch: globalCesium.Math.toRadians(-90), // 俯视角度
+ // roll: 0,
+ // },
+ });
+ }
+ // 查看两条线直接距离和高度
+ // getTwoHeightWidth(workspaceId)
+ }, (error) => {
+ console.error('定位有误:', error);
+ });
+ } else {
+ console.log('手机不支持.');
+ }
+ }
+
+
return {
- initDock
+ initDock,
+ getPhoneLocation,
}
}
\ No newline at end of file
--
Gitblit v1.9.3