From 6d3a25365554f9c7c98b8a58fba7b7aa9b3f9e9f Mon Sep 17 00:00:00 2001
From: guoshilong <123456>
Date: Tue, 14 Nov 2023 17:33:00 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/demo' into demo

---
 src/components/GMap.vue     |   59 ++++++++++++++++++++---------
 src/hooks/use-cesium-tsa.ts |   53 +++++++++++++++++++-------
 2 files changed, 78 insertions(+), 34 deletions(-)

diff --git a/src/components/GMap.vue b/src/components/GMap.vue
index d0f79ca..c398f0d 100644
--- a/src/components/GMap.vue
+++ b/src/components/GMap.vue
@@ -150,7 +150,8 @@
             <a-col span="6">
               <a-tooltip title="风速">
                 <span>W.S</span>
-                <span class="ml5">{{ deviceInfo.device.wind_speed === str ? str : (deviceInfo.device.wind_speed / 10).toFixed(2) + ' m/s' }}</span>
+                <span class="ml5">{{ deviceInfo.device.wind_speed === str ? str : (deviceInfo.device.wind_speed /
+                  10).toFixed(2) + ' m/s' }}</span>
               </a-tooltip>
             </a-col>
           </a-row>
@@ -174,26 +175,27 @@
     <div class="osd-panel fz12" v-if="osdVisible.visible">
       <div class="fz16 pr5 flex-align-center flex-row flex-justify-between"
         style="border-bottom: 1px solid #515151; height: 10%;">
-        <div class="flex-align-center flex-justify-center"  style="display: flex;">
+        <div class="flex-align-center flex-justify-center" style="display: flex;">
           <div v-if="osdVisible.latest_wayline_job" class="flex-column flex-align-center flex-justify-center">
-              <div class="task_wrapper">
-                <div class="task_content task_content_way" v-if="deviceInfo.device && deviceInfo.device?.mode_code === 5">
-                  <div class="task_status">
-                    <ContainerOutlined />
-                    <span>执行任务中</span>
-                  </div>
+            <div class="task_wrapper">
+              <div class="task_content task_content_way" v-if="deviceInfo.device && deviceInfo.device?.mode_code === 5">
+                <div class="task_status">
+                  <ContainerOutlined />
+                  <span>执行任务中</span>
                 </div>
-                <div class="task_content" v-else>
-                  <div class="task_status">
-                    <ContainerOutlined />
-                    <span>待执行</span>
-                  </div>
-                  <div class="task_info">{{osdVisible.latest_wayline_job.is_later ? '今天': '明天'}}{{convertTimestampToDate(osdVisible.latest_wayline_job.begin_time, 'hh:mm')}}</div>
-                </div>
-                <div class="task_title">{{osdVisible.latest_wayline_job.name}}</div>
               </div>
+              <div class="task_content" v-else>
+                <div class="task_status">
+                  <ContainerOutlined />
+                  <span>待执行</span>
+                </div>
+                <div class="task_info">{{ osdVisible.latest_wayline_job.is_later ? '今天' :
+                  '明天' }}{{ convertTimestampToDate(osdVisible.latest_wayline_job.begin_time, 'hh:mm') }}</div>
+              </div>
+              <div class="task_title">{{ osdVisible.latest_wayline_job.name }}</div>
+            </div>
           </div>
-          <span :style="[osdVisible.latest_wayline_job?'margin-left:20px':'']">{{ osdVisible.gateway_callsign }}</span>
+          <span :style="[osdVisible.latest_wayline_job ? 'margin-left:20px' : '']">{{ osdVisible.gateway_callsign }}</span>
         </div>
         <div>
           <a style="color: white;" @click="closeOsdWindow">
@@ -779,6 +781,7 @@
 import { useConnectMqtt } from './g-map/use-connect-mqtt'
 import Cesium from './cesiumMap/cesium.vue'
 import { convertTimestampToDate } from '/@/utils/time'
