From 4b57dc340f08f7c517a5eb255275b91785724c53 Mon Sep 17 00:00:00 2001
From: chenyao <1219716595@qq.com>
Date: Mon, 10 Feb 2025 18:21:21 +0800
Subject: [PATCH] 增加app设备定位和激光扫射定位以及目标高度和测距距离

---
 src/views/hooks/initPointWayline.ts |    1 
 src/assets/images/laser.png         |    0 
 src/views/DronePilotDetails.vue     |   70 +++++++++++++++++++++--
 src/views/hooks/droneFly.ts         |   75 +++++++++++++++++++++++--
 src/views/components/comPass.vue    |   14 ++--
 src/views/DronePilotList.vue        |   12 ---
 src/assets/images/me.png            |    0 
 7 files changed, 142 insertions(+), 30 deletions(-)

diff --git a/src/assets/images/laser.png b/src/assets/images/laser.png
new file mode 100644
index 0000000..70bb603
--- /dev/null
+++ b/src/assets/images/laser.png
Binary files differ
diff --git a/src/assets/images/me.png b/src/assets/images/me.png
new file mode 100644
index 0000000..cecd0a0
--- /dev/null
+++ b/src/assets/images/me.png
Binary files differ
diff --git a/src/views/DronePilotDetails.vue b/src/views/DronePilotDetails.vue
index 17d0c63..8df2a83 100644
--- a/src/views/DronePilotDetails.vue
+++ b/src/views/DronePilotDetails.vue
@@ -90,7 +90,7 @@
   loadLAYER,
 } = cesiumOperation()
 
-// const vConsole = new VConsole();
+const vConsole = new VConsole();
 
 let globalViewer = null
 
@@ -156,6 +156,10 @@
 const imageUrl = new URL('@/assets/images/norecord.png', import.meta.url).href
 
 const imageMapSrc = new URL('@/assets/images/mapdock.png', import.meta.url).href
+
+const meMapSrc = new URL('@/assets/images/me.png', import.meta.url).href
+
+const jgbMapSrc = new URL('@/assets/images/jgb.png', import.meta.url).href
 
 const mapswitching = new URL('@/assets/images/mapswitching.png', import.meta.url).href
 
