From c0327c583bedec8e9421e2cba9b0447c0e06a494 Mon Sep 17 00:00:00 2001
From: guoshilong <123456>
Date: Mon, 13 Nov 2023 10:16:18 +0800
Subject: [PATCH] 图斑加载

---
 src/hooks/use-cesium-tsa.ts                |   14 +++---
 src/api/wayline.ts                         |   14 +++++++
 src/pages/page-web/projects/tsa.vue        |    1 
 src/utils/geo-utils.ts                     |   13 ++++++
 src/components/g-map/DroneControlPanel.vue |   37 ++++++++++++++++++
 5 files changed, 72 insertions(+), 7 deletions(-)

diff --git a/src/api/wayline.ts b/src/api/wayline.ts
index 31b3c69..a58b3a2 100644
--- a/src/api/wayline.ts
+++ b/src/api/wayline.ts
@@ -205,3 +205,17 @@
   const result = await request.get(url)
   return result.data
 }
+
+export interface Point{
+  lon:number,
+  lat:number,
+  height?:number,
+  distance?:number
+}
+
+export const flyByArea = async function (sn:string,dockPoint:Point,areaList:any[],radius:number): Promise<IWorkspaceResponse<any>> {
+  const url = `${HTTP_PREFIX}/workspaces/${sn}/jobs/flyByArea`
+  const result = await request.post(url,{dockPoint:dockPoint,areaList:areaList,radius:radius})
+  return result.data
+}
+
diff --git a/src/components/g-map/DroneControlPanel.vue b/src/components/g-map/DroneControlPanel.vue
index bf5c592..549ed53 100644
--- a/src/components/g-map/DroneControlPanel.vue
+++ b/src/components/g-map/DroneControlPanel.vue
@@ -13,6 +13,10 @@
                         <Button :ghost="!flightController" size="small" @click="onClickFightControl">
                             {{ flightController ? '退出控制' : '进入控制' }}
                         </Button>
+
+                      <Button  size="small" @click="flyByPoints">
+                        图斑飞行
+                      </Button>
                     </div>
                 </div>
                 <div class="row">
@@ -313,6 +317,8 @@
 import DroneControlInfoPanel from './DroneControlInfoPanel.vue'
 import { noDebugCmdList as baseCmdList, DeviceCmdItem, DeviceCmd } from '/@/types/device-cmd'
 import { useDockControl } from './use-dock-control'
+import { flyByArea, Point } from '/@/api/wayline'
+import { parseJsonFile } from '/@/utils/geo-utils'
 
 const props = defineProps<{
     sn: string,
@@ -482,6 +488,37 @@
   enterFlightControl()
 }
 
+// 根据图斑飞行
+async function flyByPoints () {
+  // 半径m
+  const radius = 7000
+  const dockPoint:Point = reactive({
+    lon: props.deviceInfo.dock.basic_osd.longitude,
+    lat: props.deviceInfo.dock.basic_osd.latitude
+  })
+  const jsonData = await parseJsonFile('../src/assets/jsonData/图斑_FeaturesToJSON(1).json')
+  const sn = props.sn
+  const features = jsonData.features
+  const list = []
+
+  features.forEach(feature => {
+    const areaList = []
+    feature.geometry.coordinates[0].forEach(areaPoint => {
+      console.log('areaPoint:', areaPoint)
+      const point = {
+        lon: areaPoint[0],
+        lat: areaPoint[1]
+      }
+      areaList.push(point)
+    })
+    list.push(areaList)
+  })
+
+  flyByArea(sn, dockPoint, list, radius).then(res => {
+    console.log(res, '----------------')
+  })
+}
+
 // 进入飞行控制
 async function enterFlightControl () {
   if (!clientId.value) {
diff --git a/src/hooks/use-cesium-tsa.ts b/src/hooks/use-cesium-tsa.ts
index 354e786..36fd161 100644
--- a/src/hooks/use-cesium-tsa.ts
+++ b/src/hooks/use-cesium-tsa.ts
@@ -140,8 +140,8 @@
     }
   }
 
-  function removeAllDataSource() {
-    viewer.dataSources.removeAll();
+  function removeAllDataSource () {
+    viewer.dataSources.removeAll()
   }
 
   // 清除所有标记点
@@ -254,18 +254,18 @@
     }
   }
 
-  //加载json文件
-  const loadGeoJson = (url:string)=>{
+  // 加载json文件
+  const loadGeoJson = (url:string) => {
     const option = {
       stroke: Cesium.Color.HOTPINK,
       fill: Cesium.Color.PINK,
       strokeWidth: 3,
     }
-    const promise = Cesium.GeoJsonDataSource.load(url,option)
+    const promise = Cesium.GeoJsonDataSource.load(url, option)
 
-    promise.then(dataSource=>{
+    promise.then(dataSource => {
       console.log(dataSource)
-      viewer.dataSources.add(dataSource);
+      viewer.dataSources.add(dataSource)
     })
   }
 
diff --git a/src/pages/page-web/projects/tsa.vue b/src/pages/page-web/projects/tsa.vue
index 1ad63e6..646bbe5 100644
--- a/src/pages/page-web/projects/tsa.vue
+++ b/src/pages/page-web/projects/tsa.vue
@@ -292,6 +292,7 @@
 import { EHmsLevel } from '/@/types/enums'
 import { cesiumOperation } from '/@/hooks/use-cesium-tsa'
 import { convertTimestampToDate, getDateFromTimestamp, isToday, setTodayTime } from '/@/utils/time'
+import { parseJsonFile } from '/@/utils/geo-utils'
 let droneEntity: any
 
 const { appContext } = getCurrentInstance()
diff --git a/src/utils/geo-utils.ts b/src/utils/geo-utils.ts
new file mode 100644
index 0000000..f950168
--- /dev/null
+++ b/src/utils/geo-utils.ts
@@ -0,0 +1,13 @@
+import axios from 'axios'
+
+export function parseJsonFile(url: string) {
+
+  return new Promise((resolve,reject)=>{
+      axios.get(url)
+          .then(function (response) {
+              console.log(response.data);
+              resolve(response.data)
+          })
+  })
+
+}

--
Gitblit v1.9.3