From 2800fa4f32f3900509cb4d6eefaf2bfaf54efdd7 Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Mon, 21 Apr 2025 18:29:09 +0800
Subject: [PATCH] fix: 天气显示
---
src/utils/cesium/use-kmz-tsa.js | 1316 +++++++++++++++++++++++++++++------------------------------
1 files changed, 653 insertions(+), 663 deletions(-)
diff --git a/src/utils/cesium/use-kmz-tsa.js b/src/utils/cesium/use-kmz-tsa.js
index 6d914a3..c24de6a 100644
--- a/src/utils/cesium/use-kmz-tsa.js
+++ b/src/utils/cesium/use-kmz-tsa.js
@@ -1,685 +1,675 @@
-import _ from 'lodash';
-import JSZIP from 'jszip';
-import { JSONToXML } from './kmz';
-import { getDateFromTimestamp } from '@/utils/date';
+import _ from 'lodash'
+import JSZIP from 'jszip'
+import { JSONToXML } from './kmz'
+import { getDateFromTimestamp } from '@/utils/date'
export default function kmzFile() {
- // 云台信息
- const droneModel = {
- 52: '0',
- 53: '1',
- 66: '0',
- 67: '1',
- 80: '0',
- 81: '1',
- };
- // 创建图斑航线
- const create = async (waylineBasicInfo, lnglats, spotList) => {
- try {
- const date = new Date();
- const username = window.localStorage.getItem('bs_username');
- const updateTime = date.getTime();
- const fileName = '图斑航线规划_' + date.getTime();
- // 无人机机型、云台型号、航线高度
- const { droneEnumValue, payloadEnumValue, height } = waylineBasicInfo;
- const defaultHeight = height || 100;
- // 起始点位 (参考点位-具体以机场为准)
- const startPoint = lnglats[0];
- const takeOffPoint = [startPoint[1], startPoint[0], 0].join(',');
- // template.xml对象模版
- const fileTemplate = {
- author: { '#text': username },
- createTime: { '#text': updateTime },
- updateTime: { '#text': updateTime },
- missionConfig: {
- // 飞向首航点模式
- flyToWaylineMode: { '#text': 'safely' },
- // 航线结束动作
- finishAction: { '#text': 'goHome' },
- // 失控是否继续执行航线
- exitOnRCLost: { '#text': 'goContinue' },
- // 失控动作类型
- executeRCLostAction: { '#text': 'goBack' },
- // 安全起飞高度
- takeOffSecurityHeight: { '#text': 20 },
- // 参考起飞点
- takeOffRefPoint: { '#text': takeOffPoint },
- // 参考起飞点海拔高度
- takeOffRefPointAGLHeight: { '#text': 0 },
- // 全局航线过渡速度
- globalTransitionalSpeed: { '#text': 10 },
- // 全局返航高度
- globalRTHHeight: { '#text': defaultHeight },
- // 无人机参数
- droneInfo: {
- droneEnumValue: { '#text': droneEnumValue },
- droneSubEnumValue: {
- '#text': droneModel[payloadEnumValue],
- },
- },
- // 云台参数
- payloadInfo: {
- payloadEnumValue: { '#text': payloadEnumValue },
- payloadSubEnumValue: {
- '#text': droneModel[payloadEnumValue],
- },
- payloadPositionIndex: { '#text': 0 },
- },
- },
- Folder: {
- // 预定义模板类型 - 航点飞行
- templateType: { '#text': 'waypoint' },
- // 是否使用全局航线过渡速度
- useGlobalTransitionalSpeed: { '#text': 0 },
- templateId: { '#text': 0 },
- // 坐标系参数信息
- waylineCoordinateSysParam: {
- // 经纬度坐标系 - 固定值
- coordinateMode: { '#text': 'WGS84' },
- // 航点高程参考平面 - 相对高度
- heightMode: { '#text': 'relativeToStartPoint' },
- },
- // 全局航线飞行速度
- autoFlightSpeed: { '#text': 10 },
- // 云台俯仰角控制模式
- gimbalPitchMode: { '#text': 'usePointSetting' },
- // 全局高度
- globalHeight: { '#text': '100' },
- // 全局偏航角模式参数 - 可使用当前默认值
- globalWaypointHeadingParam: {
- waypointHeadingMode: { '#text': 'followWayline' },
- waypointHeadingAngle: { '#text': 0 },
- waypointPoiPoint: {
- '#text': '0.000000,0.000000,0.000000',
- },
- waypointHeadingPathMode: { '#text': 'followBadArc' },
- waypointHeadingPoiIndex: { '#text': 0 },
- },
- // 全局航点类型 - 直线飞行,飞行器到点停
- globalWaypointTurnMode: {
- '#text': 'toPointAndStopWithDiscontinuityCurvature',
- },
- // 全局航段轨迹是否尽量贴合直线
- globalUseStraightLine: { '#text': 1 },
- // 航点点位信息 - 位置、事件等
- Placemark: [],
- // payloadParam: {
- // payloadPositionIndex: { '#text': 0 },
- // focusMode: { '#text': 'firstPoint' },
- // meteringMode: { '#text': 'average' },
- // returnMode: { '#text': 'singleReturnFirst' },
- // samplingRate: { '#text': '240000' },
- // scanningMode: { '#text': 'repetitive' },
- // imageFormat: { '#text': 'wide,zoom' },
- // },
- },
- };
- // 航点创建
- const polygonNo = {
- no: '',
- index: 0,
- };
- lnglats.forEach((lnglat, index) => {
- const obj = spotList.find((spot) =>
- spot.dkfw.find((item) => _.isEqual(item, lnglat)),
- );
- let fileSuffix = '';
- if (obj) {
- if (polygonNo.no === obj.dkbh) {
- polygonNo.index++;
- } else {
- polygonNo.no = obj.dkbh;
- polygonNo.index = 1;
- }
- fileSuffix = `图斑航线拍摄(${obj.dkbh}-${polygonNo.index})`;
- } else {
- fileSuffix = '图斑航线拍摄(起点)';
- }
- const placemark = {
- Point: {
- // 航点经纬度
- coordinates: { '#text': `${lnglat[0]},${lnglat[1]}` },
- },
- // 航点index
- index: { '#text': index },
- // 全局航线高度(椭球高)
- ellipsoidHeight: { '#text': defaultHeight },
- // 全局航线高度 (EGM96海拔高/相对起飞点高度/AGL相对地面高度)
- height: { '#text': defaultHeight },
- // 航点飞行速度
- waypointSpeed: { '#text': 10 },
- // 沿航线方向 - 可使用当前默认值
- waypointHeadingParam: {
- waypointHeadingMode: { '#text': 'followWayline' },
- waypointHeadingAngle: { '#text': 0 },
- waypointPoiPoint: {
- '#text': '0.000000,0.000000,0.000000',
- },
- waypointHeadingPathMode: { '#text': 'followBadArc' },
- waypointHeadingPoiIndex: { '#text': 0 },
- },
- // 航点类型
- waypointTurnParam: {
- waypointTurnMode: {
- '#text': 'toPointAndStopWithDiscontinuityCurvature',
- },
- waypointTurnDampingDist: { '#text': 0.2 },
- },
- // 是否全局参数
- useGlobalHeight: { '#text': 1 },
- useGlobalSpeed: { '#text': 1 },
- useGlobalHeadingParam: { '#text': 1 },
- useGlobalTurnParam: { '#text': 1 },
- useStraightLine: { '#text': 1 },
- // 事件组
- actionGroup: {
- actionGroupId: { '#text': index },
- actionGroupStartIndex: { '#text': index },
- actionGroupEndIndex: { '#text': index },
- actionGroupMode: { '#text': 'sequence' },
- actionTrigger: {
- actionTriggerType: { '#text': 'reachPoint' },
- },
- // 单个事件 - 如果是多个事件action可改成数组 action: [{}]
- action: {
- actionId: { '#text': 0 },
- actionActuatorFunc: { '#text': 'takePhoto' },
- actionActuatorFuncParam: {
- fileSuffix: { '#text': fileSuffix },
- payloadPositionIndex: { '#text': '0' },
- useGlobalPayloadLensIndex: { '#text': '1' },
- },
- },
- },
- };
- fileTemplate.Folder.Placemark.push(placemark);
- });
- const fileWaylines = waylinesContext(fileTemplate);
+ // 云台信息
+ const droneModel = {
+ 52: '0',
+ 53: '1',
+ 66: '0',
+ 67: '1',
+ 80: '0',
+ 81: '1',
+ }
+ // 创建图斑航线
+ const create = async (waylineBasicInfo, lnglats, spotList) => {
+ try {
+ const date = new Date()
+ const username = window.localStorage.getItem('bs_username')
+ const updateTime = date.getTime()
+ const fileName = '图斑航线规划_' + date.getTime()
+ // 无人机机型、云台型号、航线高度
+ const { droneEnumValue, payloadEnumValue, height } = waylineBasicInfo
+ const defaultHeight = height || 100
+ // 起始点位 (参考点位-具体以机场为准)
+ const startPoint = lnglats[0]
+ const takeOffPoint = [startPoint[1], startPoint[0], 0].join(',')
+ // template.xml对象模版
+ const fileTemplate = {
+ author: { '#text': username },
+ createTime: { '#text': updateTime },
+ updateTime: { '#text': updateTime },
+ missionConfig: {
+ // 飞向首航点模式
+ flyToWaylineMode: { '#text': 'safely' },
+ // 航线结束动作
+ finishAction: { '#text': 'goHome' },
+ // 失控是否继续执行航线
+ exitOnRCLost: { '#text': 'goContinue' },
+ // 失控动作类型
+ executeRCLostAction: { '#text': 'goBack' },
+ // 安全起飞高度
+ takeOffSecurityHeight: { '#text': 20 },
+ // 参考起飞点
+ takeOffRefPoint: { '#text': takeOffPoint },
+ // 参考起飞点海拔高度
+ takeOffRefPointAGLHeight: { '#text': 0 },
+ // 全局航线过渡速度
+ globalTransitionalSpeed: { '#text': 10 },
+ // 全局返航高度
+ globalRTHHeight: { '#text': defaultHeight },
+ // 无人机参数
+ droneInfo: {
+ droneEnumValue: { '#text': droneEnumValue },
+ droneSubEnumValue: {
+ '#text': droneModel[payloadEnumValue],
+ },
+ },
+ // 云台参数
+ payloadInfo: {
+ payloadEnumValue: { '#text': payloadEnumValue },
+ payloadSubEnumValue: {
+ '#text': droneModel[payloadEnumValue],
+ },
+ payloadPositionIndex: { '#text': 0 },
+ },
+ },
+ Folder: {
+ // 预定义模板类型 - 航点飞行
+ templateType: { '#text': 'waypoint' },
+ // 是否使用全局航线过渡速度
+ useGlobalTransitionalSpeed: { '#text': 0 },
+ templateId: { '#text': 0 },
+ // 坐标系参数信息
+ waylineCoordinateSysParam: {
+ // 经纬度坐标系 - 固定值
+ coordinateMode: { '#text': 'WGS84' },
+ // 航点高程参考平面 - 相对高度
+ heightMode: { '#text': 'relativeToStartPoint' },
+ },
+ // 全局航线飞行速度
+ autoFlightSpeed: { '#text': 10 },
+ // 云台俯仰角控制模式
+ gimbalPitchMode: { '#text': 'usePointSetting' },
+ // 全局高度
+ globalHeight: { '#text': '100' },
+ // 全局偏航角模式参数 - 可使用当前默认值
+ globalWaypointHeadingParam: {
+ waypointHeadingMode: { '#text': 'followWayline' },
+ waypointHeadingAngle: { '#text': 0 },
+ waypointPoiPoint: {
+ '#text': '0.000000,0.000000,0.000000',
+ },
+ waypointHeadingPathMode: { '#text': 'followBadArc' },
+ waypointHeadingPoiIndex: { '#text': 0 },
+ },
+ // 全局航点类型 - 直线飞行,飞行器到点停
+ globalWaypointTurnMode: {
+ '#text': 'toPointAndStopWithDiscontinuityCurvature',
+ },
+ // 全局航段轨迹是否尽量贴合直线
+ globalUseStraightLine: { '#text': 1 },
+ // 航点点位信息 - 位置、事件等
+ Placemark: [],
+ // payloadParam: {
+ // payloadPositionIndex: { '#text': 0 },
+ // focusMode: { '#text': 'firstPoint' },
+ // meteringMode: { '#text': 'average' },
+ // returnMode: { '#text': 'singleReturnFirst' },
+ // samplingRate: { '#text': '240000' },
+ // scanningMode: { '#text': 'repetitive' },
+ // imageFormat: { '#text': 'wide,zoom' },
+ // },
+ },
+ }
+ // 航点创建
+ const polygonNo = {
+ no: '',
+ index: 0,
+ }
+ lnglats.forEach((lnglat, index) => {
+ const obj = spotList.find(spot => spot.dkfw.find(item => _.isEqual(item, lnglat)))
+ let fileSuffix = ''
+ if (obj) {
+ if (polygonNo.no === obj.dkbh) {
+ polygonNo.index++
+ } else {
+ polygonNo.no = obj.dkbh
+ polygonNo.index = 1
+ }
+ fileSuffix = `图斑航线拍摄(${obj.dkbh}-${polygonNo.index})`
+ } else {
+ fileSuffix = '图斑航线拍摄(起点)'
+ }
+ const placemark = {
+ Point: {
+ // 航点经纬度
+ coordinates: { '#text': `${lnglat[0]},${lnglat[1]}` },
+ },
+ // 航点index
+ index: { '#text': index },
+ // 全局航线高度(椭球高)
+ ellipsoidHeight: { '#text': defaultHeight },
+ // 全局航线高度 (EGM96海拔高/相对起飞点高度/AGL相对地面高度)
+ height: { '#text': defaultHeight },
+ // 航点飞行速度
+ waypointSpeed: { '#text': 10 },
+ // 沿航线方向 - 可使用当前默认值
+ waypointHeadingParam: {
+ waypointHeadingMode: { '#text': 'followWayline' },
+ waypointHeadingAngle: { '#text': 0 },
+ waypointPoiPoint: {
+ '#text': '0.000000,0.000000,0.000000',
+ },
+ waypointHeadingPathMode: { '#text': 'followBadArc' },
+ waypointHeadingPoiIndex: { '#text': 0 },
+ },
+ // 航点类型
+ waypointTurnParam: {
+ waypointTurnMode: {
+ '#text': 'toPointAndStopWithDiscontinuityCurvature',
+ },
+ waypointTurnDampingDist: { '#text': 0.2 },
+ },
+ // 是否全局参数
+ useGlobalHeight: { '#text': 1 },
+ useGlobalSpeed: { '#text': 1 },
+ useGlobalHeadingParam: { '#text': 1 },
+ useGlobalTurnParam: { '#text': 1 },
+ useStraightLine: { '#text': 1 },
+ // 事件组
+ actionGroup: {
+ actionGroupId: { '#text': index },
+ actionGroupStartIndex: { '#text': index },
+ actionGroupEndIndex: { '#text': index },
+ actionGroupMode: { '#text': 'sequence' },
+ actionTrigger: {
+ actionTriggerType: { '#text': 'reachPoint' },
+ },
+ // 单个事件 - 如果是多个事件action可改成数组 action: [{}]
+ action: {
+ actionId: { '#text': 0 },
+ actionActuatorFunc: { '#text': 'takePhoto' },
+ actionActuatorFuncParam: {
+ fileSuffix: { '#text': fileSuffix },
+ payloadPositionIndex: { '#text': '0' },
+ useGlobalPayloadLensIndex: { '#text': '1' },
+ },
+ },
+ },
+ }
+ fileTemplate.Folder.Placemark.push(placemark)
+ })
+ const fileWaylines = waylinesContext(fileTemplate)
- return {
- fileName,
- template: fileTemplate,
- waylines: fileWaylines,
- };
- } catch (error) {
- console.log(error);
- return false;
- }
- };
+ return {
+ fileName,
+ template: fileTemplate,
+ waylines: fileWaylines,
+ }
+ } catch (error) {
+ console.log(error)
+ return false
+ }
+ }
- // 创建正常航线
- const createNoramlWaylines = (waylineBasicInfo, lnglats) => {
- try {
- const date = new Date();
- const username = window.localStorage.getItem('bs_username');
- const updateTime = date.getTime();
- const { year, month, day, hours, minutes } =
- getDateFromTimestamp(updateTime);
- const fileName = '新建航线_' + year + month + day + hours + minutes;
- // 无人机机型、云台型号、航线高度
- const { droneEnumValue, payloadEnumValue, height, waylineName } =
- waylineBasicInfo;
- const defaultHeight = height || 100;
- // 起始点位 (参考点位-具体以机场为准)
- const startPoint = lnglats[0];
- const takeOffPoint = [startPoint.latitude, startPoint.longitude, 0].join(
- ',',
- );
- // template.xml对象模版
- const fileTemplate = {
- author: { '#text': username },
- createTime: { '#text': updateTime },
- updateTime: { '#text': updateTime },
- missionConfig: {
- // 飞向首航点模式
- flyToWaylineMode: { '#text': 'safely' },
- // 航线结束动作
- finishAction: { '#text': 'goHome' },
- // 失控是否继续执行航线
- exitOnRCLost: { '#text': 'goContinue' },
- // 失控动作类型
- executeRCLostAction: { '#text': 'goBack' },
- // 安全起飞高度
- takeOffSecurityHeight: { '#text': 20 },
- // 参考起飞点
- takeOffRefPoint: { '#text': takeOffPoint },
- // 参考起飞点海拔高度
- takeOffRefPointAGLHeight: { '#text': 0 },
- // 全局航线过渡速度
- globalTransitionalSpeed: { '#text': 10 },
- // 全局返航高度
- globalRTHHeight: { '#text': defaultHeight },
- // 无人机参数
- droneInfo: {
- droneEnumValue: { '#text': droneEnumValue },
- droneSubEnumValue: {
- '#text': droneModel[payloadEnumValue],
- },
- },
- // 是否自动绕行(暂未验证M30T机型使用此参数后会不会无法起飞)
- autoRerouteInfo: {
- missionAutoRerouteMode: { '#text': 1 },
- transitionalAutoRerouteMode: { '#text': 1 },
- },
- // 云台参数
- payloadInfo: {
- payloadEnumValue: { '#text': payloadEnumValue },
- payloadSubEnumValue: {
- '#text': droneModel[payloadEnumValue],
- },
- payloadPositionIndex: { '#text': 0 },
- },
- },
- Folder: {
- // 预定义模板类型 - 航点飞行
- templateType: { '#text': 'waypoint' },
- // 是否使用全局航线过渡速度
- useGlobalTransitionalSpeed: { '#text': 0 },
- templateId: { '#text': 0 },
- // 坐标系参数信息
- waylineCoordinateSysParam: {
- // 经纬度坐标系 - 固定值
- coordinateMode: { '#text': 'WGS84' },
- // 航点高程参考平面 - 相对高度
- heightMode: { '#text': 'relativeToStartPoint' },
- },
- // 全局航线飞行速度
- autoFlightSpeed: { '#text': 10 },
- // 云台俯仰角控制模式
- gimbalPitchMode: { '#text': 'usePointSetting' },
- // 全局高度
- globalHeight: { '#text': '100' },
- // 全局偏航角模式参数 - 可使用当前默认值
- globalWaypointHeadingParam: {
- waypointHeadingMode: { '#text': 'followWayline' },
- waypointHeadingAngle: { '#text': 0 },
- waypointPoiPoint: {
- '#text': '0.000000,0.000000,0.000000',
- },
- waypointHeadingPathMode: { '#text': 'followBadArc' },
- waypointHeadingPoiIndex: { '#text': 0 },
- },
- // 全局航点类型 - 直线飞行,飞行器到点停
- globalWaypointTurnMode: {
- '#text': 'toPointAndStopWithDiscontinuityCurvature',
- },
- // 全局航段轨迹是否尽量贴合直线
- globalUseStraightLine: { '#text': 1 },
- // 航点点位信息 - 位置、事件等
- Placemark: [],
- payloadParam: {
- payloadPositionIndex: { '#text': 0 },
- focusMode: { '#text': 'firstPoint' },
- meteringMode: { '#text': 'average' },
- returnMode: { '#text': 'singleReturnFirst' },
- samplingRate: { '#text': '240000' },
- scanningMode: { '#text': 'repetitive' },
- imageFormat: { '#text': 'wide,zoom' },
- },
- },
- };
- lnglats.forEach((lnglat, index) => {
- const placemark = {
- Point: {
- // 航点经纬度
- coordinates: {
- '#text': `${lnglat.longitude},${lnglat.latitude}`,
- },
- },
- // 航点index
- index: { '#text': index },
- // 全局航线高度(椭球高)
- ellipsoidHeight: { '#text': lnglat.height },
- // 全局航线高度 (EGM96海拔高/相对起飞点高度/AGL相对地面高度)
- height: { '#text': lnglat.height },
- // 航点飞行速度
- waypointSpeed: { '#text': lnglat?.speed || 10 },
- // 沿航线方向 - 可使用当前默认值
- waypointHeadingParam: {
- waypointHeadingMode: { '#text': 'followWayline' },
- waypointHeadingAngle: { '#text': 0 },
- waypointPoiPoint: {
- '#text': '0.000000,0.000000,0.000000',
- },
- waypointHeadingPathMode: { '#text': 'followBadArc' },
- waypointHeadingPoiIndex: { '#text': 0 },
- },
- // 航点类型
- waypointTurnParam: {
- waypointTurnMode: {
- '#text': 'toPointAndStopWithDiscontinuityCurvature',
- },
- waypointTurnDampingDist: { '#text': 0.2 },
- },
- // 是否全局参数
- useGlobalHeight: { '#text': 1 },
- useGlobalSpeed: { '#text': 0 },
- useGlobalHeadingParam: { '#text': 1 },
- useGlobalTurnParam: { '#text': 1 },
- useStraightLine: { '#text': 1 },
- };
- if (lnglat?.actions) {
- const actionGroup = {
- actionGroupId: { '#text': index },
- actionGroupStartIndex: { '#text': index },
- actionGroupEndIndex: { '#text': index },
- actionGroupMode: { '#text': 'sequence' },
- actionTrigger: {
- actionTriggerType: { '#text': 'reachPoint' },
- },
- // 单个事件 - 如果是多个事件action可改成数组 action: [{}]
- // action: [{
- // actionId: { '#text': 0 },
- // actionActuatorFunc: { '#text': '' },
- // actionActuatorFuncParam: {},
- // }],
- action: [],
- };
- lnglat?.actions.forEach((action, index) => {
- const singleAction = {
- actionId: { '#text': index },
- actionActuatorFunc: { '#text': '' },
- actionActuatorFuncParam: {},
- };
- // actionGroup.action['actionActuatorFunc'] = { '#text': action.key }
- // action.params.forEach(p => {
- // if (p.value || p.value !== '') {
- // actionGroup.action['actionActuatorFuncParam'][p.key] = { '#text': p.value }
- // }
- // })
- singleAction['actionActuatorFunc'] = {
- '#text': action.key,
- };
- action.params.forEach((p) => {
- if (p.value || p.value !== '') {
- singleAction['actionActuatorFuncParam'][p.key] = {
- '#text': p.value,
- };
- }
- });
- if (lnglat?.actions.length > 1) {
- actionGroup.action.push(singleAction);
- } else {
- actionGroup.action = singleAction;
- }
- });
- placemark.actionGroup = actionGroup;
- }
- fileTemplate.Folder.Placemark.push(placemark);
- });
- const fileWaylines = waylinesContext(fileTemplate);
- return {
- fileName: waylineName || fileName,
- template: fileTemplate,
- waylines: fileWaylines,
- };
- } catch (error) {
- console.log(error);
- return error;
- }
- };
+ // 创建正常航线
+ const createNoramlWaylines = (waylineBasicInfo, lnglats) => {
+ try {
+ const date = new Date()
+ const username = window.localStorage.getItem('bs_username')
+ const updateTime = date.getTime()
+ const { year, month, day, hours, minutes } = getDateFromTimestamp(updateTime)
+ const fileName = '新建航线_' + year + month + day + hours + minutes
+ // 无人机机型、云台型号、航线高度
+ const { droneEnumValue, payloadEnumValue, height, waylineName } = waylineBasicInfo
+ const defaultHeight = height || 100
+ // 起始点位 (参考点位-具体以机场为准)
+ const startPoint = lnglats[0]
+ const takeOffPoint = [startPoint.latitude, startPoint.longitude, 0].join(',')
+ // template.xml对象模版
+ const fileTemplate = {
+ author: { '#text': username },
+ createTime: { '#text': updateTime },
+ updateTime: { '#text': updateTime },
+ missionConfig: {
+ // 飞向首航点模式
+ flyToWaylineMode: { '#text': 'safely' },
+ // 航线结束动作
+ finishAction: { '#text': 'goHome' },
+ // 失控是否继续执行航线
+ exitOnRCLost: { '#text': 'goContinue' },
+ // 失控动作类型
+ executeRCLostAction: { '#text': 'goBack' },
+ // 安全起飞高度
+ takeOffSecurityHeight: { '#text': 20 },
+ // 参考起飞点
+ takeOffRefPoint: { '#text': takeOffPoint },
+ // 参考起飞点海拔高度
+ takeOffRefPointAGLHeight: { '#text': 0 },
+ // 全局航线过渡速度
+ globalTransitionalSpeed: { '#text': 10 },
+ // 全局返航高度
+ globalRTHHeight: { '#text': defaultHeight },
+ // 无人机参数
+ droneInfo: {
+ droneEnumValue: { '#text': droneEnumValue },
+ droneSubEnumValue: {
+ '#text': droneModel[payloadEnumValue],
+ },
+ },
+ // 是否自动绕行(暂未验证M30T机型使用此参数后会不会无法起飞)
+ autoRerouteInfo: {
+ missionAutoRerouteMode: { '#text': 1 },
+ transitionalAutoRerouteMode: { '#text': 1 },
+ },
+ // 云台参数
+ payloadInfo: {
+ payloadEnumValue: { '#text': payloadEnumValue },
+ payloadSubEnumValue: {
+ '#text': droneModel[payloadEnumValue],
+ },
+ payloadPositionIndex: { '#text': 0 },
+ },
+ },
+ Folder: {
+ // 预定义模板类型 - 航点飞行
+ templateType: { '#text': 'waypoint' },
+ // 是否使用全局航线过渡速度
+ useGlobalTransitionalSpeed: { '#text': 0 },
+ templateId: { '#text': 0 },
+ // 坐标系参数信息
+ waylineCoordinateSysParam: {
+ // 经纬度坐标系 - 固定值
+ coordinateMode: { '#text': 'WGS84' },
+ // 航点高程参考平面 - 相对高度
+ heightMode: { '#text': 'relativeToStartPoint' },
+ },
+ // 全局航线飞行速度
+ autoFlightSpeed: { '#text': 10 },
+ // 云台俯仰角控制模式
+ gimbalPitchMode: { '#text': 'usePointSetting' },
+ // 全局高度
+ globalHeight: { '#text': '100' },
+ // 全局偏航角模式参数 - 可使用当前默认值
+ globalWaypointHeadingParam: {
+ waypointHeadingMode: { '#text': 'followWayline' },
+ waypointHeadingAngle: { '#text': 0 },
+ waypointPoiPoint: {
+ '#text': '0.000000,0.000000,0.000000',
+ },
+ waypointHeadingPathMode: { '#text': 'followBadArc' },
+ waypointHeadingPoiIndex: { '#text': 0 },
+ },
+ // 全局航点类型 - 直线飞行,飞行器到点停
+ globalWaypointTurnMode: {
+ '#text': 'toPointAndStopWithDiscontinuityCurvature',
+ },
+ // 全局航段轨迹是否尽量贴合直线
+ globalUseStraightLine: { '#text': 1 },
+ // 航点点位信息 - 位置、事件等
+ Placemark: [],
+ payloadParam: {
+ payloadPositionIndex: { '#text': 0 },
+ focusMode: { '#text': 'firstPoint' },
+ meteringMode: { '#text': 'average' },
+ returnMode: { '#text': 'singleReturnFirst' },
+ samplingRate: { '#text': '240000' },
+ scanningMode: { '#text': 'repetitive' },
+ imageFormat: { '#text': 'wide,zoom' },
+ },
+ },
+ }
+ lnglats.forEach((lnglat, index) => {
+ const placemark = {
+ Point: {
+ // 航点经纬度
+ coordinates: {
+ '#text': `${lnglat.longitude},${lnglat.latitude}`,
+ },
+ },
+ // 航点index
+ index: { '#text': index },
+ // 全局航线高度(椭球高)
+ ellipsoidHeight: { '#text': lnglat.height },
+ // 全局航线高度 (EGM96海拔高/相对起飞点高度/AGL相对地面高度)
+ height: { '#text': lnglat.height },
+ // 航点飞行速度
+ waypointSpeed: { '#text': lnglat?.speed || 10 },
+ // 沿航线方向 - 可使用当前默认值
+ waypointHeadingParam: {
+ waypointHeadingMode: { '#text': 'followWayline' },
+ waypointHeadingAngle: { '#text': 0 },
+ waypointPoiPoint: {
+ '#text': '0.000000,0.000000,0.000000',
+ },
+ waypointHeadingPathMode: { '#text': 'followBadArc' },
+ waypointHeadingPoiIndex: { '#text': 0 },
+ },
+ // 航点类型
+ waypointTurnParam: {
+ waypointTurnMode: {
+ '#text': 'toPointAndStopWithDiscontinuityCurvature',
+ },
+ waypointTurnDampingDist: { '#text': 0.2 },
+ },
+ // 是否全局参数
+ useGlobalHeight: { '#text': 1 },
+ useGlobalSpeed: { '#text': 0 },
+ useGlobalHeadingParam: { '#text': 1 },
+ useGlobalTurnParam: { '#text': 1 },
+ useStraightLine: { '#text': 1 },
+ }
+ if (lnglat?.actions) {
+ const actionGroup = {
+ actionGroupId: { '#text': index },
+ actionGroupStartIndex: { '#text': index },
+ actionGroupEndIndex: { '#text': index },
+ actionGroupMode: { '#text': 'sequence' },
+ actionTrigger: {
+ actionTriggerType: { '#text': 'reachPoint' },
+ },
+ // 单个事件 - 如果是多个事件action可改成数组 action: [{}]
+ // action: [{
+ // actionId: { '#text': 0 },
+ // actionActuatorFunc: { '#text': '' },
+ // actionActuatorFuncParam: {},
+ // }],
+ action: [],
+ }
+ lnglat?.actions.forEach((action, index) => {
+ const singleAction = {
+ actionId: { '#text': index },
+ actionActuatorFunc: { '#text': '' },
+ actionActuatorFuncParam: {},
+ }
+ // actionGroup.action['actionActuatorFunc'] = { '#text': action.key }
+ // action.params.forEach(p => {
+ // if (p.value || p.value !== '') {
+ // actionGroup.action['actionActuatorFuncParam'][p.key] = { '#text': p.value }
+ // }
+ // })
+ singleAction['actionActuatorFunc'] = {
+ '#text': action.key,
+ }
+ action.params.forEach(p => {
+ if (p.value || p.value !== '') {
+ singleAction['actionActuatorFuncParam'][p.key] = {
+ '#text': p.value,
+ }
+ }
+ })
+ if (lnglat?.actions.length > 1) {
+ actionGroup.action.push(singleAction)
+ } else {
+ actionGroup.action = singleAction
+ }
+ })
+ placemark.actionGroup = actionGroup
+ }
+ fileTemplate.Folder.Placemark.push(placemark)
+ })
+ const fileWaylines = waylinesContext(fileTemplate)
+ return {
+ fileName: waylineName || fileName,
+ template: fileTemplate,
+ waylines: fileWaylines,
+ }
+ } catch (error) {
+ console.log(error)
+ return error
+ }
+ }
- // 创建面状航线
- const createPlanarWayline = (waylineBasicInfo, lnglats) => {};
+ // 创建面状航线
+ const createPlanarWayline = (waylineBasicInfo, lnglats) => {}
- // 创建点状航线
- const createPointWayLines = (
- waylineBasicInfo,
- points,
- settingInfo,
- dockPosition,
- ) => {
- try {
- const { droneEnumValue, payloadEnumValue, waylineName } =
- waylineBasicInfo;
+ // 创建点状航线
+ const createPointWayLines = (waylineBasicInfo, points, settingInfo, dockPosition) => {
+ try {
+ const { droneEnumValue, payloadEnumValue, waylineName } = waylineBasicInfo
- const { imageFormat, heightMode, globalHeight, autoFlightSpeed,gimbalPitchMode,
- waypointTurnMode,waypointHeadingMode,finishAction,globalTransitionalSpeed } =
- settingInfo;
+ const {
+ imageFormat,
+ heightMode,
+ globalHeight,
+ autoFlightSpeed,
+ gimbalPitchMode,
+ waypointTurnMode,
+ waypointHeadingMode,
+ finishAction,
+ globalTransitionalSpeed,
+ } = settingInfo
- const date = new Date();
- const username = window.localStorage.getItem('bs_username');
- const updateTime = date.getTime();
- const { year, month, day, hours, minutes } =
- getDateFromTimestamp(updateTime);
- const fileName = '新建航线_' + year + month + day + hours + minutes;
- // 无人机机型、云台型号、航线高度
+ const date = new Date()
+ const username = window.localStorage.getItem('bs_username')
+ const updateTime = date.getTime()
+ const { year, month, day, hours, minutes } = getDateFromTimestamp(updateTime)
+ const fileName = '新建航线_' + year + month + day + hours + minutes
+ // 无人机机型、云台型号、航线高度
- const defaultHeight = 100;
- // 起始点位 (参考点位-具体以机场为准)
- const takeOffPoint = [
- dockPosition.latitude,
- dockPosition.longitude,
- 0,
- ].join(',');
+ const defaultHeight = 100
+ // 起始点位 (参考点位-具体以机场为准)
+ const takeOffPoint = [dockPosition.latitude, dockPosition.longitude, 0].join(',')
- // template.xml对象模版
- const fileTemplate = {
- author: { '#text': username },
- createTime: { '#text': updateTime },
- updateTime: { '#text': updateTime },
- missionConfig: {
- // 飞向首航点模式
- flyToWaylineMode: { '#text': 'safely' },
- // 航线结束动作
- finishAction: { '#text': finishAction || 'goHome' },
- // 失控是否继续执行航线
- exitOnRCLost: { '#text': 'executeLostAction' },
- // 失控动作类型
- executeRCLostAction: { '#text': 'goBack' },
- // 安全起飞高度
- takeOffSecurityHeight: { '#text': 120 },
- // 参考起飞点
- takeOffRefPoint: { '#text': takeOffPoint },
- // 参考起飞点海拔高度
- takeOffRefPointAGLHeight: { '#text': 0 },
- // 全局航线过渡速度
- globalTransitionalSpeed: { '#text': globalTransitionalSpeed || 10 },
- // 全局返航高度
- globalRTHHeight: { '#text': defaultHeight },
- // 无人机参数
- droneInfo: {
- droneEnumValue: { '#text': droneEnumValue },
- droneSubEnumValue: {
- '#text': droneModel[payloadEnumValue],
- },
- },
- // 是否自动绕行(暂未验证M30T机型使用此参数后会不会无法起飞)
- autoRerouteInfo: {
- missionAutoRerouteMode: { '#text': 1 },
- transitionalAutoRerouteMode: { '#text': 1 },
- },
- // 云台参数
- payloadInfo: {
- payloadEnumValue: { '#text': payloadEnumValue },
- payloadSubEnumValue: {
- '#text': droneModel[payloadEnumValue],
- },
- payloadPositionIndex: { '#text': 0 },
- },
- },
- Folder: {
- // 预定义模板类型 - 航点飞行
- templateType: { '#text': 'waypoint' },
- // 是否使用全局航线过渡速度
- useGlobalTransitionalSpeed: { '#text': 0 },
- templateId: { '#text': 0 },
- // 坐标系参数信息
- waylineCoordinateSysParam: {
- // 经纬度坐标系 - 固定值
- coordinateMode: { '#text': 'WGS84' },
- // 航点高程参考平面 - 相对高度
- heightMode: heightMode,
- },
- // 全局航线飞行速度
- autoFlightSpeed: { '#text': autoFlightSpeed || 10 },
- // 云台俯仰角控制模式
- gimbalPitchMode: { '#text': gimbalPitchMode || 'manual' },
- // 全局高度
- globalHeight: { '#text': globalHeight || '100' },
- // 全局偏航角模式参数 - 可使用当前默认值
- globalWaypointHeadingParam: {
- waypointHeadingMode: { '#text': waypointHeadingMode || 'followWayline' },
- waypointHeadingAngle: { '#text': 0 },
- waypointPoiPoint: {
- '#text': '0.000000,0.000000,0.000000',
- },
- waypointHeadingPathMode: { '#text': 'followBadArc' },
- waypointHeadingPoiIndex: { '#text': 0 },
- },
- // 全局航点类型 - 直线飞行,飞行器到点停
- globalWaypointTurnMode: {
- '#text': waypointTurnMode || 'toPointAndStopWithDiscontinuityCurvature',
- },
- // 全局航段轨迹是否尽量贴合直线
- globalUseStraightLine: { '#text': 1 },
- // 航点点位信息 - 位置、事件等
- Placemark: [],
- payloadParam: {
- payloadPositionIndex: { '#text': 0 },
- focusMode: { '#text': 'firstPoint' },
- meteringMode: { '#text': 'average' },
- returnMode: { '#text': 'singleReturnFirst' },
- samplingRate: { '#text': '240000' },
- scanningMode: { '#text': 'repetitive' },
- imageFormat: imageFormat,
- },
- },
- };
- points.length &&
- points.forEach((detail, ind) => {
- const { Point, index, height, ellipsoidHeight, actionGroup,waypointSpeed } = detail;
+ // template.xml对象模版
+ const fileTemplate = {
+ author: { '#text': username },
+ createTime: { '#text': updateTime },
+ updateTime: { '#text': updateTime },
+ missionConfig: {
+ // 飞向首航点模式
+ flyToWaylineMode: { '#text': 'safely' },
+ // 航线结束动作
+ finishAction: { '#text': finishAction || 'goHome' },
+ // 失控是否继续执行航线
+ exitOnRCLost: { '#text': 'executeLostAction' },
+ // 失控动作类型
+ executeRCLostAction: { '#text': 'goBack' },
+ // 安全起飞高度
+ takeOffSecurityHeight: { '#text': 120 },
+ // 参考起飞点
+ takeOffRefPoint: { '#text': takeOffPoint },
+ // 参考起飞点海拔高度
+ takeOffRefPointAGLHeight: { '#text': 0 },
+ // 全局航线过渡速度
+ globalTransitionalSpeed: { '#text': globalTransitionalSpeed || 10 },
+ // 全局返航高度
+ globalRTHHeight: { '#text': defaultHeight },
+ // 无人机参数
+ droneInfo: {
+ droneEnumValue: { '#text': droneEnumValue },
+ droneSubEnumValue: {
+ '#text': droneModel[payloadEnumValue],
+ },
+ },
+ // 是否自动绕行(暂未验证M30T机型使用此参数后会不会无法起飞)
+ autoRerouteInfo: {
+ missionAutoRerouteMode: { '#text': 1 },
+ transitionalAutoRerouteMode: { '#text': 1 },
+ },
+ // 云台参数
+ payloadInfo: {
+ payloadEnumValue: { '#text': payloadEnumValue },
+ payloadSubEnumValue: {
+ '#text': droneModel[payloadEnumValue],
+ },
+ payloadPositionIndex: { '#text': 0 },
+ },
+ },
+ Folder: {
+ // 预定义模板类型 - 航点飞行
+ templateType: { '#text': 'waypoint' },
+ // 是否使用全局航线过渡速度
+ useGlobalTransitionalSpeed: { '#text': 0 },
+ templateId: { '#text': 0 },
+ // 坐标系参数信息
+ waylineCoordinateSysParam: {
+ // 经纬度坐标系 - 固定值
+ coordinateMode: { '#text': 'WGS84' },
+ // 航点高程参考平面 - 相对高度
+ heightMode: heightMode,
+ },
+ // 全局航线飞行速度
+ autoFlightSpeed: { '#text': autoFlightSpeed || 10 },
+ // 云台俯仰角控制模式
+ gimbalPitchMode: { '#text': gimbalPitchMode || 'manual' },
+ // 全局高度
+ globalHeight: { '#text': globalHeight || '100' },
+ // 全局偏航角模式参数 - 可使用当前默认值
+ globalWaypointHeadingParam: {
+ waypointHeadingMode: { '#text': waypointHeadingMode || 'followWayline' },
+ waypointHeadingAngle: { '#text': 0 },
+ waypointPoiPoint: {
+ '#text': '0.000000,0.000000,0.000000',
+ },
+ waypointHeadingPathMode: { '#text': 'followBadArc' },
+ waypointHeadingPoiIndex: { '#text': 0 },
+ },
+ // 全局航点类型 - 直线飞行,飞行器到点停
+ globalWaypointTurnMode: {
+ '#text': waypointTurnMode || 'toPointAndStopWithDiscontinuityCurvature',
+ },
+ // 全局航段轨迹是否尽量贴合直线
+ globalUseStraightLine: { '#text': 1 },
+ // 航点点位信息 - 位置、事件等
+ Placemark: [],
+ payloadParam: {
+ payloadPositionIndex: { '#text': 0 },
+ focusMode: { '#text': 'firstPoint' },
+ meteringMode: { '#text': 'average' },
+ returnMode: { '#text': 'singleReturnFirst' },
+ samplingRate: { '#text': '240000' },
+ scanningMode: { '#text': 'repetitive' },
+ imageFormat: imageFormat,
+ },
+ },
+ }
+ points.length &&
+ points.forEach((detail, ind) => {
+ const { Point, index, height, ellipsoidHeight, actionGroup, waypointSpeed } = detail
- const placemark = {
- Point,
- // 航点index
- index,
- // 全局航线高度(椭球高)
- ellipsoidHeight,
- // 全局航线高度 (EGM96海拔高/相对起飞点高度/AGL相对地面高度)
- height,
- // 航点飞行速度
- waypointSpeed: { '#text': waypointSpeed || 10 },
- // 沿航线方向 - 可使用当前默认值
- waypointHeadingParam: {
- waypointHeadingMode: { '#text': waypointHeadingMode || 'followWayline' },
- waypointHeadingAngle: { '#text': 0 },
- waypointPoiPoint: {
- '#text': '0.000000,0.000000,0.000000',
- },
- waypointHeadingPathMode: { '#text': 'followBadArc' },
- waypointHeadingPoiIndex: { '#text': 0 },
- },
- // 航点类型
- waypointTurnParam: {
- waypointTurnMode: {
- '#text': waypointTurnMode || 'toPointAndStopWithDiscontinuityCurvature',
- },
- waypointTurnDampingDist: { '#text': 0.2 },
- },
- // 是否全局参数
- useGlobalHeight: { '#text': 1 },
- useGlobalSpeed: { '#text': 0 },
- useGlobalHeadingParam: { '#text': 1 },
- useGlobalTurnParam: { '#text': 1 },
- useStraightLine: { '#text': 1 },
- };
- if (actionGroup) {
- placemark.actionGroup = actionGroup;
- }
+ const placemark = {
+ Point,
+ // 航点index
+ index,
+ // 全局航线高度(椭球高)
+ ellipsoidHeight,
+ // 全局航线高度 (EGM96海拔高/相对起飞点高度/AGL相对地面高度)
+ height,
+ // 航点飞行速度
+ waypointSpeed: { '#text': waypointSpeed || 10 },
+ // 沿航线方向 - 可使用当前默认值
+ waypointHeadingParam: {
+ waypointHeadingMode: {
+ '#text': waypointHeadingMode || 'followWayline',
+ },
+ waypointHeadingAngle: { '#text': 0 },
+ waypointPoiPoint: {
+ '#text': '0.000000,0.000000,0.000000',
+ },
+ waypointHeadingPathMode: { '#text': 'followBadArc' },
+ waypointHeadingPoiIndex: { '#text': 0 },
+ },
+ // 航点类型
+ waypointTurnParam: {
+ waypointTurnMode: {
+ '#text': waypointTurnMode || 'toPointAndStopWithDiscontinuityCurvature',
+ },
+ waypointTurnDampingDist: { '#text': 0.2 },
+ },
+ // 是否全局参数
+ useGlobalHeight: { '#text': 1 },
+ useGlobalSpeed: { '#text': 0 },
+ useGlobalHeadingParam: { '#text': 1 },
+ useGlobalTurnParam: { '#text': 1 },
+ useStraightLine: { '#text': 1 },
+ }
+ if (actionGroup) {
+ placemark.actionGroup = actionGroup
+ }
- fileTemplate.Folder.Placemark.push(placemark);
- });
+ fileTemplate.Folder.Placemark.push(placemark)
+ })
- const fileWaylines = waylinesContext(fileTemplate);
- return {
- fileName: waylineName || fileName,
- template: fileTemplate,
- waylines: fileWaylines,
- };
- } catch (error) {
- console.log(error);
- return error;
- }
- };
+ const fileWaylines = waylinesContext(fileTemplate)
+ return {
+ fileName: waylineName || fileName,
+ template: fileTemplate,
+ waylines: fileWaylines,
+ }
+ } catch (error) {
+ console.log(error)
+ return error
+ }
+ }
- const save = async (fileInfo) => {
- const JsZip = new JSZIP();
- const { fileName, template, waylines } = fileInfo;
- const templateXml = JSONToXML(template, '', true);
- const waylinesWpml = JSONToXML(waylines, '', true);
- JsZip.file('wpmz/template.kml', templateXml);
- JsZip.file('wpmz/waylines.wpml', waylinesWpml);
- const fileBlob = await JsZip.generateAsync({ type: 'blob' });
- // saveAs(kmzFile, `${fileName}.kmz`)
- return fileBlob;
- };
+ const save = async fileInfo => {
+ const JsZip = new JSZIP()
+ const { fileName, template, waylines } = fileInfo
+ const templateXml = JSONToXML(template, '', true)
+ const waylinesWpml = JSONToXML(waylines, '', true)
+ JsZip.file('wpmz/template.kml', templateXml)
+ JsZip.file('wpmz/waylines.wpml', waylinesWpml)
+ const fileBlob = await JsZip.generateAsync({ type: 'blob' })
+ // saveAs(kmzFile, `${fileName}.kmz`)
+ return fileBlob
+ }
- const waylinesContext = (templateJson) => {
- const waylinesObj = {
- // 标准模版
- missionConfig: {
- flyToWaylineMode: null,
- finishAction: null,
- exitOnRCLost: null,
- executeRCLostAction: null,
- takeOffSecurityHeight: null,
- globalTransitionalSpeed: null,
- globalRTHHeight: null,
- droneInfo: null,
- payloadInfo: null,
- },
- Folder: {
- templateId: null,
- executeHeightMode: null,
- waylineId: null,
- autoFlightSpeed: null,
- /*
+ const waylinesContext = templateJson => {
+ const waylinesObj = {
+ // 标准模版
+ missionConfig: {
+ flyToWaylineMode: null,
+ finishAction: null,
+ exitOnRCLost: null,
+ executeRCLostAction: null,
+ takeOffSecurityHeight: null,
+ globalTransitionalSpeed: null,
+ globalRTHHeight: null,
+ droneInfo: null,
+ payloadInfo: null,
+ },
+ Folder: {
+ templateId: null,
+ executeHeightMode: null,
+ waylineId: null,
+ autoFlightSpeed: null,
+ /*
waylines.wpml和template.xml的Placemark通用
不同点:
waylineId = templateId
ellipsoidHeight、 height 替换成 executeHeight
*/
- Placemark: null,
- },
- };
- Object.keys(waylinesObj).forEach((key) => {
- if (
- Object.prototype.toString.call(waylinesObj[key]) === '[object Object]'
- ) {
- Object.keys(waylinesObj[key]).forEach((item) => {
- waylinesObj[key][item] = templateJson[key][item];
- if (item === 'executeHeightMode') {
- waylinesObj[key][item] =
- templateJson[key].waylineCoordinateSysParam.heightMode;
- }
- if (item === 'waylineId') {
- waylinesObj[key][item] = templateJson[key].templateId;
- }
- if (item === 'Placemark') {
- const placemarks = _.cloneDeep(templateJson[key][item]);
- placemarks.forEach((placemark) => {
- placemark.executeHeight = {
- '#text': placemark.ellipsoidHeight?.['#text'] || '',
- };
- delete placemark.ellipsoidHeight;
- delete placemark.height;
- });
- waylinesObj[key][item] = placemarks;
- }
- });
- } else {
- waylinesObj[key] = templateJson[key];
- }
- });
- return waylinesObj;
- };
+ Placemark: null,
+ },
+ }
+ Object.keys(waylinesObj).forEach(key => {
+ if (Object.prototype.toString.call(waylinesObj[key]) === '[object Object]') {
+ Object.keys(waylinesObj[key]).forEach(item => {
+ waylinesObj[key][item] = templateJson[key][item]
+ if (item === 'executeHeightMode') {
+ waylinesObj[key][item] = templateJson[key].waylineCoordinateSysParam.heightMode
+ }
+ if (item === 'waylineId') {
+ waylinesObj[key][item] = templateJson[key].templateId
+ }
+ if (item === 'Placemark') {
+ const placemarks = _.cloneDeep(templateJson[key][item])
+ placemarks.forEach(placemark => {
+ placemark.executeHeight = {
+ '#text': placemark.ellipsoidHeight?.['#text'] || '',
+ }
+ delete placemark.ellipsoidHeight
+ delete placemark.height
+ })
+ waylinesObj[key][item] = placemarks
+ }
+ })
+ } else {
+ waylinesObj[key] = templateJson[key]
+ }
+ })
+ return waylinesObj
+ }
- return {
- create,
- createNoramlWaylines,
- createPlanarWayline,
- createPointWayLines,
- save,
- };
+ return {
+ create,
+ createNoramlWaylines,
+ createPlanarWayline,
+ createPointWayLines,
+ save,
+ }
}
--
Gitblit v1.9.3