@@ -354,7 +358,6 @@
       break
     }
     case EBizCode.DeviceOsd: {
-      // console.log('低调点',payload)
       store.commit('SET_DEVICE_INFO', payload.data)
       store.commit('SET_WS_MESSAGE', payload)
       break
@@ -429,7 +432,6 @@
     // await _init('cesiumContainerBigMap');
     // await getWrjSsLx();
   } else {
-    console.log('是否进来',landscapeBox)
     isLandscape.value = false;
     updateScreenSize()
     landscapeBox.style.display = 'inherit';
@@ -449,6 +451,7 @@
 const getWrjSsLx = () => {
   getWaylineFile(sbInfo.sn).then((res:any) => {
     if (res.code != 200) return
+    console.log('草草草草', res.data)
     ssLinePath.value = res.data
     globalViewer = window.cesiumViewer
     // 先有航线,再飞行
@@ -493,10 +496,7 @@
     })
   } else {
     // 当机场坐标存在时,判断获取的位置与机场坐标位置是否一致,若不是,重新更新位置
-    let dornePoint = cartesian3Convert(
-      getEntityById('drone_dock')._position._value,
-       window.cesiumViewer,
-    )
+    let dornePoint = cartesian3Convert(getEntityById('drone_dock')._position._value, window.cesiumViewer,)
     getLongOk = getLnglatDist(
       dornePoint.longitude,
       dornePoint.latitude,
@@ -521,6 +521,7 @@
 }, {deep: true})
 
 watch(() => store.state.wsMessage, (newValue, oldValue) => {
+  // 控制台报 Expected longitude to be typeof number, actual typeof was undefined 是因为这里没有及时拿到longitude数据
   viewDroneInfo.longitude = newValue?.longitude
   viewDroneInfo.latitude = newValue?.latitude
   viewDroneInfo.elevation = Number(newValue?.elevation.toFixed(2)) + droneHeight.value
@@ -535,6 +536,7 @@
   const xmlStr = await fileInfoObj['wpmz/template.kml']
   const xmlJson = XMLToJSON(xmlStr)?.['Document']
   const placemark = xmlJson.Folder.Placemark
+  console.log('看看航线值', placemark.Polygon)
   if (placemark?.Polygon) {
     // return 'planar'
     planarWayline(ssLinePath.value, sbInfo.longitude, sbInfo.latitude)
@@ -544,6 +546,58 @@
   }
 }
 
+const me_latitude = ref(0);
+const me_longitude = ref(0);
+// const loading = ref(true);
+// const error = ref(null);
+// 获取自身定位
+const getLocation = () => {
+  if (window.cesiumViewer == null) return 
+  if (navigator.geolocation) {
+    navigator.geolocation.getCurrentPosition(
+      (position) => {
+        console.log('333',position.coords.latitude)
+        console.log('333',position.coords.longitude)
+        me_latitude.value =  position.coords.latitude;
+        me_longitude.value = position.coords.longitude;
+        // loading.value = false;
+        // 开始给自己定位
+        getLnglatAltitude(me_longitude.value, me_latitude.value,  window.cesiumViewer).then(res => {
+          removeById('me_coordinate')
+          window.cesiumViewer.entities.add({
+            position: globalCesium.Cartesian3.fromDegrees(
+              me_longitude.value,
+              me_latitude.value,
+              res.height,
+            ),
+            id: 'me_coordinate',
+            billboard: {
+              image: meMapSrc,
+              outlineWidth: 0,
+              width: 36,
+              height: 36,
+              scale: 1.0,
+            }
+          })
+          // window.cesiumViewer.scene.camera.setView({
+          //   destination: globalCesium.Cartesian3.fromDegrees(
+          //     Number(me_longitude),
+          //     Number(me_latitude),
+          //     10000.0,
+          //   ),
+          // })
+          // droneHeight.value = res.height
+        })
+      },
+      (err) => {
+        console.log('定位有误')
+      }
+    );
+  } else {
+    console.log('您的浏览器不支持地理定位')
+  }
+};
+
 onMounted(async () => {
   window.addEventListener('orientationchange', checkOrientation);
   window.addEventListener('resize', checkOrientation); // 兼容某些设备
@@ -552,6 +606,8 @@
   await nextTick();
   await _init('cesiumContainerBigMap');
   await getWrjSsLx();
+
+  await getLocation()
   
 });
 
diff --git a/src/views/DronePilotList.vue b/src/views/DronePilotList.vue
index 7f36a79..b1f0a92 100644
--- a/src/views/DronePilotList.vue
+++ b/src/views/DronePilotList.vue
@@ -57,7 +57,7 @@
 // 存储设备值
 let osdVisible = reactive<any>({})
 
-// const vConsole = new VConsole();
+const vConsole = new VConsole();
 
 // 点击信息详情
 const infoClick = (data:any) => {
@@ -101,16 +101,6 @@
 }
 
 onMounted(() => {
-  
-  // navigator.geolocation.getCurrentPosition(
-  //       (success) => {
-  //         console.log(success.coords.longitude, '经纬度')
-  //         position.value = {
-  //           latitude: success.coords.latitude,
-  //           longitude: success.coords.longitude,
-  //         };
-  //       })
-
   init()
   // 设置定时器,每隔 3 秒刷新一次数据
   intervalId = setInterval(init, 3000);
diff --git a/src/views/components/comPass.vue b/src/views/components/comPass.vue
index bf2f683..ac1771d 100644
--- a/src/views/components/comPass.vue
+++ b/src/views/components/comPass.vue
@@ -164,6 +164,7 @@
       content: var(--before-content);
       position: absolute;
       top: -1rem;
+      left: -0.5rem;
       font-size: 10px;
       font-family: none;
     }
@@ -181,9 +182,9 @@
         height: 0;
         top: 0rem;
         left: 0.3rem;
-        border-top: solid 3px transparent;
-        border-left: solid 3px #1fa3f6;
-        border-bottom: solid 3px transparent;
+        border-top: solid 0.18rem transparent;
+        border-left: solid 0.18rem #1fa3f6;
+        border-bottom: solid 0.18rem transparent;
       }
     }
   }
@@ -192,6 +193,7 @@
       content: var(--right-content);
       position: absolute;
       top: -1rem;
+      left: -0.3rem;
       font-size: 10px;
       font-family: none;
     }
@@ -209,10 +211,10 @@
         &::before {
           content: '';
           position: absolute;
-          left: -0.3rem;
+          right: 0.3rem;
           top: 0;
-          border: 3px solid transparent {
-            right: solid 3px #1fa3f6;
+          border: 0.18rem solid transparent {
+            right: solid 0.18rem #1fa3f6;
           }
         }
       }
