| | |
| | | <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> |
| | |
| | | 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(() => { |
| | |
| | | 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 |
| | | } |
| | |
| | | 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) { |