| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980 |
- import JSZip from "jszip";
- import JSZipUtils from "jszip-utils";
- import { XMLParser, XMLBuilder, XMLValidator } from "fast-xml-parser";
- // import { ACTION_ITEM_LIST } from "@/constants/action-item";
- // import { params as actionParams } from "@/constants/action-function-params";
- import { UUID } from "@/utils/Utils";
- /**
- * @description 航线template示例文件
- */
- // 有机巢的用这个模板 m3TD
- export let inclinetemplate2 = {
- Document: {
- "wpml:author": 13874958346,
- "wpml:createTime": 1688652646205,
- "wpml:updateTime": 1688978993216,
- "wpml:missionConfig": {
- "wpml:flyToWaylineMode": "safely",
- "wpml:finishAction": "goHome",
- "wpml:exitOnRCLost": "goContinue",
- "wpml:executeRCLostAction": "goBack",
- "wpml:takeOffSecurityHeight": 20,
- "wpml:takeOffRefPoint": "28.192009,113.058389,16.581492",
- "wpml:takeOffRefPointAGLHeight": 0,
- "wpml:globalTransitionalSpeed": 15,
- "wpml:globalRTHHeight": 100,
- "wpml:droneInfo": {
- "wpml:droneEnumValue": 91,
- "wpml:droneSubEnumValue": 1,
- },
- "wpml:payloadInfo": {
- "wpml:payloadEnumValue": 81,
- "wpml:payloadSubEnumValue": 2,
- "wpml:payloadPositionIndex": 0,
- },
- },
- Folder: {
- "wpml:templateType": "mapping3d",
- "wpml:templateId": 0,
- "wpml:waylineCoordinateSysParam": {
- "wpml:coordinateMode": "WGS84",
- 'wpml:heightMode': 'EGM96',
- 'wpml:globalShootHeight': 102.2,
- 'wpml:surfaceFollowModeEnable': 1,
- 'wpml:isRealtimeSurfaceFollow': 0,
- 'wpml:surfaceRelativeHeight': 102.2,
- 'wpml:dsmFile': 'wpmz/res/dsm/wgs84_ASTGTMV003_N28E112_dem_9.tif',
- },
- 'wpml:autoFlightSpeed': 15,
- Placemark:
- {
- 'wpml:caliFlightEnable': 0,
- 'wpml:inclinedGimbalPitch': 45,
- 'wpml:shootType': 'time',
- 'wpml:direction': 0,
- 'wpml:margin': 0,
- 'wpml:inclinedFlightSpeed': 12,
- 'wpml:efficiencyFlightModeEnable': 0,
- 'wpml:overlap': {
- 'wpml:orthoCameraOverlapH': 80,
- 'wpml:orthoCameraOverlapW': 70,
- 'wpml:inclinedCameraOverlapH': 80,
- 'wpml:inclinedCameraOverlapW': 70
- },
- 'Polygon': {
- 'outerBoundaryIs': {
- 'LinearRing': {
- 'coordinates': ''
- }
- }
- },
- 'wpml:ellipsoidHeight': 102.2,
- 'wpml:height': 102.2,
-
- },
- "wpml:payloadParam": {
- "wpml:payloadPositionIndex": 0,
- "wpml:focusMode": "firstPoint",
- "wpml:meteringMode": "average",
- "wpml:returnMode": "singleReturnFirst",
- "wpml:samplingRate": 240000,
- "wpml:scanningMode": "repetitive",
- "wpml:imageFormat": "visable,ir",
- },
- },
- },
- }
- export let inclinetemplate = {
- Document: {
- "wpml:missionConfig": {
- "wpml:flyToWaylineMode": "safely",
- "wpml:finishAction": "goHome",
- "wpml:exitOnRCLost": "goContinue",
- "wpml:executeRCLostAction": "goBack",
- "wpml:takeOffSecurityHeight": 20,
- "wpml:globalTransitionalSpeed": 15,
- "wpml:globalRTHHeight": 100,
- 'wpml:waylineAvoidLimitAreaMode': 0,
- "wpml:droneInfo": {
- "wpml:droneEnumValue": 91,
- "wpml:droneSubEnumValue": 1,
- },
- "wpml:payloadInfo": {
- "wpml:payloadEnumValue": 81,
- "wpml:payloadSubEnumValue": 2,
- "wpml:payloadPositionIndex": 0,
- },
- },
- Folder: [{
- "wpml:templateId": 0,
- "wpml:autoFlightSpeed": 10,
- "wpml:executeHeightMode": "WGS84",
- "wpml:waylineId": 0,
- "wpml:startActionGroup": {
- "wpml:action": [{
- "wpml:actionId": 0,
- "wpml:actionActuatorFunc": "gimbalRotate",
- 'wpml:actionActuatorFuncParam': {
- 'wpml:gimbalHeadingYawBase': 'aircraft',
- 'wpml:gimbalRotateMode': 'absoluteAngle',
- 'wpml:gimbalPitchRotateEnable': 1,
- 'wpml:gimbalPitchRotateAngle': -90,
- 'wpml:gimbalRollRotateEnable': 0,
- 'wpml:gimbalRollRotateAngle': 0,
- 'wpml:gimbalYawRotateEnable': 1,
- 'wpml:gimbalYawRotateAngle': 0,
- 'wpml:gimbalRotateTimeEnable': 0,
- 'wpml:gimbalRotateTime': 10,
- 'wpml:payloadPositionIndex': 0,
- }
- },
- {
- "wpml:actionId": 1,
- "wpml:actionActuatorFunc": "hover",
- 'wpml:actionActuatorFuncParam': {
- 'wpml:hoverTime': 0.5,
- }
- },
- {
- "wpml:actionId": 2,
- "wpml:actionActuatorFunc": "setFocusType",
- 'wpml:actionActuatorFuncParam': {
- 'wpml:cameraFocusType': 'manual',
- 'wpml:payloadPositionIndex': 0
- }
- },
- {
- "wpml:actionId": 3,
- "wpml:actionActuatorFunc": "focus",
- 'wpml:actionActuatorFuncParam': {
- 'wpml:focusX': 0,
- 'wpml:focusY': 0,
- 'wpml:focusRegionWidth': 0,
- 'wpml:focusRegionHeight': 0,
- 'wpml:isPointFocus': 0,
- 'wpml:isInfiniteFocus': 1,
- 'wpml:payloadPositionIndex': 0
- }
- },
- {
- "wpml:actionId": 4,
- "wpml:actionActuatorFunc": "hover",
- 'wpml:actionActuatorFuncParam': {
- 'wpml:hoverTime': 1,
- }
- }
- ]
- },
- Placemark: [],
- // "wpml:payloadParam": {
- // "wpml:payloadPositionIndex": 0,
- // "wpml:focusMode": "firstPoint",
- // "wpml:meteringMode": "average",
- // "wpml:returnMode": "singleReturnFirst",
- // "wpml:samplingRate": 240000,
- // "wpml:scanningMode": "repetitive",
- // "wpml:imageFormat": "visable,ir",
- // },
- },
- {
- "wpml:templateId": 0,
- "wpml:autoFlightSpeed": 10,
- "wpml:executeHeightMode": "WGS84",
- "wpml:waylineId": 0,
- "wpml:startActionGroup": {
- "wpml:action": [{
- "wpml:actionId": 0,
- "wpml:actionActuatorFunc": "gimbalRotate",
- 'wpml:actionActuatorFuncParam': {
- 'wpml:gimbalHeadingYawBase': 'aircraft',
- 'wpml:gimbalRotateMode': 'absoluteAngle',
- 'wpml:gimbalPitchRotateEnable': 1,
- 'wpml:gimbalPitchRotateAngle': -90,
- 'wpml:gimbalRollRotateEnable': 0,
- 'wpml:gimbalRollRotateAngle': 0,
- 'wpml:gimbalYawRotateEnable': 1,
- 'wpml:gimbalYawRotateAngle': 0,
- 'wpml:gimbalRotateTimeEnable': 0,
- 'wpml:gimbalRotateTime': 10,
- 'wpml:payloadPositionIndex': 0,
- }
- },
- {
- "wpml:actionId": 1,
- "wpml:actionActuatorFunc": "hover",
- 'wpml:actionActuatorFuncParam': {
- 'wpml:hoverTime': 0.5,
- }
- },
- {
- "wpml:actionId": 2,
- "wpml:actionActuatorFunc": "setFocusType",
- 'wpml:actionActuatorFuncParam': {
- 'wpml:cameraFocusType': 'manual',
- 'wpml:payloadPositionIndex': 0
- }
- },
- {
- "wpml:actionId": 3,
- "wpml:actionActuatorFunc": "focus",
- 'wpml:actionActuatorFuncParam': {
- 'wpml:focusX': 0,
- 'wpml:focusY': 0,
- 'wpml:focusRegionWidth': 0,
- 'wpml:focusRegionHeight': 0,
- 'wpml:isPointFocus': 0,
- 'wpml:isInfiniteFocus': 1,
- 'wpml:payloadPositionIndex': 0
- }
- },
- {
- "wpml:actionId": 4,
- "wpml:actionActuatorFunc": "hover",
- 'wpml:actionActuatorFuncParam': {
- 'wpml:hoverTime': 1,
- }
- }
- ]
- },
- Placemark: [],
- // "wpml:payloadParam": {
- // "wpml:payloadPositionIndex": 0,
- // "wpml:focusMode": "firstPoint",
- // "wpml:meteringMode": "average",
- // "wpml:returnMode": "singleReturnFirst",
- // "wpml:samplingRate": 240000,
- // "wpml:scanningMode": "repetitive",
- // "wpml:imageFormat": "visable,ir",
- // },
- },
- {
- "wpml:templateId": 0,
- "wpml:autoFlightSpeed": 10,
- "wpml:executeHeightMode": "WGS84",
- "wpml:waylineId": 0,
- "wpml:startActionGroup": {
- "wpml:action": [{
- "wpml:actionId": 0,
- "wpml:actionActuatorFunc": "gimbalRotate",
- 'wpml:actionActuatorFuncParam': {
- 'wpml:gimbalHeadingYawBase': 'aircraft',
- 'wpml:gimbalRotateMode': 'absoluteAngle',
- 'wpml:gimbalPitchRotateEnable': 1,
- 'wpml:gimbalPitchRotateAngle': -90,
- 'wpml:gimbalRollRotateEnable': 0,
- 'wpml:gimbalRollRotateAngle': 0,
- 'wpml:gimbalYawRotateEnable': 1,
- 'wpml:gimbalYawRotateAngle': 0,
- 'wpml:gimbalRotateTimeEnable': 0,
- 'wpml:gimbalRotateTime': 10,
- 'wpml:payloadPositionIndex': 0,
- }
- },
- {
- "wpml:actionId": 1,
- "wpml:actionActuatorFunc": "hover",
- 'wpml:actionActuatorFuncParam': {
- 'wpml:hoverTime': 0.5,
- }
- },
- {
- "wpml:actionId": 2,
- "wpml:actionActuatorFunc": "setFocusType",
- 'wpml:actionActuatorFuncParam': {
- 'wpml:cameraFocusType': 'manual',
- 'wpml:payloadPositionIndex': 0
- }
- },
- {
- "wpml:actionId": 3,
- "wpml:actionActuatorFunc": "focus",
- 'wpml:actionActuatorFuncParam': {
- 'wpml:focusX': 0,
- 'wpml:focusY': 0,
- 'wpml:focusRegionWidth': 0,
- 'wpml:focusRegionHeight': 0,
- 'wpml:isPointFocus': 0,
- 'wpml:isInfiniteFocus': 1,
- 'wpml:payloadPositionIndex': 0
- }
- },
- {
- "wpml:actionId": 4,
- "wpml:actionActuatorFunc": "hover",
- 'wpml:actionActuatorFuncParam': {
- 'wpml:hoverTime': 1,
- }
- }
- ]
- },
- Placemark: [],
- // "wpml:payloadParam": {
- // "wpml:payloadPositionIndex": 0,
- // "wpml:focusMode": "firstPoint",
- // "wpml:meteringMode": "average",
- // "wpml:returnMode": "singleReturnFirst",
- // "wpml:samplingRate": 240000,
- // "wpml:scanningMode": "repetitive",
- // "wpml:imageFormat": "visable,ir",
- // },
- },
- {
- "wpml:templateId": 0,
- "wpml:autoFlightSpeed": 10,
- "wpml:executeHeightMode": "WGS84",
- "wpml:waylineId": 0,
- "wpml:startActionGroup": {
- "wpml:action": [{
- "wpml:actionId": 0,
- "wpml:actionActuatorFunc": "gimbalRotate",
- 'wpml:actionActuatorFuncParam': {
- 'wpml:gimbalHeadingYawBase': 'aircraft',
- 'wpml:gimbalRotateMode': 'absoluteAngle',
- 'wpml:gimbalPitchRotateEnable': 1,
- 'wpml:gimbalPitchRotateAngle': -90,
- 'wpml:gimbalRollRotateEnable': 0,
- 'wpml:gimbalRollRotateAngle': 0,
- 'wpml:gimbalYawRotateEnable': 1,
- 'wpml:gimbalYawRotateAngle': 0,
- 'wpml:gimbalRotateTimeEnable': 0,
- 'wpml:gimbalRotateTime': 10,
- 'wpml:payloadPositionIndex': 0,
- }
- },
- {
- "wpml:actionId": 1,
- "wpml:actionActuatorFunc": "hover",
- 'wpml:actionActuatorFuncParam': {
- 'wpml:hoverTime': 0.5,
- }
- },
- {
- "wpml:actionId": 2,
- "wpml:actionActuatorFunc": "setFocusType",
- 'wpml:actionActuatorFuncParam': {
- 'wpml:cameraFocusType': 'manual',
- 'wpml:payloadPositionIndex': 0
- }
- },
- {
- "wpml:actionId": 3,
- "wpml:actionActuatorFunc": "focus",
- 'wpml:actionActuatorFuncParam': {
- 'wpml:focusX': 0,
- 'wpml:focusY': 0,
- 'wpml:focusRegionWidth': 0,
- 'wpml:focusRegionHeight': 0,
- 'wpml:isPointFocus': 0,
- 'wpml:isInfiniteFocus': 1,
- 'wpml:payloadPositionIndex': 0
- }
- },
- {
- "wpml:actionId": 4,
- "wpml:actionActuatorFunc": "hover",
- 'wpml:actionActuatorFuncParam': {
- 'wpml:hoverTime': 1,
- }
- }
- ]
- },
- Placemark: [],
- // "wpml:payloadParam": {
- // "wpml:payloadPositionIndex": 0,
- // "wpml:focusMode": "firstPoint",
- // "wpml:meteringMode": "average",
- // "wpml:returnMode": "singleReturnFirst",
- // "wpml:samplingRate": 240000,
- // "wpml:scanningMode": "repetitive",
- // "wpml:imageFormat": "visable,ir",
- // },
- },
- {
- "wpml:templateId": 0,
- "wpml:autoFlightSpeed": 10,
- "wpml:executeHeightMode": "WGS84",
- "wpml:waylineId": 0,
- "wpml:startActionGroup": {
- "wpml:action": [{
- "wpml:actionId": 0,
- "wpml:actionActuatorFunc": "gimbalRotate",
- 'wpml:actionActuatorFuncParam': {
- 'wpml:gimbalHeadingYawBase': 'aircraft',
- 'wpml:gimbalRotateMode': 'absoluteAngle',
- 'wpml:gimbalPitchRotateEnable': 1,
- 'wpml:gimbalPitchRotateAngle': -90,
- 'wpml:gimbalRollRotateEnable': 0,
- 'wpml:gimbalRollRotateAngle': 0,
- 'wpml:gimbalYawRotateEnable': 1,
- 'wpml:gimbalYawRotateAngle': 0,
- 'wpml:gimbalRotateTimeEnable': 0,
- 'wpml:gimbalRotateTime': 10,
- 'wpml:payloadPositionIndex': 0,
- }
- },
- {
- "wpml:actionId": 1,
- "wpml:actionActuatorFunc": "hover",
- 'wpml:actionActuatorFuncParam': {
- 'wpml:hoverTime': 0.5,
- }
- },
- {
- "wpml:actionId": 2,
- "wpml:actionActuatorFunc": "setFocusType",
- 'wpml:actionActuatorFuncParam': {
- 'wpml:cameraFocusType': 'manual',
- 'wpml:payloadPositionIndex': 0
- }
- },
- {
- "wpml:actionId": 3,
- "wpml:actionActuatorFunc": "focus",
- 'wpml:actionActuatorFuncParam': {
- 'wpml:focusX': 0,
- 'wpml:focusY': 0,
- 'wpml:focusRegionWidth': 0,
- 'wpml:focusRegionHeight': 0,
- 'wpml:isPointFocus': 0,
- 'wpml:isInfiniteFocus': 1,
- 'wpml:payloadPositionIndex': 0
- }
- },
- {
- "wpml:actionId": 4,
- "wpml:actionActuatorFunc": "hover",
- 'wpml:actionActuatorFuncParam': {
- 'wpml:hoverTime': 1,
- }
- }
- ]
- },
- Placemark: [],
- // "wpml:payloadParam": {
- // "wpml:payloadPositionIndex": 0,
- // "wpml:focusMode": "firstPoint",
- // "wpml:meteringMode": "average",
- // "wpml:returnMode": "singleReturnFirst",
- // "wpml:samplingRate": 240000,
- // "wpml:scanningMode": "repetitive",
- // "wpml:imageFormat": "visable,ir",
- // },
- }],
- },
- };
- // 有机巢的用这个模板
- export let Havetemplate = {
- Document: {
- "wpml:missionConfig": {
- "wpml:flyToWaylineMode": "safely",
- "wpml:finishAction": "goHome",
- "wpml:exitOnRCLost": "executeLostAction",
- "wpml:executeRCLostAction": "goBack",
- "wpml:takeOffSecurityHeight": 20,
- "wpml:globalTransitionalSpeed": 15,
- "wpml:globalRTHHeight": 100,
- "wpml:droneInfo": {
- "wpml:droneEnumValue": 91,
- "wpml:droneSubEnumValue": 1,
- },
- "wpml:payloadInfo": {
- "wpml:payloadEnumValue": 81,
- "wpml:payloadSubEnumValue": 2,
- "wpml:payloadPositionIndex": 0,
- },
- },
- Folder: {
- "wpml:templateId": 0,
- "wpml:autoFlightSpeed": 10,
- "wpml:executeHeightMode": "relativeToStartPoint",
- "wpml:waylineId": 0,
- "wpml:globalWaypointHeadingParam": {
- "wpml:waypointHeadingMode": "followWayline",
- "wpml:waypointHeadingAngle": 0,
- "wpml:waypointPoiPoint": "0.000000,0.000000,0.000000",
- "wpml:waypointHeadingPathMode": "followBadArc",
- "wpml:waypointHeadingPoiIndex": 0,
- },
- "wpml:globalWaypointTurnMode": "toPointAndStopWithDiscontinuityCurvature",
- "wpml:globalUseStraightLine": 1,
- Placemark: [],
- // "wpml:payloadParam": {
- // "wpml:payloadPositionIndex": 0,
- // "wpml:focusMode": "firstPoint",
- // "wpml:meteringMode": "average",
- // "wpml:returnMode": "singleReturnFirst",
- // "wpml:samplingRate": 240000,
- // "wpml:scanningMode": "repetitive",
- // "wpml:imageFormat": "visable,ir",
- // },
- },
- },
- };
- export let template = {
- Document: {
- "wpml:author": 13874958346,
- "wpml:createTime": 1688652646205,
- "wpml:updateTime": 1688978993216,
- "wpml:missionConfig": {
- "wpml:flyToWaylineMode": "safely",
- "wpml:finishAction": "goHome",
- "wpml:exitOnRCLost": "executeLostAction",
- "wpml:executeRCLostAction": "goBack",
- "wpml:takeOffSecurityHeight": 20,
- "wpml:takeOffRefPoint": "28.192009,113.058389,16.581492",
- "wpml:takeOffRefPointAGLHeight": 0,
- "wpml:globalTransitionalSpeed": 15,
- "wpml:globalRTHHeight": 100,
- "wpml:droneInfo": {
- "wpml:droneEnumValue": 91,
- "wpml:droneSubEnumValue": 1,
- },
- "wpml:payloadInfo": {
- "wpml:payloadEnumValue": 81,
- "wpml:payloadSubEnumValue": 2,
- "wpml:payloadPositionIndex": 0,
- },
- },
- Folder: {
- "wpml:templateType": "waypoint",
- "wpml:templateId": 0,
- "wpml:waylineId": 0,
- "wpml:executeHeightMode": "relativeToStartPoint",
- "wpml:waylineCoordinateSysParam": {
- "wpml:coordinateMode": "WGS84",
- "wpml:heightMode": "relativeToStartPoint",
- },
- "wpml:autoFlightSpeed": 10,
- "wpml:globalHeight": 20,
- "wpml:caliFlightEnable": 0,
- "wpml:gimbalPitchMode": "manual",
- "wpml:globalWaypointHeadingParam": {
- "wpml:waypointHeadingMode": "followWayline",
- "wpml:waypointHeadingAngle": 0,
- "wpml:waypointPoiPoint": "0.000000,0.000000,0.000000",
- "wpml:waypointHeadingPathMode": "followBadArc",
- "wpml:waypointHeadingPoiIndex": 0,
- },
- "wpml:globalWaypointTurnMode": "toPointAndStopWithDiscontinuityCurvature",
- "wpml:globalUseStraightLine": 1,
- Placemark: [
- {
- "Point": {
- "coordinates": " 112.946808121,28.012694428"
- },
- "wpml:index": "0",
- "wpml:ellipsoidHeight": "20",
- "wpml:height": "20",
- "wpml:waypointSpeed": "5",
- "wpml:waypointHeadingParam": {
- "wpml:waypointHeadingMode": "followWayline",
- "wpml:waypointHeadingAngle": "0",
- "wpml:waypointPoiPoint": "0.000000,0.000000,0.000000",
- "wpml:waypointHeadingPathMode": "followBadArc",
- "wpml:waypointHeadingPoiIndex": "0"
- },
- "wpml:waypointTurnParam": {
- "wpml:waypointTurnMode": "toPointAndStopWithDiscontinuityCurvature",
- "wpml:waypointTurnDampingDist": 0
- },
- "wpml:useGlobalHeight": "1",
- "wpml:useGlobalSpeed": "1",
- "wpml:useGlobalHeadingParam": "1",
- "wpml:useGlobalTurnParam": "1",
- "wpml:useStraightLine": "1",
- "wpml:isRisky": "0"
- },
- ],
- "wpml:payloadParam": {
- "wpml:payloadPositionIndex": 0,
- "wpml:focusMode": "firstPoint",
- "wpml:meteringMode": "average",
- "wpml:returnMode": "singleReturnFirst",
- "wpml:samplingRate": 240000,
- "wpml:scanningMode": "repetitive",
- "wpml:imageFormat": "visable,ir",
- },
- },
- },
- };
- /**
- * @description 航线wayline示例文件
- */
- export let wayline = {
- Document: {
- "wpml:missionConfig": {
- "wpml:flyToWaylineMode": "safely",
- "wpml:finishAction": "goHome",
- "wpml:exitOnRCLost": "executeLostAction",
- "wpml:executeRCLostAction": "goBack",
- "wpml:takeOffSecurityHeight": 20,
- "wpml:globalTransitionalSpeed": 15,
- "wpml:globalRTHHeight": 100,
- "wpml:droneInfo": {
- "wpml:droneEnumValue": 91,
- "wpml:droneSubEnumValue": 0,
- },
- "wpml:payloadInfo": {
- "wpml:payloadEnumValue": 80,
- "wpml:payloadSubEnumValue": 0,
- "wpml:payloadPositionIndex": 0,
- },
- },
- Folder: {
- "wpml:templateId": 0,
- "wpml:executeHeightMode": "relativeToStartPoint",
- "wpml:waylineId": 0,
- "wpml:distance": 486.405029296875,
- "wpml:duration": 59.816535949707,
- "wpml:autoFlightSpeed": 10,
- Placemark: [],
- },
- },
- };
- /**
- * @description 读取kml路径
- * @param {String} kml kml路径
- */
- export function readKMZ(kml) {
- let promise = new Promise((resolve, reject) => {
- JSZipUtils.getBinaryContent(kml, (err, data) => {
- if (err) {
- console.error(err);
- reject(err);
- }
- const zip = new JSZip();
- // zip.loadAsync:解压
- zip.loadAsync(data).then(async (res) => {
- let kmls = [];
- for (const key in res.files) {
- if (Object.hasOwnProperty.call(res.files, key)) {
- const element = res.files[key];
- let content = await element.async("text");
- kmls.push(content);
- }
- }
- resolve(kmls);
- });
- });
- });
- return promise;
- }
- export function readKMZ2(kml) {
- let promise = new Promise((resolve, reject) => {
- const zip = new JSZip();
- // zip.loadAsync:解压
- zip.loadAsync(kml).then(async (zip) => {
-
- const fileName = "wpmz/waylines.wpml";
-
- return zip.file(fileName).async("string");
- }).then((wayline) => {
- const parser = new XMLParser();
- resolve(parser.parse(wayline));
- })
- });
- return promise;
- }
- /**
- * @description 将xml文件转为json
- * @param {xml} xml
- * @returns
- */
- export function parserXml2Json(xml) {
- const parser = new XMLParser();
- return parser.parse(xml);
- }
- /**
- * @description 导出航线文件
- * @param {object} template
- * @param {object} wayline
- */
- export async function writeWPMZ(template, wayline) {
- // JSZip示例
- const zip = new JSZip();
- // JSON2XML转换器实例
- const builder = new XMLBuilder({
- ignoreAttributes: false, // 保留键名原样
- }
- );
- let xmlPrefix = `<?xml version="1.0" encoding="UTF-8"?>
- <kml xmlns="http://www.opengis.net/kml/2.2" xmlns:wpml="http://www.dji.com/wpmz/1.0.6">`;
- let xmlSuffix = "</kml>";
- const processedJson1 = Object.keys(template).reduce((acc, key) => {
- const newKey = key.charAt(0).toUpperCase() + key.slice(1);
- acc[newKey] = template[key];
- return acc;
- }, {});
- const processedJson2 = Object.keys(wayline).reduce((acc, key) => {
- const newKey = key.charAt(0).toUpperCase() + key.slice(1);
- acc[newKey] = wayline[key];
- return acc;
- }, {});
-
- // 创建一个名为“wpmz”的文件夹
- const wpmzFolder = zip.folder("wpmz");
- //将名为“template.kml”的文件添加到“wpmz”文件夹
- wpmzFolder.file(
- "template.kml",
- xmlPrefix + builder.build(processedJson1) + xmlSuffix
- );
- wpmzFolder.file(
- "waylines.wpml",
- xmlPrefix + builder.build(processedJson2) + xmlSuffix
- );
- // 生成KML
- let content = await zip.generateAsync({ type: "blob" });
- return content;
- }
- export function getKMZ(data) {
- // console.log("新解析航线", data.url);
- //let ipPrefix = 'https://hunan-ib.chinatowercom.cn/file/2k-sc-file/';
- //let ipPrefix = 'https://hunan-ib.chinatowercom.cn/file/2k-test-file/';
- //let ipPrefix = 'http://120.76.142.34:19000/cloud-bucket/';
- //let ipPrefix = 'https://gong001.oss-cn-hangzhou.aliyuncs.com/';
- // let ipSub = '';
- // const randomParam = '?t=' + new Date().getTime();
- // let encodeurl = encodeURI(ipPrefix + url + ipSub + randomParam);
- let encodeurl = data.url;
- return new Promise(function (resolve, reject) {
- // Step 1: Request the file
- JSZipUtils.getBinaryContent(encodeurl, function (err, data) {
- if (err) {
- reject(err);
- } else {
- resolve(data);
- }
- });
- })
- .then(function (files) {
- // Step 2: Unzip the file
- return JSZip.loadAsync(files);
- })
- .then(function (zip) {
- // Step 3: Get the file contents
- // const fileName = Object.keys(zip.files)[0];
- const fileName = "wpmz/template.kml";
- return zip.file(fileName).async("string");
- })
- .then((wayline) => {
- const parser = new XMLParser();
- return parser.parse(wayline)
- });
- }
- // 添加结束等时/等距拍照结束动作(整条航线)
- export const addIntervalStop = (template) => {
- // debugger;
- // 获取等时/等距拍照的尾数
- function getEndIndex(actionGroup) {
- if (
- actionGroup["wpml:action"] &&
- actionGroup?.["wpml:actionTrigger"]?.["wpml:actionTriggerType"] &&
- (actionGroup["wpml:actionTrigger"]["wpml:actionTriggerType"] ==
- "multipleTiming" ||
- actionGroup["wpml:actionTrigger"]["wpml:actionTriggerType"] ==
- "multipleDistance")
- ) {
- let endIndex = actionGroup["wpml:actionGroupEndIndex"];
- if (endIndex) {
- return endIndex;
- }
- }
- return null;
- }
- // 是否有reachPoint的actionGroup
- function hasReachPointActionGroup(actionGroup) {
- if (actionGroup.constructor == Object) {
- if (
- actionGroup?.["wpml:actionTrigger"]?.["wpml:actionTriggerType"] &&
- actionGroup["wpml:actionTrigger"]["wpml:actionTriggerType"] ==
- "reachPoint"
- ) {
- return actionGroup;
- }
- } else {
- actionGroup.forEach((group) => {
- if (
- group?.["wpml:actionTrigger"]?.["wpml:actionTriggerType"] &&
- group["wpml:actionTrigger"]["wpml:actionTriggerType"] == "reachPoint"
- ) {
- return group;
- }
- });
- }
- return false;
- }
- // 添加结束等时/等距拍照结束动作(具体的某一个)
- function addIntervalStopAction(endIndex) {
- // 构建动作
- let item = ACTION_ITEM_LIST.find((action) => {
- return action.type == "intervalStop";
- });
- let param = actionParams[item.type] || {};
- param["wpml:actionUUID"] = UUID();
- // 动作
- let intervalStopAction = {
- id: UUID(),
- "wpml:actionActuatorFunc": item.type,
- "wpml:actionActuatorFuncParam": param,
- };
- let stopPlacemark = template.Document.Folder.Placemark[endIndex];
- if (stopPlacemark && stopPlacemark["wpml:actionGroup"]) {
- let endActionGroup = hasReachPointActionGroup(
- stopPlacemark["wpml:actionGroup"]
- );
- if (endActionGroup) {
- if (endActionGroup["wpml:action"]) {
- if (endActionGroup["wpml:action"].constructor == Object) {
- endActionGroup["wpml:action"] = [
- endActionGroup["wpml:action"],
- intervalStopAction,
- ];
- } else {
- endActionGroup["wpml:action"].push(intervalStopAction);
- }
- } else {
- endActionGroup["wpml:action"] = intervalStopAction;
- }
- } else {
- if (stopPlacemark["wpml:actionGroup"].constructor == Object) {
- stopPlacemark["wpml:actionGroup"] = [
- stopPlacemark["wpml:actionGroup"],
- {
- "wpml:actionGroupId": 1,
- "wpml:actionGroupStartIndex": endIndex,
- "wpml:actionGroupEndIndex": endIndex,
- "wpml:actionGroupMode": "sequence",
- "wpml:actionTrigger": {
- "wpml:actionTriggerType": "reachPoint",
- },
- "wpml:action": intervalStopAction,
- },
- ];
- } else {
- stopPlacemark["wpml:actionGroup"].push({
- "wpml:actionGroupId": stopPlacemark["wpml:actionGroup"].length,
- "wpml:actionGroupStartIndex": endIndex,
- "wpml:actionGroupEndIndex": endIndex,
- "wpml:actionGroupMode": "sequence",
- "wpml:actionTrigger": {
- "wpml:actionTriggerType": "reachPoint",
- },
- "wpml:action": intervalStopAction,
- });
- }
- }
- } else {
- stopPlacemark["wpml:actionGroup"] = {
- "wpml:actionGroupId": 0,
- "wpml:actionGroupStartIndex": endIndex,
- "wpml:actionGroupEndIndex": endIndex,
- "wpml:actionGroupMode": "sequence",
- "wpml:actionTrigger": {
- "wpml:actionTriggerType": "reachPoint",
- },
- "wpml:action": intervalStopAction,
- };
- }
- }
- for (
- let index = 0;
- index < template.Document.Folder.Placemark.length;
- index++
- ) {
- let Placemark = template.Document.Folder.Placemark[index];
- if (Placemark["wpml:actionGroup"]) {
- if (Placemark["wpml:actionGroup"].constructor == Object) {
- let endIndex = getEndIndex(Placemark["wpml:actionGroup"]);
- if (endIndex) {
- addIntervalStopAction(endIndex);
- }
- } else {
- Placemark["wpml:actionGroup"].forEach(
- (actionGroup, actionGroupIndex) => {
- let endIndex = getEndIndex(actionGroup);
- if (endIndex) {
- addIntervalStopAction(endIndex);
- }
- }
- );
- }
- }
- }
- };
|