GuLiMmo
2024-03-19 aec00ecc093be803860c8675cbe1c4c776a7cb4e
src/components/g-map/DroneControlPanel.vue
@@ -13,53 +13,57 @@
                        <Button :ghost="!flightController" size="small" @click="onClickFightControl">
                            {{ flightController ? '退出控制' : '进入控制' }}
                        </Button>
<!--                      <Button  size="small" @click="flyByPoints">-->
<!--                        图斑飞行-->
<!--                      </Button>-->
                    </div>
                </div>
                <div class="row">
                    <div class="drone-control-direction">
                        <Button size="small" ghost @mousedown="onMouseDown(KeyCode.KEY_Q)" @onmouseup="onMouseUp">
                        <Button size="small" ghost @mousedown="onMouseDown(KeyCode.KEY_Q)" @mouseup="onMouseUp">
                            <template #icon>
                                <UndoOutlined/>
                            </template>
                            <span class="word">Q</span>
                        </Button>
                        <Button size="small" ghost @mousedown="onMouseDown(KeyCode.KEY_W)" @onmouseup="onMouseUp">
                        <Button size="small" ghost @mousedown="onMouseDown(KeyCode.KEY_W)" @mouseup="onMouseUp">
                            <template #icon>
                                <UpOutlined/>
                            </template>
                            <span class="word">W</span>
                        </Button>
                        <Button size="small" ghost @mousedown="onMouseDown(KeyCode.KEY_E)" @onmouseup="onMouseUp">
                        <Button size="small" ghost @mousedown="onMouseDown(KeyCode.KEY_E)" @mouseup="onMouseUp">
                            <template #icon>
                                <RedoOutlined/>
                            </template>
                            <span class="word">E</span>
                        </Button>
                        <Button size="small" ghost @mousedown="onMouseDown(KeyCode.ARROW_UP)" @onmouseup="onMouseUp">
                        <Button size="small" ghost @mousedown="onMouseDown(KeyCode.ARROW_UP)" @mouseup="onMouseUp">
                            <template #icon>
                                <ArrowUpOutlined/>
                            </template>
                        </Button>
                        <br/>
                        <Button size="small" ghost @mousedown="onMouseDown(KeyCode.KEY_A)" @onmouseup="onMouseUp">
                        <Button size="small" ghost @mousedown="onMouseDown(KeyCode.KEY_A)" @mouseup="onMouseUp">
                            <template #icon>
                                <LeftOutlined/>
                            </template>
                            <span class="word">A</span>
                        </Button>
                        <Button size="small" ghost @mousedown="onMouseDown(KeyCode.KEY_S)" @onmouseup="onMouseUp">
                        <Button size="small" ghost @mousedown="onMouseDown(KeyCode.KEY_S)" @mouseup="onMouseUp">
                            <template #icon>
                                <DownOutlined/>
                            </template>
                            <span class="word">S</span>
                        </Button>
                        <Button size="small" ghost @mousedown="onMouseDown(KeyCode.KEY_D)" @onmouseup="onMouseUp">
                        <Button size="small" ghost @mousedown="onMouseDown(KeyCode.KEY_D)" @mouseup="onMouseUp">
                            <template #icon>
                                <RightOutlined/>
                            </template>
                            <span class="word">D</span>
                        </Button>
                        <Button size="small" ghost @mousedown="onMouseDown(KeyCode.ARROW_DOWN)" @onmouseup="onMouseUp">
                        <Button size="small" ghost @mousedown="onMouseDown(KeyCode.ARROW_DOWN)" @mouseup="onMouseUp">
                            <template #icon>
                                <ArrowDownOutlined/>
                            </template>
@@ -313,13 +317,19 @@
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'
import { cesiumOperation } from '/@/hooks/use-cesium-tsa'
import * as Cesium from 'cesium'
import { start } from 'repl'
const props = defineProps<{
    sn: string,
    deviceInfo: DeviceInfoType,
    payloads: null | PayloadInfo[],
    modelValue: Boolean,
}>()
const cesiumFunc = cesiumOperation()
const store = useMyStore()
const clientId = computed(() => {
@@ -340,11 +350,19 @@
    cmd: cmdItem.cmdKey,
    action: cmdItem.action
  }, false)
  if (result && flightController.value) {
  // if (result && flightController.value) {
  //   message.success('返航成功')
  //   exitFlightCOntrol()
  // } else {
  //   message.warn('请先进入控制!')
  // }
  // cmdItem.loading = false
  if (result) {
    message.success('返航成功')
  }
  // 退出飞行控制
  if (result && flightController.value) {
    exitFlightCOntrol()
  } else {
    message.warn('请先进入控制!')
  }
  cmdItem.loading = false
}
@@ -474,6 +492,116 @@
  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 deviceSn = props.deviceInfo.dock.basic_osd.sub_device?.device_sn
  const jsonPath = 'src/main/resources/jkj(1).json'
  const sn = props.sn
  console.log(payloadSelectInfo, '-------------')
  const payloadIndex = payloadSelectInfo.payloadIndex
  // const jsonData = await parseJsonFile('../src/assets/jsonData/jkj(1).json')
  // 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, jsonPath, radius, deviceSn, payloadIndex).then(res => {
    const targetPoint = res.data || []
    // 机场位置
    const startPoint = {
      lon: props.deviceInfo.dock.basic_osd.longitude,
      lat: props.deviceInfo.dock.basic_osd.latitude
    }
    targetPoint.unshift(startPoint)
    console.log('targetPoint====', targetPoint)
    // 获取到点之后在图上绘点
    targetPoint.forEach((point: { lon: number; lat: number }, index: number) => {
      console.log(point)
      const setting = {
        longitude: point.lon,
        latitude: point.lat,
        point: {
          pixelSize: 8,
          outlineWidth: 2,
          color: Cesium.Color.RED,
          outlineColor: Cesium.Color.BLACK,
        },
        label: {
          text: '位置' + (index + 1),
          outlineWidth: 20,
          font: '14px sans-serif',
          heightReference: 80,
          pixelOffset: new Cesium.Cartesian2(0, -35),
          fillColor: Cesium.Color.BLACK
        },
        id: 'target' + index,
      }
      cesiumFunc.addPoint(setting)
      // 根据点画连线
      let polylineSetting = {}
      if (index === (targetPoint.length - 1)) {
        polylineSetting = {
          polyline: {
            positions: Cesium.Cartesian3.fromDegreesArrayHeights([
              point.lon,
              point.lat,
              0,
              targetPoint[0].lon,
              targetPoint[0].lat,
              0
            ]),
            width: 10,
            arcType: Cesium.ArcType.NONE,
            material: new Cesium.PolylineArrowMaterialProperty(
              Cesium.Color.RED
            ),
          },
          id: 'fxTarget' + index
        }
      } else {
        polylineSetting = {
          polyline: {
            positions: Cesium.Cartesian3.fromDegreesArrayHeights([
              point.lon,
              point.lat,
              0,
              targetPoint[index + 1].lon,
              targetPoint[index + 1].lat,
              0
            ]),
            width: 10,
            arcType: Cesium.ArcType.NONE,
            material: new Cesium.PolylineArrowMaterialProperty(
              Cesium.Color.RED
            ),
          },
          id: 'fxTarget' + index
        }
      }
      cesiumFunc.addPolyline(polylineSetting)
    })
  })
}
// 进入飞行控制
async function enterFlightControl () {
  if (!clientId.value) {