+import { cesiumOperation } from '/@/hooks/use-cesium-tsa'
 export default defineComponent({
   components: {
     BorderOutlined,
@@ -808,6 +811,7 @@
   name: 'GMap',
   props: {},
   setup () {
+    const cesium = cesiumOperation()
     const useMouseToolHook = useMouseTool()
     const useGMapManageHook = useGMapManage()
     const deviceTsaUpdateHook = deviceTsaUpdate()
@@ -1233,6 +1237,21 @@
         deep: true
       }
     )
+    watch(() => openDroneControl.value, (is: boolean) => {
+      if (!is) {
+        cesium.removeById('rangeEllipse')
+        return
+      }
+      // 设置无人机范围
+      // cesium.removeById('rangeEllipse')
+      const { dock: { basic_osd } } = deviceInfo
+      const ellipseSetting = {
+        longitude: basic_osd.longitude,
+        latitude: basic_osd.latitude
+      }
+      cesium.addEllipse(ellipseSetting)
+      cesium.flyTo(ellipseSetting, 5, 20000)
+    })
 
     function draw (type: MapDoodleType, bool: boolean) {
       state.currentType = type
@@ -1600,10 +1619,12 @@
   min-height: 2px;
   border-radius: 2px;
 }
+
 .task_wrapper {
   display: flex;
   align-items: center;
   font-size: 12px;
+
   .task_content {
     background-color: #41bbfa;
     padding: 2px 4px;
@@ -1612,9 +1633,9 @@
   .task_content_way {
     background-color: #19be6b;
   }
+
   .task_title {
     margin-left: 5px;
     font-size: 14px;
   }
-}
-</style>
+}</style>
diff --git a/src/hooks/use-cesium-tsa.ts b/src/hooks/use-cesium-tsa.ts
index 36fd161..f7a9c07 100644
--- a/src/hooks/use-cesium-tsa.ts
+++ b/src/hooks/use-cesium-tsa.ts
@@ -37,25 +37,31 @@
   pitch?: number
   roll?: number
 }
+
+interface ellipseOption {
+  longitude: number
+  latitude: number
+}
+
 // 定义全局的viewer变量防止重复生成
 // eslint-disable-next-line no-var
 var viewer: Cesium.Viewer | null = null
-export function cesiumOperation () {
+export function cesiumOperation() {
   let handler: Cesium.ScreenSpaceEventHandler
   const TDT_Token = 'c6eea7dad4fa1e2d1e32ec0e7c9735db'
   // 天地图Key
   // 天地图地图
   const TDT_IMG_C = 'https://{s}.tianditu.gov.cn/img_c/wmts?service=wmts&request=GetTile&version=1.0.0' +
-      '&LAYER=img&tileMatrixSet=c&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}' +
-      '&style=default&format=tiles&tk=' + TDT_Token
+    '&LAYER=img&tileMatrixSet=c&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}' +
+    '&style=default&format=tiles&tk=' + TDT_Token
   // 天地图注记
   const TDT_ZJ = 'https://{s}.tianditu.gov.cn/cia_c/wmts?service=wmts&request=GetTile&version=1.0.0' +
-      '&LAYER=cia&tileMatrixSet=c&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}' +
-      '&style=default&format=tiles&tk=' + TDT_Token
+    '&LAYER=cia&tileMatrixSet=c&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}' +
+    '&style=default&format=tiles&tk=' + TDT_Token
   // 标准地图注记
   const TID_STAND = 'https://{s}.tianditu.gov.cn/vec_w/wmts?service=wmts&request=GetTile&version=1.0.0' +
-  '&LAYER=img&tileMatrixSet=c&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}' +
-  '&style=default&format=tiles&tk=' + TDT_Token
+    '&LAYER=img&tileMatrixSet=c&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}' +
+    '&style=default&format=tiles&tk=' + TDT_Token
   // 天地图图层变量
   const imageryProvider_tdt = new Cesium.WebMapTileServiceImageryProvider({
     url: TDT_IMG_C,
@@ -145,7 +151,7 @@
   }
 
   // 清除所有标记点
-  function removeAllPoint () {
+  function removeAllPoint() {
     if (viewer) {
       viewer?.entities?.removeAll()
     }
@@ -162,6 +168,22 @@
       id: pointOption.id,
     })
   }
+  // 添加半径为7公里的范围的圆
+  const addEllipse = ({ longitude, latitude }: ellipseOption) => {
+    if (!longitude && !latitude) return
+    const position = Cesium.Cartesian3.fromDegrees(longitude, latitude)
+    viewer?.entities.add({
+      position,
+      id: 'rangeEllipse',
+      name: 'rangeEllipse',
+      ellipse: {
+        semiMinorAxis: 7000.0,
+        semiMajorAxis: 7000.0,
+        material: Cesium.Color.CORNFLOWERBLUE.withAlpha(0.3),
+      }
+    })
+    console.log(viewer?.entities)
+  }
 
   // 添加线段
   const addPolyline = (pointOption: pointOption) => {
@@ -172,7 +194,7 @@
   }
 
   // 通过点ID删除
-  function removeById (id:string) {
+  function removeById(id: string) {
     viewer?.entities.removeById(id)
     const pointEntity = viewer?.entities.getById(id)
     if (pointEntity && pointEntity !== undefined) {
@@ -180,12 +202,12 @@
     }
   }
   // 通过点ID获取实体
-  function getEntityById (id:string) {
+  function getEntityById(id: string) {
     const pointEntity = viewer?.entities.getById(id)
     return pointEntity
   }
   // 更新图片实体位置
-  function updateEntityPosition (longitude:number, latitude:number, id:string, params?:any) {
+  function updateEntityPosition(longitude: number, latitude: number, id: string, params?: any) {
     const entity = getEntityById(id) as Cesium.Entity
     const position = Cesium.Cartesian3.fromDegrees(longitude, latitude)
     const heading = Cesium.Math.toRadians(-params.heading)
@@ -195,7 +217,7 @@
     }
   }
   // 飞行 flyto
-  const flyTo = (pointOption: pointOption, time: number = 4, height:number = 3000) => {
+  const flyTo = (pointOption: pointOption, time: number = 4, height: number = 3000) => {
     if (!pointOption.longitude && !pointOption.latitude) return
     const destination = Cesium.Cartesian3.fromDegrees(pointOption.longitude, pointOption.latitude, height)
     const duration = time
@@ -230,20 +252,20 @@
   }
 
   // 地图放大
-  const zoonIn = (range:number) => {
+  const zoonIn = (range: number) => {
     // 获取当前视角的高度
     const cameraHeight = viewer?.camera.positionCartographic.height
     const amout = Cesium.Math.sign(range) * cameraHeight / Math.log(cameraHeight)
     viewer?.camera.zoomIn(amout)
   }
   // 地图缩小
-  const zoonOut = (range:number) => {
+  const zoonOut = (range: number) => {
     const cameraHeight = viewer?.camera.positionCartographic.height
     const amout = Cesium.Math.sign(range) * cameraHeight / Math.log(cameraHeight)
     viewer?.camera.zoomOut(amout)
   }
   // 生成或删除路网图层
-  const roadPattern = (flag:boolean) => {
+  const roadPattern = (flag: boolean) => {
     if (store.state.common.mapSetting.mode === 0) return
     const imageryLayers = viewer?.scene.imageryLayers
     const tdtZwImg_c = imageryLayers?._layers.find(v => v.imageryProvider._layer === 'tdtZwImg_c')
@@ -312,6 +334,7 @@
     getEntityById,
     updateEntityPosition,
     addPolyline,
+    addEllipse,
     loadGeoJson,
     removeAllDataSource
   }

--
Gitblit v1.9.3