刘妍 2 months ago
commit 21fed071e5

@ -20,6 +20,7 @@ enum Api{
GetAirLineList = '/api/Manage/GetAirLineList',
AddAirLine = '/api/Manage/AddAirLine',
EditAirLine = '/api/Manage/EditAirLine',
GetAirLine = '/api/Manage/GetAirLine',
DeleteAirLine = '/api/Manage/DeleteAirLine',
UploadXmlFile = '/api/Manage/UploadXmlFile/upload'
@ -74,6 +75,11 @@ export function editAirLine(params){
return defHttp.post({ url: Api.EditAirLine, params });
}
export function getAirLine(params) {
return defHttp.get({ url: Api.GetAirLine, params });
}
export function uploadXmlFile(params){
return defHttp.post({ url: Api.UploadXmlFile, params,headers: {'Content-Type': 'multipart/form-data' }});
}

@ -33,8 +33,16 @@ import * as turf from '@turf/turf'
import airPolygon from './airPolygon.vue'
import airPointConfig from './airPointConfig.vue'
const props = defineProps(["airRoute","flyToTherePosition","wayline","waylineInfo"]);
const props = defineProps(["airRoute","flyToTherePosition","wayline","waylineInfo","workPlanFormShow"]);
watch(
()=> props.workPlanFormShow,
(newVal,oldVal)=>{
if(!newVal){
clearAllLayer();
}
}
)
watch(
()=> props.airRoute,
(newVal,oldVal)=>{
@ -54,8 +62,9 @@ watch(
// 线
const generatePreviewPoint = (placemark)=>{
//
startPosition.value = [118.296626,35.134563,69.7];
startPosition.value = [props.waylineInfo?.taskOffLng,props.waylineInfo?.taskOffLat,70];
//
clearAllLayer();
@ -76,8 +85,7 @@ const generatePreviewPoint = (placemark)=>{
airPoints.value?.push(airPointInfo);
})
if(props.waylineInfo.value?.airLineType == 'waypoint'){ // 线
if(props.waylineInfo?.airLineType == 'waypoint'){ // 线
airPoints.value?.forEach((item,index)=>{
let drawPoint = {
@ -87,7 +95,7 @@ const generatePreviewPoint = (placemark)=>{
}
preViewPointWayLine(drawPoint);
})
}else if(props.waylineInfo.value?.airLineType == 'mapping2d'){
}else if(props.waylineInfo?.airLineType == 'mapping2d'){
let coordinates = [];
airPoints.value?.forEach((item,index)=>{

@ -1,7 +1,7 @@
<template>
<div>
<div style="width:100%;height: calc( 100vh - 80px);" >
<Map :airRoute="airRoute" @exitDraw="exitDraw" @flyToThere="flyToThere" :wayline="wayline" :waylineInfo="waylineInfo"></Map>
<Map :workPlanFormShow="workPlanFormShow" :airRoute="airRoute" @exitDraw="exitDraw" @flyToThere="flyToThere" :wayline="wayline" :waylineInfo="waylineInfo"></Map>
</div>
<!-- 工作计划列表 -->
@ -32,7 +32,7 @@
</div>
</template>
<script lang="ts" setup>
import {ref} from 'vue';
import {ref,watch} from 'vue';
import planList from './components/planList.vue';
import airLineList from './components/airLineList.vue';
import aircraft from './components/aircraft.vue';
@ -40,6 +40,12 @@ import createWorkPlan from './components/createWorkPlan.vue';
import createAirLine from './components/createAirLine.vue'
import Map from './components/map.vue'
import AirPolygon from './components/airPolygon.vue';
import {getAirLine} from '@/api/sys/workplan';
import JSZip from 'jszip';
import axios from 'axios';
import { XMLParser, XMLBuilder } from 'fast-xml-parser';
const airRoute = ref({})
@ -49,6 +55,7 @@ const flyToTherePosition = ref({
alt:null,
})
const flyToThere = (e)=>{
console.log(e);
}
@ -129,6 +136,7 @@ const successCreatePlan = ()=>{
}
// 线退
const exitDraw = ()=>{
planListShow.value = false;
@ -137,18 +145,75 @@ const exitDraw = ()=>{
}
// 线
const wayline = ref({});
const waylineInfo = ref(null)
const previewAirLine =async (line,type) => {
let info =await getAirLine({airLineId:type.value?.id});
if(info){
wayline.value = line;
waylineInfo.value = info;
}
}
// 线
const planDetail = (item) => {
const planDetail =async (item) => {
formData.value = item;
console.log("formData",formData.value?.airLineId);
let info =await getAirLine({airLineId : formData.value?.airLineId});
if(info){
// wayline.value = line;
waylineInfo.value = info;
wayline.value = await airLineDetail(info);
}
workPlanFormShow.value = true;
}
// 线
const wayline = ref({});
const waylineInfo = ref(null)
const previewAirLine = (line,type) => {
// wpml
const currentPreviewWayLine = ref(null);
const airLineDetail =async (item) => {
currentPreviewWayLine.value = item;
try{
let response = await axios.get(item.wpml,{responseType: 'arraybuffer'});
// kmz
let xmlStr =await extractKmz(response.data);
let xmlData = xmlStr.replace(/wpml:/g,"");
const parser = new XMLParser();
const jsonObj = parser.parse(xmlData);
return jsonObj.kml.Document;
}catch(e){
console.error(e);
}
wayline.value = line;
waylineInfo.value = type;
}
// 线
const extractKmz = async (kmzBlob)=>{
const zip = new JSZip();
const contents = await zip.loadAsync(kmzBlob);
// .wmpl
for (const [filename, file] of Object.entries(contents.files)) {
if (filename.toLowerCase().endsWith('.wpml')) {
return await file.async('text');
}
}
throw new Error('KMZ文件中未找到WMPL文件');
}
</script>

Loading…
Cancel
Save