完成面状航线完整功能

main
徐景良 2025-07-31 17:29:51 +08:00
parent 93ff6d94dd
commit 5d3d2d044f
3 changed files with 71 additions and 36 deletions

View File

@ -447,9 +447,25 @@ element.style.bottom = '40px';
// 线
const startEditAirLine = (wayline,form) => {
const startEditAirLine = (data,form,type) => {
// 线template.kml
templateKmlConfig.value = data.template.kml.Document
// 线wayline.wpml
waylineWpmlConfig.value = data.wayline.kml.Document;
// 线
waylineInfo.value = form;
// 线
airLineForm.value = form;
//
editMode.value = type;
//
workPlanFormShow.value = false;
ariLineShow.value = false;
aircraftShow.value = false;
@ -457,17 +473,6 @@ const startEditAirLine = (wayline,form) => {
createAirLineShow.value = false;
editMode.value = "edit";
// 线template.kml
// 线
waylineInfo.value = wayline;
// 线
airLineForm.value = form;
}
</script>

View File

@ -108,10 +108,10 @@
<a-menu-item @click="checkAriLine(item)" v-if="props.title == '选择航线'">
<a href="javascript:;">选择</a>
</a-menu-item>
<a-menu-item @click="airLineDetail(item)" v-if="props.title != '选择航线'">
<a-menu-item @click="toEditAirLine(item,'edit')" v-if="props.title != '选择航线'">
<a href="javascript:;">预览</a>
</a-menu-item>
<a-menu-item @click="toEditAirLine(item)" v-if="props.title != '选择航线'">
<a-menu-item @click="toEditAirLine(item,'edit')" v-if="props.title != '选择航线'">
<a href="javascript:;">编辑</a>
</a-menu-item>
<a-menu-item @click="downloadAirLine(item)" >
@ -548,7 +548,7 @@
//
const toEditAirLine =async (airLine) => {
const toEditAirLine =async (airLine,type) => {
currentPreviewWayLine.value = airLine;
@ -558,17 +558,20 @@
// kmz
let xmlStr =await extractKmz(response.data);
console.log("xmlStr",xmlStr);
return null;
let xmlData = xmlStr.replace(/wpml:/g,"");
// wpml
let removeWpmlXmlStr = {
template:xmlStr.template.replace(/wpml:/g,""),
wayline:xmlStr.wayline.replace(/wpml:/g,"")
}
// josn
const parser = new XMLParser();
const jsonObj = parser.parse(xmlData);
emit("startEditAirLine",jsonObj.kml.Document,currentPreviewWayLine.value)
let xmlObj = {
template:parser.parse(removeWpmlXmlStr.template),
wayline:parser.parse(removeWpmlXmlStr.wayline),
}
emit("startEditAirLine",xmlObj,currentPreviewWayLine.value,type)
}catch(e){
console.error(e);

View File

@ -223,10 +223,12 @@
})
watch(
() => props.editMode,
(newVal,oldVal)=>{
if(newVal == 'edit'){
if(newVal == 'edit' ){
handlerEditPolygonAirLine();
}
}
@ -716,7 +718,7 @@ const initMap = () => {
// loadChangGuangLayer();
//
if(props.editMode == 'edit'){
if(props.editMode == 'edit' ){
handlerEditPolygonAirLine();
}
@ -1328,16 +1330,18 @@ const handlerLoadtextLabelGraphicLayer = (info) => {
// 线
const handlerEditPolygonAirLine =async () => {
//
//
takeOffPointPosition.value = [props.airLineForm.taskOffLng,props.airLineForm.taskOffLat,props.airLineForm?.taskOffAlt ? props.airLineForm?.taskOffAlt : 71]
let takeoffArray = props.templateKmlConfig.missionConfig.takeOffRefPoint.split(",");
takeOffPointPosition.value = [parseFloat(takeoffArray[1]),parseFloat(takeoffArray[0]),parseFloat(takeoffArray[2])]
polygonAirForm.value.startingPoint = [props.airLineForm.taskOffLng,props.airLineForm.taskOffLat,props.airLineForm?.taskOffAlt ? props.airLineForm?.taskOffAlt : 71];
polygonAirForm.value.startingPoint = [parseFloat(takeoffArray[1]),parseFloat(takeoffArray[0]),parseFloat(takeoffArray[2])];
takeOffPointGraphicLayer ? takeOffPointGraphicLayer.clear() : null;
let startFlyGraphic = new mars3d.graphic.BillboardEntity({
position:[props.airLineForm.taskOffLng,props.airLineForm.taskOffLat],
position:takeOffPointPosition.value,
style: {
image: '/map/start.png',
horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
@ -1356,17 +1360,39 @@ const handlerEditPolygonAirLine =async () => {
takeOffPointGraphicLayer.addGraphic(startFlyGraphic);
//
let areaJson = WktToGeojson(props.airLineForm.flyToFirstPointMode)
polygonGeoJson.value = areaJson.coordinates[0];
//
let coordinateArray = props.templateKmlConfig.Folder.Placemark.Polygon.outerBoundaryIs.LinearRing.coordinates.split("\n");
let geomtryCoorinate = [];
coordinateArray.forEach((item,index)=>{
let trimStr = item.trim();
let arr = trimStr.split(",")
for(let i=0;i<arr.length;i++){
arr[i] = parseFloat(arr[i])
}
geomtryCoorinate.push(arr);
})
geomtryCoorinate.push(geomtryCoorinate[0])
let geometry = {
"type": "Polygon",
"coordinates": [geomtryCoorinate]
}
// let areaJson = WktToGeojson(props.airLineForm.flyToFirstPointMode)
polygonGeoJson.value = geometry.coordinates[0];
let geojsonData = {
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": areaJson,
},
"geometry": geometry
}
]
}
@ -1386,10 +1412,11 @@ const handlerEditPolygonAirLine =async () => {
})
//
handlerGetPolygonBorderInfo(areaJson.coordinates[0])
handlerGetPolygonBorderInfo(geometry.coordinates[0])
// 线
let placemark = props.waylineInfo?.Folder?.Placemark
placemark?.forEach((item, index) => {
let coordinate = item.Point.coordinates.split(',');
let airPointInfo = {