diff --git a/src/views/hooks/droneFly.ts b/src/views/hooks/droneFly.ts
index 98a25ed..d0391ab 100644
--- a/src/views/hooks/droneFly.ts
+++ b/src/views/hooks/droneFly.ts
@@ -10,6 +10,8 @@
 // 无人机实体
 let droneEntity = null
 
+// 激光实体
+let laserEntity = null
 export function droneFly () {
   const store = useMyStore()
   let deviceInfo = {} // 无人机信息
@@ -35,11 +37,8 @@
     deviceInfo = data.deviceInfo[`${sn}`]
     // 机场信息
     dockInfo = data.dockInfo[`${dockSn}`]
-    // console.log('是吧',dockInfo)
-    // console.log('踩踩踩', deviceInfo)
-    // console.log('踩踩踩', dockInfo)
     viewDroneInfo = viewDroneInfo
-    // console.log('1111', deviceInfo.longitude)
+    console.log('打印我想看的',viewDroneInfo.longitude)
     // 当前飞行任务创建时间
     if (data.currentType === EDeviceTypeName.Aircraft && deviceInfo) {
       const droneLngLat = {
@@ -55,7 +54,6 @@
           } else {
             initCreateFrustum(deviceInfo, viewDroneInfo)
           }
-          // console.log('2222', viewDroneInfo.longitude)
           addFlyGltf(
             viewDroneInfo.longitude,
             viewDroneInfo.latitude,
@@ -66,7 +64,16 @@
             dockInfo,
             ssLinePath
           )
-          // console.log('3333', viewDroneInfo.longitude)
+          addFlyLaser(
+            viewDroneInfo.longitude,
+            viewDroneInfo.latitude,
+            deviceInfo.height,
+            deviceInfo.payloads[0],
+            deviceInfo.attitude_head,
+            deviceInfo,
+            dockInfo,
+            ssLinePath
+          )
           setelCamera(
             viewDroneInfo.longitude,
             viewDroneInfo.latitude,
@@ -90,6 +97,16 @@
           initCreateFrustum(deviceInfo, viewDroneInfo)
           console.log('4444', viewDroneInfo.longitude)
           addFlyGltf(
+            viewDroneInfo.longitude,
+            viewDroneInfo.latitude,
+            deviceInfo.height,
+            deviceInfo.payloads[0],
+            deviceInfo.attitude_head,
+            deviceInfo,
+            dockInfo,
+            ssLinePath
+          )
+          addFlyLaser(
             viewDroneInfo.longitude,
             viewDroneInfo.latitude,
             deviceInfo.height,
@@ -169,6 +186,52 @@
     }
   }
 
+  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)
+    const position = globalCesium.Cartesian3.fromDegrees(
+      payloads.measure_target_longitude, payloads.measure_target_latitude, 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.show = true
+  
+      window.cesiumViewer.scene.requestRender()
+    } else {
+      laserEntity = window.cesiumViewer.entities.add({
+        position,
+        id: 'laser_coordinate',
+        billboard: {
+          image: imgLaser,
+          outlineWidth: 0,
+          width: 36,
+          height: 36,
+          scale: 1.0,
+        }
+      })
+    }
+    // 增加激光扫射信息
+    laserEntity.label = new globalCesium.LabelGraphics({
+      text: `目标海拔:${Math.ceil(payloads.measure_target_altitude)}m\n测距距离:${Math.round(
+        Math.ceil(payloads.measure_target_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,
+    })
+  }
+
   function addFlyGltf (lng:any, lat:any, alt:any, payloads:any, attitude_head:any, deviceInfo:any, dockInfo:any, ssLinePath:any) {
     const { gimbal_pitch, gimbal_yaw } = payloads
     const position = globalCesium.Cartesian3.fromDegrees(
diff --git a/src/views/hooks/initPointWayline.ts b/src/views/hooks/initPointWayline.ts
index dbaf7ff..2773164 100644
--- a/src/views/hooks/initPointWayline.ts
+++ b/src/views/hooks/initPointWayline.ts
@@ -102,6 +102,7 @@
             dornePoint.longitude,
             dornePoint.latitude,
           )
+          console.log('看看值', waylinePosition[index])
           if (getLongOk < 20) {
             setting = {
               id: 'route_point_' + index,

--
Gitblit v1.9.3