From 891ac00aaae4434027de3544356b94f6012b3f3e Mon Sep 17 00:00:00 2001
From: xieb <vip_xiaobin810@163.com>
Date: Mon, 01 Apr 2024 10:34:39 +0800
Subject: [PATCH] 规划生成航线xml
---
src/main/java/com/dji/sample/patches/xml/mode/Folder.java | 38
src/main/java/com/dji/sample/patches/xml/mode/share/action/param/ActionActuatorFuncParam.java | 55
src/main/java/com/dji/sample/patches/xml/mode/share/action/param/PanoShotParam.java | 36
src/main/java/com/dji/sample/patches/xml/mode/share/DroneInfo.java | 18
src/main/java/com/dji/sample/patches/xml/mode/share/ActionMode.java | 43
pom.xml | 30
src/main/resources/template/waylines.xml | 136 +
src/main/java/com/dji/sample/patches/xml/mode/Placemark.java | 35
src/main/java/com/dji/sample/patches/xml/mode/share/action/utils/PayloadParamUtils.java | 21
src/main/java/com/dji/sample/patches/xml/mode/share/AutoRerouteInfo.java | 18
src/main/java/com/dji/sample/patches/xml/mode/share/action/utils/PlacemarkUtils.java | 28
src/main/java/com/dji/sample/patches/xml/mode/share/action/param/CustomDirNameParam.java | 19
src/main/resources/template/template.xml | 181 ++
src/main/java/com/dji/sample/patches/xml/mode/MissionConfig.java | 58
src/main/java/com/dji/sample/patches/xml/mode/share/action/utils/FolderUtils.java | 47
src/main/java/com/dji/sample/patches/xml/mode/share/action/utils/ActionUtils.java | 71
src/main/java/com/dji/sample/patches/xml/controller/XMLController.java | 105 +
src/main/java/com/dji/sample/patches/xml/mode/CameraActionEnum.java | 40
src/main/java/com/dji/sample/patches/xml/mode/XMLTemplateModel.java | 98 +
src/main/java/com/dji/sample/patches/xml/mode/share/PayloadInfo.java | 19
src/main/resources/template2/template.xml | 14
src/main/java/com/dji/sample/patches/xml/mode/share/action/param/GimbalRotateParam.java | 68
src/main/java/com/dji/sample/patches/xml/mode/share/action/param/ZoomParam.java | 19
src/main/java/com/dji/sample/patches/utils/DistanceCalculator.java | 103 +
src/main/java/com/dji/sample/patches/xml/mode/share/action/param/StopRecordParam.java | 25
src/main/resources/template/newtemplate.xml | 868 +++++++++++
src/main/java/com/dji/sample/patches/xml/mode/share/action/param/FocusParam.java | 44
src/main/java/com/dji/sample/patches/xml/mode/WaypointHeadingParam.java | 20
src/main/java/com/dji/sample/patches/xml/mode/share/PayloadParam.java | 76
src/main/java/com/dji/sample/patches/xml/mode/share/action/param/TakePhotoParam.java | 36
src/main/java/com/dji/sample/patches/utils/GeoToolsUtil.java | 140 +
src/main/java/com/dji/sample/patches/xml/mode/share/action/utils/MissionConfigUtils.java | 31
src/main/resources/template/template.kml | 868 +++++++++++
src/main/java/com/dji/sample/patches/xml/mode/share/action/param/HoverParam.java | 19
src/main/java/com/dji/sample/patches/xml/mode/share/WaypointTurnParam.java | 35
src/main/java/com/dji/sample/patches/xml/mode/share/action/param/RotateYawParam.java | 27
src/main/java/com/dji/sample/patches/xml/mode/share/action/param/StartRecordParam.java | 34
src/main/resources/template2/newTemplate.xml | 48
src/main/java/com/dji/sample/patches/xml/mode/WaylineCoordinateSysParam.java | 17
src/main/java/com/dji/sample/patches/xml/mode/share/ActionTrigger.java | 30
src/main/resources/template/newwaylines.xml | 725 +++++++++
src/main/java/com/dji/sample/patches/xml/mode/share/action/param/GimbalEvenlyRotateParam.java | 20
src/main/java/com/dji/sample/patches/xml/mode/share/action/param/OrientedShootParam.java | 152 +
src/main/java/com/dji/sample/patches/xml/mode/share/ActionGroup.java | 45
src/main/java/com/dji/sample/patches/xml/mode/share/GlobalWaypointHeadingParam.java | 43
45 files changed, 4,593 insertions(+), 10 deletions(-)
diff --git a/pom.xml b/pom.xml
index 7295ed2..7647f29 100644
--- a/pom.xml
+++ b/pom.xml
@@ -30,15 +30,15 @@
<javax-jaxb.version>2.3.0</javax-jaxb.version>
</properties>
-<repositories>
- <repository>
- <id>osgeo</id>
- <name>OSGeo Release Repository</name>
- <url>https://repo.osgeo.org/repository/release/</url>
- <snapshots><enabled>false</enabled></snapshots>
- <releases><enabled>true</enabled></releases>
- </repository>
-</repositories>
+ <repositories>
+ <repository>
+ <id>osgeo</id>
+ <name>OSGeo Release Repository</name>
+ <url>https://repo.osgeo.org/repository/release/</url>
+ <snapshots><enabled>false</enabled></snapshots>
+ <releases><enabled>true</enabled></releases>
+ </repository>
+ </repositories>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
@@ -200,7 +200,6 @@
<version>1.2.33</version>
</dependency>
-
<!-- aop依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
@@ -241,6 +240,17 @@
<version>0.7</version>
</dependency>
+ <!-- xml相关操作 -->
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-thymeleaf</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.freemarker</groupId>
+ <artifactId>freemarker</artifactId>
+ </dependency>
+
</dependencies>
diff --git a/src/main/java/com/dji/sample/patches/utils/DistanceCalculator.java b/src/main/java/com/dji/sample/patches/utils/DistanceCalculator.java
new file mode 100644
index 0000000..e36b398
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/utils/DistanceCalculator.java
@@ -0,0 +1,103 @@
+package com.dji.sample.patches.utils;
+
+import org.locationtech.jts.geom.Coordinate;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION: 计算两个经纬度点之间的距离(以公里为单位)
+ * @USER: aix
+ * @DATE: 2024/3/25 14:25
+ */
+public class DistanceCalculator {
+
+ private static final int EARTH_RADIUS_KM = 6371; // 地球半径,单位:公里
+
+ /**
+ * 使用Haversine公式计算两个经纬度点之间的距离(单位:公里)
+ *
+ * @param lat1 第一个点的纬度
+ * @param lon1 第一个点的经度
+ * @param lat2 第二个点的纬度
+ * @param lon2 第二个点的经度
+ * @return 两点之间的距离(单位:公里)
+ */
+ public static double calculateDistance(double lat1, double lon1, double lat2, double lon2) {
+ double dLat = Math.toRadians(lat2 - lat1);
+ double dLon = Math.toRadians(lon2 - lon1);
+
+ lat1 = Math.toRadians(lat1);
+ lat2 = Math.toRadians(lat2);
+
+ double a = Math.pow(Math.sin(dLat / 2), 2)
+ + Math.pow(Math.sin(dLon / 2), 2) * Math.cos(lat1) * Math.cos(lat2);
+ double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
+ double distance = EARTH_RADIUS_KM * c;
+
+ return distance;
+ }
+
+ /**
+ * 中心点排序
+ * @param coordinates 中心点数组
+ * @param airportLat 纬度
+ * @param airportLon 经度
+ * @param index 索引
+ * @param retCoordinate 返回结果
+ * @return
+ */
+ public static Coordinate[] sortByDistance(List<Coordinate> coordinates, double airportLat, double airportLon,int index,Coordinate[] retCoordinate) {
+ // 创建一个列表来保存坐标、对应的距离以及原始下标
+ List<Map.Entry<Coordinate, Map.Entry<Double, Integer>>> distanceList = new ArrayList<>();
+ for (int i = 0; i < coordinates.size(); i++) {
+ Coordinate coord = coordinates.get(i);
+ double distance = calculateDistance(airportLat, airportLon, coord.y, coord.x); // 注意:y是纬度,x是经度
+ distanceList.add(new AbstractMap.SimpleEntry<>(coord, new AbstractMap.SimpleEntry<>(distance, i)));
+ }
+
+ // 根据距离进行排序
+ distanceList.sort(Comparator.comparingDouble(entry -> entry.getValue().getKey()));
+
+ //中心点排序结果
+ retCoordinate[index] = distanceList.get(0).getKey();
+ coordinates.remove(distanceList.get(0).getKey());
+ if (coordinates.size() > 0) {
+ index = index+1;
+ sortByDistance(coordinates,distanceList.get(0).getKey().y,distanceList.get(0).getKey().x,index,retCoordinate);
+ }
+
+ return retCoordinate;
+ }
+
+ public static Coordinate[] getFirstPolygon(List<Coordinate> coordinatesCentro,Coordinate[] afterCoor,List<List<Coordinate>> coordinates) {
+ // 创建一个列表来保存坐标、对应的距离以及原始下标
+ List<Map.Entry<Coordinate, List<List<Coordinate>>>> distanceList = new ArrayList<>();
+ for (int i = 0; i < coordinates.size(); i++) {
+ Coordinate coord = coordinatesCentro.get(i);
+ distanceList.add(new AbstractMap.SimpleEntry<>(coord, coordinates));
+ }
+
+ // 如果你需要排序前的下标,你可以通过以下方式获取它们:
+ Map<Coordinate, List<List<Coordinate>>> originalIndexMap = distanceList.stream()
+ .collect(Collectors.toMap(entry -> entry.getKey(), entry -> entry.getValue()));
+
+ // 现在你可以通过坐标查找原始的下标
+ // 例如:int originalIndex = originalIndexMap.get(someCoordinate);
+
+ Coordinate[] retcoor = new Coordinate[afterCoor.length * 4 - 3];
+ for (int i = 0; i<afterCoor.length;i++) {
+ originalIndexMap.get(afterCoor[i]);
+ System.out.println(originalIndexMap.get(afterCoor[i]));
+ }
+
+ return null;
+
+ }
+
+
+
+
+
+}
diff --git a/src/main/java/com/dji/sample/patches/utils/GeoToolsUtil.java b/src/main/java/com/dji/sample/patches/utils/GeoToolsUtil.java
new file mode 100644
index 0000000..d8899bd
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/utils/GeoToolsUtil.java
@@ -0,0 +1,140 @@
+package com.dji.sample.patches.utils;
+
+import com.dji.sample.patches.model.entity.LotInfo;
+import org.geotools.geometry.jts.JTSFactoryFinder;
+import org.locationtech.jts.geom.Coordinate;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.io.ParseException;
+import org.locationtech.jts.io.WKTReader;
+
+import java.util.*;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION:
+ * @USER: aix
+ * @DATE: 2024/3/25 10:35
+ */
+public class GeoToolsUtil {
+
+ /**
+ * 获取中心点位置
+ *
+ * @param geometry Geometry
+ * @return
+ */
+ public static Coordinate getCentro(Geometry geometry) {
+ return geometry.getCentroid().getCoordinate();
+ }
+
+ /**
+ * 获取4个点的经纬度
+ *
+ * @param geometry Geometry
+ * @return
+ */
+ public static List<Coordinate> getExtremePoints(Geometry geometry) {
+ List<Coordinate> extremePoints = new ArrayList<>();
+
+ Envelope envelope = geometry.getEnvelopeInternal();
+
+ // 获取4个点经纬度
+ extremePoints.add(new Coordinate(envelope.getMinX(), envelope.getMaxY()));
+ extremePoints.add(new Coordinate(envelope.getMinX(), envelope.getMinY()));
+ extremePoints.add(new Coordinate(envelope.getMaxX(), envelope.getMinY()));
+ extremePoints.add(new Coordinate(envelope.getMaxX(), envelope.getMaxY()));
+
+ return extremePoints;
+ }
+
+ /**
+ * 航线点排序
+ *
+ * @return
+ */
+ public static Coordinate [] getRoutePointOrder(List<LotInfo> list) {
+ List<Coordinate> centros = new ArrayList<>();
+ List<List<Coordinate>> extremePoints = new ArrayList<>();
+ Map<Coordinate,List<Coordinate>> points = new HashMap<>();
+ list.forEach(patche -> {
+ String wkt = patche.getDkfw();
+ // 解析WKT字符串为多边形
+ WKTReader wktReader = new WKTReader(JTSFactoryFinder.getGeometryFactory());
+ Geometry polygon = null;
+ try {
+ polygon = wktReader.read(wkt);
+ } catch (ParseException e) {
+ throw new RuntimeException(e);
+ }
+
+ // 开始封装中心点坐标
+ Coordinate coordinateCentro = getCentro(polygon);
+ centros.add(coordinateCentro);
+
+ // 开始封装图斑4个航线
+ List<Coordinate> coordinatePointList = getExtremePoints(polygon);
+ extremePoints.add(coordinatePointList);
+ points.put(coordinateCentro,coordinatePointList);
+
+ });
+
+ // 开始排序
+ // 机场经纬度
+ double airportLat = 28.624514734; // 机场纬度
+ double airportLon = 115.856725497; // 机场经度
+ Coordinate [] coordinates = new Coordinate[centros.size() + 1];
+ List<Coordinate> coordinateList = new ArrayList<>();
+ coordinates[0] = new Coordinate(airportLon, airportLat); //第一个为机场经纬度
+ coordinateList.add(new Coordinate(airportLon, airportLat)); //第一个为机场经纬度)
+ for (int i = 1; i < centros.size() + 1; i++) {
+ coordinates[i] = centros.get(i-1);
+ coordinateList.add(centros.get(i-1));
+ }
+
+ // 对中心坐标数组进行排序
+ Coordinate[] retCoordinate = new Coordinate[coordinateList.size()];
+ Coordinate[] sortedCoordinates = DistanceCalculator.sortByDistance(coordinateList, airportLat, airportLon, 0,retCoordinate);
+
+ // 开始拼接图斑点位--按中心坐标数组排序顺序
+ // 长度-3第一个起点只有一个点位
+ Coordinate[] retc = new Coordinate[sortedCoordinates.length * 4 - 3];
+ // 赋值起点
+ retc[0] = sortedCoordinates[0];
+ int i = 0;
+ for (Coordinate num : sortedCoordinates) {
+ List<Coordinate> coordinatePoints = points.get(num);
+ if (null != coordinatePoints) {
+ for (int j = 0; j < coordinatePoints.size(); j++) {
+ // 开始拼接
+ retc[i * coordinatePoints.size() + j - 3] = coordinatePoints.get(j);
+ }
+ }
+
+ i++;
+ }
+
+ return retc;
+
+
+ }
+
+
+ public static void main(String[] args) {
+ //测试
+ List<LotInfo> list = new ArrayList<>();
+ list.add(LotInfo.builder().dkfw("POLYGON((115.866465564947 28.6344502965542, 115.86425430209 28.6357383285408, 115.864551734716 28.633120921433, 115.866977149064 28.6338435339976, 115.866465564947 28.6344502965542))").build());
+ list.add(LotInfo.builder().dkfw("POLYGON((115.864006690605 28.6202713913694, 115.86002109342 28.6162025130492, 115.866374254306 28.6142037658042, 115.865912044006 28.6172001020759, 115.864006690605 28.6202713913694))").build());
+ list.add(LotInfo.builder().dkfw("POLYGON((115.839366933455 28.6161999317332, 115.841288489469 28.6160843601496, 115.840931570318 28.6181544912247, 115.838147600941 28.618654178036, 115.839366933455 28.6161999317332))").build());
+ list.add(LotInfo.builder().dkfw("POLYGON((115.857499052697 28.6784702230642, 115.859109158101 28.6762273976226, 115.863677723232 28.6766081113836, 115.862154868188 28.6790827508297, 115.857499052697 28.6784702230642))").build());
+ list.add(LotInfo.builder().dkfw("POLYGON((115.834974056705 28.6659171428962, 115.833760531592 28.6634960413229, 115.832422084777 28.6624550271329, 115.829745191145 28.6631986086972, 115.831232354274 28.6608191476914, 115.833314382654 28.6603729987527, 115.835545127347 28.6618601618814, 115.837032290475 28.6639421902615, 115.834974056705 28.6659171428962))").build());
+ list.add(LotInfo.builder().dkfw("POLYGON((115.885622116006 28.5766308429787, 115.883936664461 28.5771582901683, 115.883365593819 28.5752547213636, 115.883555950699 28.5740174016407, 115.88365112914 28.5724945465969, 115.885364341064 28.5721138328361, 115.886696839227 28.5725897250371, 115.887458266749 28.5736366878797, 115.886792017668 28.5753498998039, 115.885622116006 28.5766308429787))").build());
+ list.add(LotInfo.builder().dkfw("POLYGON((115.857644341395 28.5750890964568, 115.857572957565 28.5729475815515, 115.858429563527 28.5728761977213, 115.859072017998 28.5738041875136, 115.859072017998 28.5748035611361, 115.857644341395 28.5750890964568))").build());
+ list.add(LotInfo.builder().dkfw("POLYGON((115.912181587649 28.6231542087745, 115.912181587649 28.6215123806805, 115.915893546818 28.6212268453598, 115.916036314478 28.6231542087745, 115.912181587649 28.6231542087745))").build());
+ list.add(LotInfo.builder().dkfw("POLYGON((115.842039042965 28.6314426646115, 115.840992080122 28.631252307731, 115.842324578286 28.6305860586493, 115.843181184248 28.6305860586493, 115.84403779021 28.6304908802091, 115.84394261177 28.6317281999322, 115.842039042965 28.6314426646115))").build());
+ list.add(LotInfo.builder().dkfw("POLYGON((115.807011889796 28.623935465138, 115.805869748513 28.6224126100944, 115.810247956764 28.6220318963334, 115.809581707682 28.623935465138, 115.807011889796 28.623935465138))").build());
+
+ getRoutePointOrder(list);
+ }
+
+}
diff --git a/src/main/java/com/dji/sample/patches/xml/controller/XMLController.java b/src/main/java/com/dji/sample/patches/xml/controller/XMLController.java
new file mode 100644
index 0000000..9c6d883
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/xml/controller/XMLController.java
@@ -0,0 +1,105 @@
+package com.dji.sample.patches.xml.controller;
+
+import com.dji.sample.patches.model.entity.LotInfo;
+import com.dji.sample.patches.utils.GeoToolsUtil;
+import com.dji.sample.patches.xml.mode.*;
+import freemarker.template.Configuration;
+import freemarker.template.Template;
+import lombok.extern.slf4j.Slf4j;
+import org.locationtech.jts.geom.Coordinate;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.*;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Classname XMLController
+ * @Description
+ * @Date 2022/6/19 19:10
+ * @Author: fanqiechaodan
+ */
+@RestController
+@RequestMapping(value = "/xml")
+@Slf4j
+public class XMLController {
+
+
+
+ public static void main(String[] args) {
+
+ //测试
+ List<LotInfo> list = new ArrayList<>();
+ list.add(LotInfo.builder().dkbh("dkbh01").dkfw("POLYGON((115.866465564947 28.6344502965542, 115.86425430209 28.6357383285408, 115.864551734716 28.633120921433, 115.866977149064 28.6338435339976, 115.866465564947 28.6344502965542))").build());
+ list.add(LotInfo.builder().dkbh("dkbh02").dkfw("POLYGON((115.864006690605 28.6202713913694, 115.86002109342 28.6162025130492, 115.866374254306 28.6142037658042, 115.865912044006 28.6172001020759, 115.864006690605 28.6202713913694))").build());
+ list.add(LotInfo.builder().dkbh("dkbh03").dkfw("POLYGON((115.839366933455 28.6161999317332, 115.841288489469 28.6160843601496, 115.840931570318 28.6181544912247, 115.838147600941 28.618654178036, 115.839366933455 28.6161999317332))").build());
+// list.add(LotInfo.builder().dkbh("dkbh04").dkfw("POLYGON((115.857499052697 28.6784702230642, 115.859109158101 28.6762273976226, 115.863677723232 28.6766081113836, 115.862154868188 28.6790827508297, 115.857499052697 28.6784702230642))").build());
+// list.add(LotInfo.builder().dkbh("dkbh05").dkfw("POLYGON((115.834974056705 28.6659171428962, 115.833760531592 28.6634960413229, 115.832422084777 28.6624550271329, 115.829745191145 28.6631986086972, 115.831232354274 28.6608191476914, 115.833314382654 28.6603729987527, 115.835545127347 28.6618601618814, 115.837032290475 28.6639421902615, 115.834974056705 28.6659171428962))").build());
+// list.add(LotInfo.builder().dkbh("dkbh06").dkfw("POLYGON((115.885622116006 28.5766308429787, 115.883936664461 28.5771582901683, 115.883365593819 28.5752547213636, 115.883555950699 28.5740174016407, 115.88365112914 28.5724945465969, 115.885364341064 28.5721138328361, 115.886696839227 28.5725897250371, 115.887458266749 28.5736366878797, 115.886792017668 28.5753498998039, 115.885622116006 28.5766308429787))").build());
+// list.add(LotInfo.builder().dkbh("dkbh07").dkfw("POLYGON((115.857644341395 28.5750890964568, 115.857572957565 28.5729475815515, 115.858429563527 28.5728761977213, 115.859072017998 28.5738041875136, 115.859072017998 28.5748035611361, 115.857644341395 28.5750890964568))").build());
+// list.add(LotInfo.builder().dkbh("dkbh08").dkfw("POLYGON((115.912181587649 28.6231542087745, 115.912181587649 28.6215123806805, 115.915893546818 28.6212268453598, 115.916036314478 28.6231542087745, 115.912181587649 28.6231542087745))").build());
+// list.add(LotInfo.builder().dkbh("dkbh09").dkfw("POLYGON((115.842039042965 28.6314426646115, 115.840992080122 28.631252307731, 115.842324578286 28.6305860586493, 115.843181184248 28.6305860586493, 115.84403779021 28.6304908802091, 115.84394261177 28.6317281999322, 115.842039042965 28.6314426646115))").build());
+// list.add(LotInfo.builder().dkbh("dkbh10").dkfw("POLYGON((115.807011889796 28.623935465138, 115.805869748513 28.6224126100944, 115.810247956764 28.6220318963334, 115.809581707682 28.623935465138, 115.807011889796 28.623935465138))").build());
+
+
+ Coordinate[] coordinates = GeoToolsUtil.getRoutePointOrder(list);
+
+ XMLTemplateModel xmlModel = XMLTemplateModel.init(coordinates,list);
+
+
+
+
+ xml2XmlDoc(xmlModel, "src\\main\\resources\\template\\template.xml", "src\\main\\resources\\template\\newtemplate.xml");
+ xml2XmlDoc(xmlModel, "src\\main\\resources\\template\\waylines.xml", "src\\main\\resources\\template\\newwaylines.xml");
+ }
+
+ /**
+ * 将xml模板转换为newxml
+ *
+ * @param model 需要填充到模板的数据
+ * @param templetFilePath 模板文件路径
+ * @param targetFilePath 目标文件保存路径
+ */
+ public static void xml2XmlDoc(XMLTemplateModel model, String templetFilePath, String targetFilePath) {
+ Writer out = null;
+ try {
+ // 将模板文件路径拆分为文件夹路径和文件名称
+ String tempLetDir = templetFilePath.substring(0, templetFilePath.lastIndexOf("\\"));
+ // 注意:templetFilePath.lastIndexOf("/")中,有的文件分隔符为:\ 要注意文件路径的分隔符
+ String templetName = templetFilePath.substring(templetFilePath.lastIndexOf("\\") + 1);
+ // 将目标文件保存路径拆分为文件夹路径和文件名称
+ String targetDir = targetFilePath.substring(0, targetFilePath.lastIndexOf("\\"));
+ String targetName = targetFilePath.substring(targetFilePath.lastIndexOf("\\") + 1);
+ Configuration configuration = new Configuration();
+ configuration.setDefaultEncoding(String.valueOf(StandardCharsets.UTF_8));
+ // 如果目标文件目录不存在创建
+ File file = new File(targetDir);
+ if (!file.exists()) {
+ file.mkdirs();
+ }
+ //加载模板数据(从文件路径中获取文件)
+ configuration.setDirectoryForTemplateLoading(new File(tempLetDir));
+ //获取模板实例
+ Template template = configuration.getTemplate(templetName);
+ File outFile = new File(targetDir + File.separator + targetName);
+ //模板和数据模型合并生成文件
+ out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), StandardCharsets.UTF_8));
+ //生成文件
+ template.process(model, out);
+ out.flush();
+ out.close();
+ } catch (Exception e) {
+ log.error("write xml failed:", e);
+ } finally {
+ if (out != null) {
+ try {
+ out.close();
+ } catch (IOException e) {
+ log.error("close out failed:", e);
+ }
+ }
+ }
+ }
+}
diff --git a/src/main/java/com/dji/sample/patches/xml/mode/CameraActionEnum.java b/src/main/java/com/dji/sample/patches/xml/mode/CameraActionEnum.java
new file mode 100644
index 0000000..25f8c6a
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/xml/mode/CameraActionEnum.java
@@ -0,0 +1,40 @@
+package com.dji.sample.patches.xml.mode;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION:
+ * @USER: aix
+ * @DATE: 2024/3/27 15:18
+ */
+public enum CameraActionEnum {
+
+ TAKE_PHOTO("takePhoto"),//单拍
+ START_RECORD("startRecord"),//开始录像
+ STOP_RECORD("stopRecord"),//结束录像
+ FOCUS("focus"),//对焦
+ ZOOM("zoom"),//变焦
+ CUSTOM_DIR_NAME("customDirName"),//创建新文件夹
+ GIMBAL_ROTATE("gimbalRotate"),//旋转云台
+ ROTATE_YAW("rotateYaw"),//飞行器偏航
+ HOVER("hover"),//悬停等待
+ GIMBAL_EVENLY_ROTATE("gimbalEvenlyRotate"),//航段间均匀转动云台pitch角
+ ACCURATE_SHOOT("accurateShoot"),//精准复拍动作(已暂停维护,建议使用ORIENTED_SHOOT)
+ ORIENTED_SHOOT("orientedShoot"),//精准复拍动作
+ PANO_SHOT("panoShot");//全景拍照动作(仅支持M30/M30T)
+
+ private final String description;
+
+ CameraActionEnum(String description) {
+ this.description = description;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ @Override
+ public String toString() {
+ return this.name();
+ }
+
+}
diff --git a/src/main/java/com/dji/sample/patches/xml/mode/Folder.java b/src/main/java/com/dji/sample/patches/xml/mode/Folder.java
new file mode 100644
index 0000000..bee0519
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/xml/mode/Folder.java
@@ -0,0 +1,38 @@
+package com.dji.sample.patches.xml.mode;
+
+import com.dji.sample.patches.xml.mode.share.GlobalWaypointHeadingParam;
+import com.dji.sample.patches.xml.mode.share.PayloadParam;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION:
+ * @USER: aix
+ * @DATE: 2024/3/27 11:38
+ */
+@Data
+public class Folder {
+
+ private String templateType;
+ private String templateId;
+
+ private WaylineCoordinateSysParam waylineCoordinateSysParam;
+
+ private Double autoFlightSpeed;
+ private Double globalHeight;
+ private Integer caliFlightEnable;
+ private String gimbalPitchMode;
+
+ private GlobalWaypointHeadingParam globalWaypointHeadingParam;
+
+ private String globalWaypointTurnMode;
+ private Integer globalUseStraightLine;
+
+ private List<Placemark> placemarkList = new ArrayList<>();
+
+ private PayloadParam payloadParam;
+
+}
diff --git a/src/main/java/com/dji/sample/patches/xml/mode/MissionConfig.java b/src/main/java/com/dji/sample/patches/xml/mode/MissionConfig.java
new file mode 100644
index 0000000..8668a29
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/xml/mode/MissionConfig.java
@@ -0,0 +1,58 @@
+package com.dji.sample.patches.xml.mode;
+
+import com.dji.sample.patches.xml.mode.share.DroneInfo;
+import com.dji.sample.patches.xml.mode.share.PayloadInfo;
+import lombok.Builder;
+import lombok.Data;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION: 设置任务配置
+ * @USER: aix
+ * @DATE: 2024/3/27 11:28
+ */
+@Data
+@Builder
+public class MissionConfig {
+ /**
+ * 飞向首航点模式
+ */
+ private String flyToWaylineMode = "safely";
+ /**
+ * 航线结束动作
+ */
+ private String finishAction = "goHome";
+ /**
+ * 失控是否继续执行航线
+ */
+ private String exitOnRCLost = "goContinue";
+ /**
+ * 失控动作类型
+ */
+ private String executeRCLostAction = "goBack";
+ /**
+ * 安全起飞高度
+ */
+ private Double takeOffSecurityHeight = 20D;
+ /**
+ * 参考起飞点
+ */
+ private String takeOffRefPoint;
+ /**
+ * 参考起飞点海拔高度
+ */
+ private String takeOffRefPointAGLHeight = "0";
+ /**
+ * 全局航线过渡速度
+ */
+ private Double globalTransitionalSpeed = 10D;
+ /**
+ * 全局返航高度
+ */
+ private Double globalRTHHeight;
+
+ private DroneInfo droneInfo;
+
+ private PayloadInfo payloadInfo;
+
+}
diff --git a/src/main/java/com/dji/sample/patches/xml/mode/Placemark.java b/src/main/java/com/dji/sample/patches/xml/mode/Placemark.java
new file mode 100644
index 0000000..186f25c
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/xml/mode/Placemark.java
@@ -0,0 +1,35 @@
+package com.dji.sample.patches.xml.mode;
+
+import com.dji.sample.patches.xml.mode.share.ActionGroup;
+import com.dji.sample.patches.xml.mode.share.ActionMode;
+import com.dji.sample.patches.xml.mode.share.WaypointTurnParam;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION:
+ * @USER: aix
+ * @DATE: 2024/3/27 13:36
+ */
+@Data
+public class Placemark {
+
+ private String coordinates;
+ private String index;
+ private Double ellipsoidHeight;
+ private Double height;
+ private String waypointSpeed;
+ private WaypointHeadingParam waypointHeadingParam;
+ private WaypointTurnParam waypointTurnParam;
+ private Integer useGlobalHeight;
+ private Integer useGlobalSpeed;
+ private Integer useGlobalHeadingParam;
+ private Integer useGlobalTurnParam;
+ private Integer useStraightLine;
+ private Double gimbalPitchAngle;
+
+ private ActionGroup actionGroup;
+}
diff --git a/src/main/java/com/dji/sample/patches/xml/mode/WaylineCoordinateSysParam.java b/src/main/java/com/dji/sample/patches/xml/mode/WaylineCoordinateSysParam.java
new file mode 100644
index 0000000..98aac8b
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/xml/mode/WaylineCoordinateSysParam.java
@@ -0,0 +1,17 @@
+package com.dji.sample.patches.xml.mode;
+
+import lombok.Data;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION:
+ * @USER: aix
+ * @DATE: 2024/3/27 11:57
+ */
+@Data
+public class WaylineCoordinateSysParam {
+
+ private String coordinateMode = "WGS84";
+ private String heightMode = "relativeToStartPoint";
+
+}
diff --git a/src/main/java/com/dji/sample/patches/xml/mode/WaypointHeadingParam.java b/src/main/java/com/dji/sample/patches/xml/mode/WaypointHeadingParam.java
new file mode 100644
index 0000000..c26d3ef
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/xml/mode/WaypointHeadingParam.java
@@ -0,0 +1,20 @@
+package com.dji.sample.patches.xml.mode;
+
+import lombok.Data;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION:
+ * @USER: aix
+ * @DATE: 2024/3/27 13:38
+ */
+@Data
+public class WaypointHeadingParam {
+
+ private String waypointHeadingMode;
+ private String waypointHeadingAngle;
+ private String waypointPoiPoint;
+ private String waypointHeadingPathMode;
+ private String waypointHeadingPoiIndex;
+
+}
diff --git a/src/main/java/com/dji/sample/patches/xml/mode/XMLTemplateModel.java b/src/main/java/com/dji/sample/patches/xml/mode/XMLTemplateModel.java
new file mode 100644
index 0000000..5024f60
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/xml/mode/XMLTemplateModel.java
@@ -0,0 +1,98 @@
+package com.dji.sample.patches.xml.mode;
+
+import com.dji.sample.patches.model.entity.LotInfo;
+import com.dji.sample.patches.xml.mode.share.ActionGroup;
+import com.dji.sample.patches.xml.mode.share.ActionMode;
+import com.dji.sample.patches.xml.mode.share.ActionTrigger;
+import com.dji.sample.patches.xml.mode.share.action.utils.*;
+import lombok.Builder;
+import lombok.Data;
+import org.locationtech.jts.geom.Coordinate;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION:
+ * @USER: aix
+ * @DATE: 2024/3/27 11:11
+ */
+@Data
+@Builder
+public class XMLTemplateModel {
+
+ private String author = "aix";
+
+ private String createTime;
+
+ private String updateTime;
+
+ private MissionConfig missionConfig;
+
+ private Folder folder;
+
+ public static XMLTemplateModel init(Coordinate[] coordinates,List<LotInfo> lotInfos) {
+
+ Folder folder = FolderUtils.setFloder();
+
+ List<Placemark> placemarkList = new ArrayList<>();
+ int i = 0;
+ for (Coordinate c:coordinates) {
+ if (i != 0) {//去除第一个航点
+ Placemark placemark = PlacemarkUtils.setPlacemark(c.x + "," + c.y);
+
+ // 增加事件组
+ ActionGroup actionGroup = new ActionGroup();
+ actionGroup.setActionGroupId(i);//动作组id从0开始单调连续递增。
+ actionGroup.setActionGroupStartIndex(i);//动作组开始生效的航点
+ actionGroup.setActionGroupEndIndex(i);//动作组结束生效的航点
+ actionGroup.setActionGroupMode("sequence");
+ ActionTrigger at = new ActionTrigger();
+ at.setActionTriggerType("reachPoint");
+ actionGroup.setActionTrigger(at);
+ // 开始增加事件
+ List<ActionMode> list = new ArrayList<>();
+ ActionMode actionMode = new ActionMode();
+ actionMode.setActionId(0);
+ actionMode.setActionActuatorFunc(CameraActionEnum.TAKE_PHOTO.getDescription());//拍照事件
+ // 计算获取图斑编号
+ int quotient = i / 4;
+ if (i % 4 != 0) { // 检查是否有余数
+ quotient++; // 如果有余数,商加1
+ }
+
+ if (quotient == 0) quotient = 1;
+
+ actionMode.setActionActuatorFuncParam(ActionUtils.setTakePhoto(lotInfos.get(quotient-1).getDkbh()));
+ list.add(actionMode);
+
+ ActionMode actionMode2 = new ActionMode();
+ actionMode2.setActionId(1);
+ actionMode2.setActionActuatorFunc(CameraActionEnum.GIMBAL_ROTATE.getDescription());//拍照事件
+ actionMode2.setActionActuatorFuncParam(ActionUtils.setGimbalRotate());
+ list.add(actionMode2);
+ actionGroup.setActions(list);
+
+ placemark.setActionGroup(actionGroup);
+
+ placemarkList.add(placemark);
+ }
+
+ i = i+1;
+ }
+
+ folder.setPlacemarkList(placemarkList);
+
+ XMLTemplateModel xtm = XMLTemplateModel.builder()
+ .author("Aix")
+ .createTime(String.valueOf(System.currentTimeMillis()))
+ .updateTime(String.valueOf(System.currentTimeMillis()))
+ .missionConfig(MissionConfigUtils.setMissionConfig())
+ .folder(folder)
+ .build();
+
+ return xtm;
+ }
+
+}
diff --git a/src/main/java/com/dji/sample/patches/xml/mode/share/ActionGroup.java b/src/main/java/com/dji/sample/patches/xml/mode/share/ActionGroup.java
new file mode 100644
index 0000000..6f3657b
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/xml/mode/share/ActionGroup.java
@@ -0,0 +1,45 @@
+package com.dji.sample.patches.xml.mode.share;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION:
+ * @USER: aix
+ * @DATE: 2024/3/27 13:45
+ */
+@Data
+public class ActionGroup {
+
+ /**
+ * 动作组id
+ * * 注:在一个kmz文件内该ID唯一。建议从0开始单调连续递增。
+ */
+ private Integer actionGroupId;
+ /**
+ * 动作组开始生效的航点
+ */
+ private Integer actionGroupStartIndex;
+ /**
+ * 动作组结束生效的航点
+ * * 注:当“动作组结束生效的航点”与“动作组开始生效的航点”一致,则代表该动作组仅在该航点处生效。
+ * * 注:该元素必须大于等于“actionGroupStartIndex”。
+ */
+ private Integer actionGroupEndIndex;
+ /**
+ * 动作执行模式
+ * sequence:串行执行。即动作组内的动作依次按顺序执行。
+ */
+ private String actionGroupMode = "sequence";
+ /**
+ * 动作组触发器
+ */
+ private ActionTrigger actionTrigger;
+ /**
+ * 动作列表
+ */
+ private List<ActionMode> actions;
+
+}
diff --git a/src/main/java/com/dji/sample/patches/xml/mode/share/ActionMode.java b/src/main/java/com/dji/sample/patches/xml/mode/share/ActionMode.java
new file mode 100644
index 0000000..bf2c2aa
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/xml/mode/share/ActionMode.java
@@ -0,0 +1,43 @@
+package com.dji.sample.patches.xml.mode.share;
+
+import com.dji.sample.patches.xml.mode.share.action.param.ActionActuatorFuncParam;
+import com.dji.sample.patches.xml.mode.CameraActionEnum;
+import lombok.Data;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION:
+ * @USER: aix
+ * @DATE: 2024/3/27 13:46
+ */
+@Data
+public class ActionMode {
+
+ /**
+ * 动作id
+ * * 注:在一个动作组内该ID唯一。建议从0开始单调连续递增。
+ */
+ private Integer actionId;
+ /**
+ * 动作类型
+ * takePhoto:单拍
+ * startRecord:开始录像
+ * stopRecord:结束录像
+ * focus:对焦
+ * zoom:变焦
+ * customDirName:创建新文件夹
+ * gimbalRotate:旋转云台
+ * rotateYaw:飞行器偏航
+ * hover:悬停等待
+ * gimbalEvenlyRotate:航段间均匀转动云台pitch角
+ * accurateShoot:精准复拍动作(已暂停维护,建议使用orientedShoot)
+ * orientedShoot:精准复拍动作
+ * panoShot:全景拍照动作(仅支持M30/M30T)
+ */
+ private String actionActuatorFunc = CameraActionEnum.TAKE_PHOTO.getDescription();
+ /**
+ * 动作参数
+ */
+ private ActionActuatorFuncParam actionActuatorFuncParam;
+
+}
diff --git a/src/main/java/com/dji/sample/patches/xml/mode/share/ActionTrigger.java b/src/main/java/com/dji/sample/patches/xml/mode/share/ActionTrigger.java
new file mode 100644
index 0000000..700ed92
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/xml/mode/share/ActionTrigger.java
@@ -0,0 +1,30 @@
+package com.dji.sample.patches.xml.mode.share;
+
+import lombok.Data;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION:
+ * @USER: aix
+ * @DATE: 2024/3/28 11:09
+ */
+@Data
+public class ActionTrigger {
+
+ /**
+ * 动作触发器类型
+ * reachPoint:到达航点时执行
+ * betweenAdjacentPoints:航段触发,均匀转云台
+ * multipleTiming:等时触发
+ * multipleDistance:等距触发
+ * * 注:“betweenAdjacentPoints”需配合动作"gimbalEvenlyRotate"使用
+ */
+ private String actionTriggerType;
+ /**
+ * 动作触发器参数
+ * > 0
+ * * 注:当“actionTriggerType”为“multipleTiming”时,该元素表示间隔时间,单位是s。当“actionTriggerType”为“multipleDistance”时,该元素表示间隔距离,单位是m。
+ */
+ private String actionTriggerParam;
+
+}
diff --git a/src/main/java/com/dji/sample/patches/xml/mode/share/AutoRerouteInfo.java b/src/main/java/com/dji/sample/patches/xml/mode/share/AutoRerouteInfo.java
new file mode 100644
index 0000000..1f945da
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/xml/mode/share/AutoRerouteInfo.java
@@ -0,0 +1,18 @@
+package com.dji.sample.patches.xml.mode.share;
+
+import lombok.Data;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION:
+ * @USER: aix
+ * @DATE: 2024/3/28 10:14
+ */
+@Data
+public class AutoRerouteInfo {
+
+ private Integer missionAutoRerouteMode;
+ private Integer transitionalAutoRerouteMode;
+
+
+}
diff --git a/src/main/java/com/dji/sample/patches/xml/mode/share/DroneInfo.java b/src/main/java/com/dji/sample/patches/xml/mode/share/DroneInfo.java
new file mode 100644
index 0000000..bef4e14
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/xml/mode/share/DroneInfo.java
@@ -0,0 +1,18 @@
+package com.dji.sample.patches.xml.mode.share;
+
+import lombok.Builder;
+import lombok.Data;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION: 无人机参数
+ * @USER: aix
+ * @DATE: 2024/3/27 11:29
+ */
+@Data
+public class DroneInfo {
+
+ private String droneEnumValue = "67";
+ private String droneSubEnumValue = "1";
+
+}
diff --git a/src/main/java/com/dji/sample/patches/xml/mode/share/GlobalWaypointHeadingParam.java b/src/main/java/com/dji/sample/patches/xml/mode/share/GlobalWaypointHeadingParam.java
new file mode 100644
index 0000000..106d13f
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/xml/mode/share/GlobalWaypointHeadingParam.java
@@ -0,0 +1,43 @@
+package com.dji.sample.patches.xml.mode.share;
+
+import lombok.Data;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION:
+ * @USER: aix
+ * @DATE: 2024/3/27 11:59
+ */
+@Data
+public class GlobalWaypointHeadingParam {
+
+ /**
+ * 飞行器偏航角模式 必需元素
+ * followWayline:沿航线方向。飞行器机头沿着航线方向飞至下一航点
+ * manually:手动控制。飞行器在飞至下一航点的过程中,用户可以手动控制飞行器机头朝向
+ * fixed:锁定当前偏航角。飞行器机头保持执行完航点动作后的飞行器偏航角飞至下一航点
+ * smoothTransition:自定义。通过“wpml:waypointHeadingAngle”给定某航点的目标偏航角,并在航段飞行过程中均匀过渡至下一航点的目标偏航角。
+ * towardPOI:朝向兴趣点
+ */
+ private String waypointHeadingMode;
+ /**
+ * 飞行器偏航角度
+ * 必需元素
+ * * 注:当且仅当“wpml:waypointHeadingMode”为“smoothTransition”时必需
+ */
+ private Integer waypointHeadingAngle;
+ /**
+ * 兴趣点
+ * 仅当wpml:waypointHeadingMode为towardPOI时必需
+ */
+ private String waypointPoiPoint;
+ /**
+ * 飞行器偏航角转动方向 必需元素
+ * clockwise:顺时针旋转飞行器偏航角
+ * counterClockwise:逆时针旋转飞行器偏航角
+ * followBadArc:沿最短路径旋转飞行器偏航角
+ */
+ private String waypointHeadingPathMode;
+ private String waypointHeadingPoiIndex;
+
+}
diff --git a/src/main/java/com/dji/sample/patches/xml/mode/share/PayloadInfo.java b/src/main/java/com/dji/sample/patches/xml/mode/share/PayloadInfo.java
new file mode 100644
index 0000000..e06a190
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/xml/mode/share/PayloadInfo.java
@@ -0,0 +1,19 @@
+package com.dji.sample.patches.xml.mode.share;
+
+import lombok.Builder;
+import lombok.Data;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION: 云台参数
+ * @USER: aix
+ * @DATE: 2024/3/27 11:30
+ */
+@Data
+public class PayloadInfo {
+
+ private String payloadEnumValue = "53";
+ private String payloadSubEnumValue = "0";
+ private String payloadPositionIndex = "0";
+
+}
diff --git a/src/main/java/com/dji/sample/patches/xml/mode/share/PayloadParam.java b/src/main/java/com/dji/sample/patches/xml/mode/share/PayloadParam.java
new file mode 100644
index 0000000..cb55b27
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/xml/mode/share/PayloadParam.java
@@ -0,0 +1,76 @@
+package com.dji.sample.patches.xml.mode.share;
+
+import lombok.Builder;
+import lombok.Data;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION:
+ * @USER: aix
+ * @DATE: 2024/3/27 17:07
+ */
+@Data
+@Builder
+public class PayloadParam {
+
+ /**
+ * 负载挂载位置
+ * 0:飞行器1号挂载位置。M300 RTK,M350 RTK机型,对应机身左前方。其它机型,对应主云台。
+ * 1:飞行器2号挂载位置。M300 RTK,M350 RTK机型,对应机身右前方。
+ * 2:飞行器3号挂载位置。M300 RTK,M350 RTK机型,对应机身上方。
+ */
+ private Integer payloadPositionIndex;
+ /**
+ * 负载对焦模式
+ * firstPoint:首个航点自动对焦
+ * custom:标定对焦值对焦
+ */
+ private String focusMode;
+ /**
+ * 负载测光模式
+ * average:全局测光
+ * spot:点测光
+ */
+ private String meteringMode;
+ /**
+ * 是否开启畸变矫正
+ * 0:不开启
+ * 1:开启
+ */
+ private Integer dewarpingEnable = 0;
+ /**
+ * 激光雷达回波模式
+ * singleReturnStrongest:单回波
+ * dualReturn:双回波
+ * tripleReturn:三回波
+ */
+ private String returnMode;
+ /**
+ * 负载采样率
+ * 60000,80000,120000,160000,180000,240000
+ */
+ private String samplingRate;
+ /**
+ * 负载扫描模式
+ * repetitive:重复扫描
+ * nonRepetitive:非重复扫描
+ */
+ private String scanningMode;
+ /**
+ * 真彩上色
+ * 0: 不上色
+ * 1: 真彩上色
+ */
+ private Integer modelColoringEnable = 0;
+ /**
+ * 图片格式列表
+ * wide:存储广角镜头照片
+ * zoom:存储变焦镜头照片
+ * ir:存储红外镜头照片
+ * narrow_band: 存储窄带镜头拍摄照片
+ * visable:可见光照片
+ * 注:存储多个镜头照片,格式如“<wpml:imageFormat>wide,ir</wpml:imageFormat>
+ */
+ private String imageFormat;
+
+}
diff --git a/src/main/java/com/dji/sample/patches/xml/mode/share/WaypointTurnParam.java b/src/main/java/com/dji/sample/patches/xml/mode/share/WaypointTurnParam.java
new file mode 100644
index 0000000..c6b7156
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/xml/mode/share/WaypointTurnParam.java
@@ -0,0 +1,35 @@
+package com.dji.sample.patches.xml.mode.share;
+
+import lombok.Data;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION:
+ * @USER: aix
+ * @DATE: 2024/3/27 13:38
+ */
+@Data
+public class WaypointTurnParam {
+
+ /**
+ * 必须元素
+ * 航点类型(航点转弯模式)
+ * coordinateTurn:协调转弯,不过点,提前转弯
+ * toPointAndStopWithDiscontinuityCurvature:直线飞行,飞行器到点停
+ * toPointAndStopWithContinuityCurvature:曲线飞行,飞行器到点停
+ * toPointAndPassWithContinuityCurvature:曲线飞行,飞行器过点不停
+ * 注:DJI Pilot 2/司空 2 上“平滑过点,提前转弯”模式设置方法为:
+ * 1)将wpml:waypointTurnMode设置为toPointAndPassWithContinuityCurvature
+ * 2)将wpml:useStraightLine设置为1
+ */
+ private String waypointTurnMode;
+ /**
+ * 航点转弯截距
+ * (0, 航段最大长度]
+ * * 注:两航点间航段长度必需大于两航点转弯截距之和。此元素定义了飞行器在距离该航点若干米前,提前多少距离转弯
+ * 必须元素
+ * * 注:当且仅当以下两种情况下必需“wpml:waypointTurnMode”为“coordinateTurn”“wpml:waypointTurnMode”为“toPointAndPassWithContinuityCurvature”,且“wpml:useStraightLine”为“1”
+ */
+ private String waypointTurnDampingDist;
+
+}
diff --git a/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/ActionActuatorFuncParam.java b/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/ActionActuatorFuncParam.java
new file mode 100644
index 0000000..9db3c15
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/ActionActuatorFuncParam.java
@@ -0,0 +1,55 @@
+package com.dji.sample.patches.xml.mode.share.action.param;
+
+import com.dji.sample.patches.xml.mode.CameraActionEnum;
+import lombok.Data;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION:
+ * @USER: aix
+ * @DATE: 2024/3/27 13:47
+ */
+@Data
+public class ActionActuatorFuncParam {
+
+ /**
+ * 负载挂载位置
+ * 0:飞行器1号挂载位置。M300 RTK,M350 RTK机型,对应机身左前方。其它机型,对应主云台。
+ * 1:飞行器2号挂载位置。M300 RTK,M350 RTK机型,对应机身右前方。
+ * 2:飞行器3号挂载位置。M300 RTK,M350 RTK机型,对应机身上方。
+ */
+ private Integer payloadPositionIndex;
+
+ public static ActionActuatorFuncParam createActionActuatorFuncParam(CameraActionEnum type) {
+
+ switch (type) {
+ case TAKE_PHOTO:
+ return new TakePhotoParam();
+ case START_RECORD:
+ return new StartRecordParam();
+ case STOP_RECORD:
+ return new StopRecordParam();
+ case FOCUS:
+ return new FocusParam();
+ case ZOOM:
+ return new ZoomParam();
+ case CUSTOM_DIR_NAME:
+ return new CustomDirNameParam();
+ case GIMBAL_ROTATE:
+ return new GimbalRotateParam();
+ case GIMBAL_EVENLY_ROTATE:
+ return new GimbalEvenlyRotateParam();
+ case ROTATE_YAW:
+ return new RotateYawParam();
+ case HOVER:
+ return new HoverParam();
+ case ORIENTED_SHOOT:
+ return new OrientedShootParam();
+ case PANO_SHOT:
+ return new PanoShotParam();
+ default:
+ throw new IllegalStateException("Unexpected value: " + type);
+ }
+ }
+
+}
diff --git a/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/CustomDirNameParam.java b/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/CustomDirNameParam.java
new file mode 100644
index 0000000..c85983d
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/CustomDirNameParam.java
@@ -0,0 +1,19 @@
+package com.dji.sample.patches.xml.mode.share.action.param;
+
+import lombok.Data;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION:
+ * @USER: aix
+ * @DATE: 2024/3/28 11:45
+ */
+@Data
+public class CustomDirNameParam extends ActionActuatorFuncParam {
+
+ /**
+ * 新文件夹的名称
+ */
+ private String directoryName;
+
+}
diff --git a/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/FocusParam.java b/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/FocusParam.java
new file mode 100644
index 0000000..8b92bd5
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/FocusParam.java
@@ -0,0 +1,44 @@
+package com.dji.sample.patches.xml.mode.share.action.param;
+
+import lombok.Data;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION:
+ * @USER: aix
+ * @DATE: 2024/3/28 11:43
+ */
+@Data
+public class FocusParam extends ActionActuatorFuncParam {
+ /**
+ * 是否点对焦
+ * 0:区域对焦 1:点对焦
+ */
+ private Integer isPointFocus;
+ /**
+ * 对焦点位置
+ * * 注:对焦点或对焦区域左上角在画面的X轴(宽)坐标。0为最左侧,1为最右侧。
+ */
+ private Double focusX;
+ /**
+ * 对焦点位置
+ * 注:对焦点或对焦区域左上角在画面的Y轴(高)坐标。0为最上方,1为最下方。
+ */
+ private Double focusY;
+ /**
+ * 对焦区域宽度比
+ * 注:对焦区域大小占画面整体的比例,此为宽度比
+ */
+ private Double focusRegionWidth;
+ /**
+ * 对焦区域高度比
+ * 注:对焦区域大小占画面整体的比例,此为高度比
+ */
+ private Double focusRegionHeight;
+ /**
+ * 是否无穷远对焦
+ * 0: 非无穷远对焦 1: 无穷远对焦
+ */
+ private Integer isInfiniteFocus;
+
+}
diff --git a/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/GimbalEvenlyRotateParam.java b/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/GimbalEvenlyRotateParam.java
new file mode 100644
index 0000000..b06329a
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/GimbalEvenlyRotateParam.java
@@ -0,0 +1,20 @@
+package com.dji.sample.patches.xml.mode.share.action.param;
+
+import lombok.Data;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION:
+ * @USER: aix
+ * @DATE: 2024/3/28 11:51
+ */
+@Data
+public class GimbalEvenlyRotateParam extends ActionActuatorFuncParam {
+
+ /**
+ * 云台Pitch转动角度
+ * 注:不同云台可转动范围不同
+ */
+ private Double gimbalPitchRotateAngle;
+
+}
diff --git a/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/GimbalRotateParam.java b/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/GimbalRotateParam.java
new file mode 100644
index 0000000..47383f3
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/GimbalRotateParam.java
@@ -0,0 +1,68 @@
+package com.dji.sample.patches.xml.mode.share.action.param;
+
+import lombok.Data;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION:
+ * @USER: aix
+ * @DATE: 2024/3/28 11:46
+ */
+@Data
+public class GimbalRotateParam extends ActionActuatorFuncParam {
+
+ /**
+ * 云台偏航角转动坐标系
+ * north:相对地理北
+ */
+ private String gimbalHeadingYawBase;
+ /**
+ * 云台转动模式
+ * absoluteAngle:绝对角度,相对于正北方的角度
+ */
+ private String gimbalRotateMode;
+ /**
+ * 是否使能云台Pitch转动
+ * 0:不使能
+ * 1:使能
+ */
+ private Integer gimbalPitchRotateEnable;
+ /**
+ * 云台Pitch转动角度
+ * 注:不同云台可转动范围不同
+ */
+ private Double gimbalPitchRotateAngle;
+ /**
+ * 是否使能云台Roll转动
+ * 0:不使能
+ * 1:使能
+ */
+ private Integer gimbalRollRotateEnable;
+ /**
+ * 云台Roll转动角度
+ * 注:不同云台可转动范围不同
+ */
+ private Double gimbalRollRotateAngle;
+ /**
+ * 是否使能云台Yaw转动
+ * 0:不使能
+ * 1:使能
+ */
+ private Integer gimbalYawRotateEnable;
+ /**
+ * 云台Yaw转动角度
+ * 注:不同云台可转动范围不同
+ */
+ private Double gimbalYawRotateAngle;
+ /**
+ * 是否使能云台转动时间
+ * 0:不使能
+ * 1:使能
+ */
+ private Integer gimbalRotateTimeEnable;
+ /**
+ * 云台完成转动用时
+ */
+ private Double gimbalRotateTime;
+
+}
diff --git a/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/HoverParam.java b/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/HoverParam.java
new file mode 100644
index 0000000..2c159d1
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/HoverParam.java
@@ -0,0 +1,19 @@
+package com.dji.sample.patches.xml.mode.share.action.param;
+
+import lombok.Data;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION:
+ * @USER: aix
+ * @DATE: 2024/3/28 11:55
+ */
+@Data
+public class HoverParam extends ActionActuatorFuncParam {
+
+ /**
+ * 飞行器悬停等待时间 s
+ */
+ private Double hoverTime;
+
+}
diff --git a/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/OrientedShootParam.java b/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/OrientedShootParam.java
new file mode 100644
index 0000000..9fdbdb1
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/OrientedShootParam.java
@@ -0,0 +1,152 @@
+package com.dji.sample.patches.xml.mode.share.action.param;
+
+import lombok.Data;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION:
+ * @USER: aix
+ * @DATE: 2024/3/28 11:57
+ */
+@Data
+public class OrientedShootParam extends ActionActuatorFuncParam {
+
+ /**
+ * 云台Pitch转动角度
+ */
+ private Double gimbalPitchRotateAngle;
+ /**
+ * 云台Yaw转动角度
+ * 注:M3E/M3T,M3D/M3TD 机型 wpml:gimbalYawRotateAngle 与 wpml:aircraftHeading 需保持一致
+ */
+ private Double gimbalYawRotateAngle;
+ /**
+ * 目标选中框中心水平坐标
+ * 注:照片左上角为坐标原点,水平方向为X轴,竖直方向为Y轴
+ */
+ private Integer focusX;
+ /**
+ * 目标选中框中心竖直坐标
+ * 注:照片左上角为坐标原点,水平方向为X轴,竖直方向为Y轴
+ */
+ private Integer focusY;
+ /**
+ * 目标选中框宽
+ */
+ private Integer focusRegionWidth;
+ /**
+ * 目标选中框高
+ */
+ private Integer focusRegionHeight;
+ /**
+ * 变焦焦距
+ */
+ private Double focalLength;
+ /**
+ * 飞行器目标偏航角(相对于地理北)
+ * *注:飞行器旋转至该目标偏航角。0°为正北方向,90°为正东方向,-90°为正西方向,-180°/180°为正南方向
+ * *注:M3E/M3T,M3D/M3TD 机型 wpml:gimbalYawRotateAngle 与 wpml:aircraftHeading 需保持一致
+ */
+ private Double aircraftHeading;
+ /**
+ * 是否框选精准复拍目标
+ * 1: 已框选目标物
+ * 0: 未框选目标物
+ * *注:该值设置为1,复拍时飞行器会自主寻找目标进行拍摄。该值设置为0,复拍时飞行器只会按照飞行器姿态和负载姿态进行动作重复,不会自主寻找目标
+ */
+ private Integer accurateFrameValid;
+ /**
+ * 拍摄照片存储类型
+ * zoom: 存储变焦镜头拍摄照片
+ * wide: 存储广角镜头拍摄照片
+ * ir: 存储红外镜头拍摄照片
+ * visable:可见光照片
+ * *注:存储多个镜头照片,格式如“<wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>”表示同时使用广角、红外镜头
+ */
+ private String payloadLensIndex;
+ /**
+ * 是否使用全局存储类型
+ * 0:不使用全局设置
+ * 1:使用全局设置
+ */
+ private Integer useGlobalPayloadLensIndex;
+ /**
+ * 目标框角度
+ * *注:目标框的旋转角度(以Y轴为基准,顺时针旋转)
+ */
+ private Double targetAngle;
+ /**
+ * 动作唯一标识
+ * *注:拍照时,该值将被写入照片文件中,用于关联动作和照片文件
+ */
+ private String actionUUID;
+ /**
+ * 照片宽度
+ */
+ private Integer imageWidth;
+ /**
+ * 照片高度
+ */
+ private Integer imageHeight;
+ /**
+ * AF电机位置
+ */
+ private Integer AFPos;
+ /**
+ * 云台端口号
+ * 拍摄照片的相机安装位置
+ * *注:M30/M30T机型该值固定为0
+ */
+ private Integer gimbalPort;
+ /**
+ * 相机类型
+ * 52(机型:M30双光相机),
+ * 53(机型:M30T三光相机)
+ * 66(机型:Mavic 3E 相机)
+ * 67(机型:Mavic 3T 相机)
+ * 80(机型:Matrice 3D 相机)
+ * 81(机型:Matrice 3TD 相机)
+ */
+ private Integer orientedCameraType;
+ /**
+ * 照片文件路径
+ *
+ */
+ private String orientedFilePath;
+ /**
+ * 照片文件MD5
+ */
+ private String orientedFileMD5;
+ /**
+ * 照片文件大小
+ */
+ private Integer orientedFileSize;
+ /**
+ * 照片文件后缀
+ */
+ private String orientedFileSuffix;
+ /**
+ * 光圈大小
+ * *注:该值为真实光圈x100
+ */
+ private Integer orientedCameraApertue;
+ /**
+ * 环境亮度
+ */
+ private Integer orientedCameraLuminance;
+ /**
+ * 快门时间
+ */
+ private Double orientedCameraShutterTime;
+ /**
+ * ISO
+ */
+ private Integer orientedCameraISO;
+ /**
+ * 拍照模式
+ * normalPhoto: 普通拍照
+ * lowLightSmartShooting:低光智能拍照
+ */
+ private String orientedPhotoMode;
+
+}
diff --git a/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/PanoShotParam.java b/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/PanoShotParam.java
new file mode 100644
index 0000000..f9f1d96
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/PanoShotParam.java
@@ -0,0 +1,36 @@
+package com.dji.sample.patches.xml.mode.share.action.param;
+
+import lombok.Data;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION:
+ * @USER: aix
+ * @DATE: 2024/3/28 13:49
+ */
+@Data
+public class PanoShotParam extends ActionActuatorFuncParam {
+
+ /**
+ * 拍摄照片存储类型
+ * zoom: 存储变焦镜头拍摄照片
+ * wide: 存储广角镜头拍摄照片
+ * ir: 存储红外镜头拍摄照片
+ * narrow_band: 存储窄带镜头拍摄照片
+ * visable:可见光照片
+ * 注:存储多个镜头照片,格式如“<wpml:payloadLensIndex>wide,ir,narrow_band</wpml:payloadLensIndex>”表示同时使用广角、红外和窄带镜头
+ */
+ private String payloadLensIndex;
+ /**
+ * 是否使用全局存储类型
+ * 0:不使用全局设置
+ * 1:使用全局设置
+ */
+ private Integer useGlobalPayloadLensIndex;
+ /**
+ * 全景拍照模式
+ * panoShot_360:全景模式
+ */
+ private String panoShotSubMode;
+
+}
diff --git a/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/RotateYawParam.java b/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/RotateYawParam.java
new file mode 100644
index 0000000..5440be9
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/RotateYawParam.java
@@ -0,0 +1,27 @@
+package com.dji.sample.patches.xml.mode.share.action.param;
+
+import lombok.Data;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION:
+ * @USER: aix
+ * @DATE: 2024/3/28 11:54
+ */
+@Data
+public class RotateYawParam extends ActionActuatorFuncParam {
+
+ /**
+ * 飞行器目标偏航角(相对于地理北)
+ * 注:飞行器旋转至该目标偏航角。0°为正北方向,90°为正东方向,-90°为正西方向,-180°/180°为正南方向。
+ */
+ private Double aircraftHeading;
+
+ /**
+ * 飞行器偏航角转动模式
+ * clockwise:顺时针旋转
+ * counterClockwise:逆时针旋转
+ */
+ private String aircraftPathMode;
+
+}
diff --git a/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/StartRecordParam.java b/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/StartRecordParam.java
new file mode 100644
index 0000000..3161471
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/StartRecordParam.java
@@ -0,0 +1,34 @@
+package com.dji.sample.patches.xml.mode.share.action.param;
+
+import lombok.Data;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION:
+ * @USER: aix
+ * @DATE: 2024/3/28 11:41
+ */
+@Data
+public class StartRecordParam extends ActionActuatorFuncParam {
+ /**
+ * 拍摄照片文件后缀
+ * 为生成媒体文件命名时将额外附带该后缀
+ */
+ private String fileSuffix;
+ /**
+ * 拍摄照片存储类型
+ * zoom: 存储变焦镜头拍摄照片
+ * wide: 存储广角镜头拍摄照片
+ * ir: 存储红外镜头拍摄照片
+ * narrow_band: 存储窄带镜头拍摄照片
+ * visable:可见光照片
+ * 注:存储多个镜头照片,格式如“<wpml:payloadLensIndex>wide,ir,narrow_band</wpml:payloadLensIndex>”表示同时使用广角、红外和窄带镜头
+ */
+ private String payloadLensIndex;
+ /**
+ * 是否使用全局存储类型
+ * 0:不使用全局设置
+ * 1:使用全局设置
+ */
+ private Integer useGlobalPayloadLensIndex;
+}
diff --git a/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/StopRecordParam.java b/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/StopRecordParam.java
new file mode 100644
index 0000000..e363365
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/StopRecordParam.java
@@ -0,0 +1,25 @@
+package com.dji.sample.patches.xml.mode.share.action.param;
+
+import lombok.Data;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION:
+ * @USER: aix
+ * @DATE: 2024/3/28 11:42
+ */
+@Data
+public class StopRecordParam extends ActionActuatorFuncParam {
+
+ /**
+ * 拍摄照片存储类型
+ * zoom: 存储变焦镜头拍摄照片
+ * wide: 存储广角镜头拍摄照片
+ * ir: 存储红外镜头拍摄照片
+ * narrow_band: 存储窄带镜头拍摄照片
+ * visable:可见光照片
+ * 注:存储多个镜头照片,格式如“<wpml:payloadLensIndex>wide,ir,narrow_band</wpml:payloadLensIndex>”表示同时使用广角、红外和窄带镜头
+ */
+ private String payloadLensIndex;
+
+}
diff --git a/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/TakePhotoParam.java b/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/TakePhotoParam.java
new file mode 100644
index 0000000..a9d0beb
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/TakePhotoParam.java
@@ -0,0 +1,36 @@
+package com.dji.sample.patches.xml.mode.share.action.param;
+
+import lombok.Data;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION:
+ * @USER: aix
+ * @DATE: 2024/3/28 11:39
+ */
+@Data
+public class TakePhotoParam extends ActionActuatorFuncParam {
+
+ /**
+ * 拍摄照片文件后缀
+ * 为生成媒体文件命名时将额外附带该后缀
+ */
+ private String fileSuffix;
+ /**
+ * 拍摄照片存储类型
+ * zoom: 存储变焦镜头拍摄照片
+ * wide: 存储广角镜头拍摄照片
+ * ir: 存储红外镜头拍摄照片
+ * narrow_band: 存储窄带镜头拍摄照片
+ * visable:可见光照片
+ * 注:存储多个镜头照片,格式如“<wpml:payloadLensIndex>wide,ir,narrow_band</wpml:payloadLensIndex>”表示同时使用广角、红外和窄带镜头
+ */
+ private String payloadLensIndex;
+ /**
+ * 是否使用全局存储类型
+ * 0:不使用全局设置
+ * 1:使用全局设置
+ */
+ private Integer useGlobalPayloadLensIndex;
+
+}
diff --git a/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/ZoomParam.java b/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/ZoomParam.java
new file mode 100644
index 0000000..eb27695
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/xml/mode/share/action/param/ZoomParam.java
@@ -0,0 +1,19 @@
+package com.dji.sample.patches.xml.mode.share.action.param;
+
+import lombok.Data;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION:
+ * @USER: aix
+ * @DATE: 2024/3/28 11:44
+ */
+@Data
+public class ZoomParam extends ActionActuatorFuncParam {
+
+ /**
+ * 变焦焦距
+ */
+ private Double focalLength;
+
+}
diff --git a/src/main/java/com/dji/sample/patches/xml/mode/share/action/utils/ActionUtils.java b/src/main/java/com/dji/sample/patches/xml/mode/share/action/utils/ActionUtils.java
new file mode 100644
index 0000000..322e9bd
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/xml/mode/share/action/utils/ActionUtils.java
@@ -0,0 +1,71 @@
+package com.dji.sample.patches.xml.mode.share.action.utils;
+
+import com.dji.sample.patches.xml.mode.share.action.param.GimbalRotateParam;
+import com.dji.sample.patches.xml.mode.share.action.param.StartRecordParam;
+import com.dji.sample.patches.xml.mode.share.action.param.StopRecordParam;
+import com.dji.sample.patches.xml.mode.share.action.param.TakePhotoParam;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION:
+ * @USER: aix
+ * @DATE: 2024/3/29 9:28
+ */
+public class ActionUtils {
+
+ /**
+ * 设置单拍事件
+ * @return
+ */
+ public static TakePhotoParam setTakePhoto(String dkbh) {
+ TakePhotoParam takePhotoParam = new TakePhotoParam();
+ takePhotoParam.setFileSuffix("航点" + dkbh);
+ takePhotoParam.setPayloadLensIndex("wide,ir");
+ takePhotoParam.setUseGlobalPayloadLensIndex(1);
+ takePhotoParam.setPayloadPositionIndex(0);
+ return takePhotoParam;
+ }
+
+ /**
+ * 设置开始录像事件
+ * @return
+ */
+ public static StartRecordParam setStartRecord() {
+ StartRecordParam startRecordParam = new StartRecordParam();
+ startRecordParam.setFileSuffix("航点");
+ startRecordParam.setPayloadLensIndex("wide,ir");
+ startRecordParam.setUseGlobalPayloadLensIndex(1);
+ startRecordParam.setPayloadPositionIndex(0);
+ return startRecordParam;
+ }
+
+ /**
+ * 设置结束录像事件
+ * @return
+ */
+ public static StopRecordParam setStopRecord() {
+ StopRecordParam stopRecordParam = new StopRecordParam();
+ stopRecordParam.setPayloadLensIndex("wide,ir");
+ return stopRecordParam;
+ }
+
+ /**
+ * 设置旋转云台
+ * @return
+ */
+ public static GimbalRotateParam setGimbalRotate() {
+ GimbalRotateParam gimbalRotateParam = new GimbalRotateParam();
+ gimbalRotateParam.setGimbalHeadingYawBase("north");
+ gimbalRotateParam.setGimbalRotateMode("absoluteAngle");
+ gimbalRotateParam.setGimbalPitchRotateEnable(1);
+ gimbalRotateParam.setGimbalPitchRotateAngle(-83D);
+ gimbalRotateParam.setGimbalRollRotateEnable(0);
+ gimbalRotateParam.setGimbalRollRotateAngle(0D);
+ gimbalRotateParam.setGimbalYawRotateEnable(0);
+ gimbalRotateParam.setGimbalYawRotateAngle(0D);
+ gimbalRotateParam.setGimbalRotateTimeEnable(0);
+ gimbalRotateParam.setGimbalRotateTime(0D);
+ return gimbalRotateParam;
+ }
+
+}
diff --git a/src/main/java/com/dji/sample/patches/xml/mode/share/action/utils/FolderUtils.java b/src/main/java/com/dji/sample/patches/xml/mode/share/action/utils/FolderUtils.java
new file mode 100644
index 0000000..9a6d58a
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/xml/mode/share/action/utils/FolderUtils.java
@@ -0,0 +1,47 @@
+package com.dji.sample.patches.xml.mode.share.action.utils;
+
+import com.dji.sample.patches.xml.mode.Folder;
+import com.dji.sample.patches.xml.mode.WaylineCoordinateSysParam;
+import com.dji.sample.patches.xml.mode.share.GlobalWaypointHeadingParam;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION: 设置模板信息
+ * @USER: aix
+ * @DATE: 2024/3/29 10:25
+ */
+public class FolderUtils {
+
+ public static Folder setFloder() {
+ Folder folder = new Folder();
+ folder.setPayloadParam(PayloadParamUtils.setPayloadParam());
+ folder.setWaylineCoordinateSysParam(new WaylineCoordinateSysParam());
+ folder.setTemplateType("waypoint");//航点模式
+ folder.setTemplateId("0");
+
+ WaylineCoordinateSysParam wcs = new WaylineCoordinateSysParam();
+ wcs.setCoordinateMode("WGS84");
+ wcs.setHeightMode("relativeToStartPoint");
+
+ folder.setWaylineCoordinateSysParam(wcs);
+ folder.setAutoFlightSpeed(10D);//全局航线飞行速度
+ folder.setGlobalHeight(100D); //全局航线高度(相对起飞点高度)
+ folder.setCaliFlightEnable(0);// 是否开启标定飞行
+ folder.setGimbalPitchMode("manual");//云台俯仰角控制模式manual:手动控制。飞行器从一个航点飞向下一个航点的过程中,支持用户手动控制云台的俯仰角度。若无用户控制,则保持飞离航点时的云台俯仰角度。 usePointSetting:依照每个航点设置。飞行器从一个航点飞向下一个航点的过程中,云台俯仰角均匀过渡至下一个航点的俯仰角。
+
+ //
+ GlobalWaypointHeadingParam gwhp = new GlobalWaypointHeadingParam();
+ gwhp.setWaypointHeadingMode("followWayline");
+ gwhp.setWaypointHeadingAngle(0);
+ gwhp.setWaypointPoiPoint("0.000000,0.000000,0.000000");
+ gwhp.setWaypointHeadingPathMode("followBadArc");
+ gwhp.setWaypointHeadingPoiIndex("0");
+
+ folder.setGlobalWaypointHeadingParam(gwhp);
+ folder.setGlobalWaypointTurnMode("toPointAndStopWithDiscontinuityCurvature");
+ folder.setGlobalUseStraightLine(1);
+
+ return folder;
+ }
+
+}
diff --git a/src/main/java/com/dji/sample/patches/xml/mode/share/action/utils/MissionConfigUtils.java b/src/main/java/com/dji/sample/patches/xml/mode/share/action/utils/MissionConfigUtils.java
new file mode 100644
index 0000000..d925e2a
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/xml/mode/share/action/utils/MissionConfigUtils.java
@@ -0,0 +1,31 @@
+package com.dji.sample.patches.xml.mode.share.action.utils;
+
+import com.dji.sample.patches.xml.mode.MissionConfig;
+import com.dji.sample.patches.xml.mode.share.DroneInfo;
+import com.dji.sample.patches.xml.mode.share.PayloadInfo;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION: 设置任务信息
+ * @USER: aix
+ * @DATE: 2024/3/29 11:10
+ */
+public class MissionConfigUtils {
+
+ public static MissionConfig setMissionConfig() {
+ MissionConfig mc = MissionConfig.builder()
+ .flyToWaylineMode("safely")//安全模式
+ .finishAction("goHome")
+ .exitOnRCLost("executeLostAction")//退出航线,执行失控动作
+ .executeRCLostAction("goBack")
+ .takeOffSecurityHeight(20D)//安全起飞高度
+ .globalTransitionalSpeed(10D)
+ .globalRTHHeight(100D)
+ .droneInfo(new DroneInfo())
+ .payloadInfo(new PayloadInfo())
+ .build();
+
+ return mc;
+ }
+
+}
diff --git a/src/main/java/com/dji/sample/patches/xml/mode/share/action/utils/PayloadParamUtils.java b/src/main/java/com/dji/sample/patches/xml/mode/share/action/utils/PayloadParamUtils.java
new file mode 100644
index 0000000..49ed8c1
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/xml/mode/share/action/utils/PayloadParamUtils.java
@@ -0,0 +1,21 @@
+package com.dji.sample.patches.xml.mode.share.action.utils;
+
+import com.dji.sample.patches.xml.mode.share.PayloadParam;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION:
+ * @USER: aix
+ * @DATE: 2024/3/29 11:44
+ */
+public class PayloadParamUtils {
+
+ public static PayloadParam setPayloadParam() {
+ PayloadParam pp = PayloadParam.builder()
+ .payloadPositionIndex(0)
+ .imageFormat("wide,ir")
+ .build();
+ return pp;
+ }
+
+}
diff --git a/src/main/java/com/dji/sample/patches/xml/mode/share/action/utils/PlacemarkUtils.java b/src/main/java/com/dji/sample/patches/xml/mode/share/action/utils/PlacemarkUtils.java
new file mode 100644
index 0000000..04dca1d
--- /dev/null
+++ b/src/main/java/com/dji/sample/patches/xml/mode/share/action/utils/PlacemarkUtils.java
@@ -0,0 +1,28 @@
+package com.dji.sample.patches.xml.mode.share.action.utils;
+
+import com.dji.sample.patches.xml.mode.Placemark;
+import com.dji.sample.patches.xml.mode.WaypointHeadingParam;
+
+/**
+ * @PROJECT_NAME: drone
+ * @DESCRIPTION: 航点设置
+ * @USER: aix
+ * @DATE: 2024/3/29 9:47
+ */
+public class PlacemarkUtils {
+
+ public static Placemark setPlacemark(String xy) {
+ Placemark placemark = new Placemark();
+ placemark.setCoordinates(xy);
+ placemark.setEllipsoidHeight(100D);
+ placemark.setHeight(100D);
+ placemark.setUseGlobalHeight(1);
+ placemark.setUseGlobalSpeed(1);
+ placemark.setUseGlobalHeadingParam(1);
+ placemark.setUseGlobalTurnParam(1);
+ placemark.setGimbalPitchAngle(0D);
+
+ return placemark;
+ }
+
+}
diff --git a/src/main/resources/template/newtemplate.xml b/src/main/resources/template/newtemplate.xml
new file mode 100644
index 0000000..bd2209a
--- /dev/null
+++ b/src/main/resources/template/newtemplate.xml
@@ -0,0 +1,868 @@
+<?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.3">
+ <Document>
+ <!-- 步骤1:实现文件创建信息 -->
+ <wpml:author>Aix</wpml:author>
+ <wpml:createTime>1711938126849</wpml:createTime>
+ <wpml:updateTime>1711938126849</wpml:updateTime>
+ <!-- 步骤2:设置任务配置 -->
+ <wpml:missionConfig>
+ <wpml:flyToWaylineMode>safely</wpml:flyToWaylineMode>
+ <wpml:finishAction>goHome</wpml:finishAction>
+ <wpml:exitOnRCLost>executeLostAction</wpml:exitOnRCLost>
+ <wpml:executeRCLostAction>goBack</wpml:executeRCLostAction>
+ <wpml:takeOffSecurityHeight>20</wpml:takeOffSecurityHeight>
+ <wpml:takeOffRefPoint></wpml:takeOffRefPoint>
+ <wpml:takeOffRefPointAGLHeight></wpml:takeOffRefPointAGLHeight>
+ <wpml:globalTransitionalSpeed>10</wpml:globalTransitionalSpeed>
+ <wpml:globalRTHHeight>100</wpml:globalRTHHeight>
+ <wpml:droneInfo>
+ <!-- 用M30申报无人机型号 -->
+ <wpml:droneEnumValue>67</wpml:droneEnumValue>
+ <wpml:droneSubEnumValue>1</wpml:droneSubEnumValue>
+ </wpml:droneInfo>
+ <wpml:payloadInfo>
+ <!-- 用M30声明有效载荷模型 -->
+ <wpml:payloadEnumValue>53</wpml:payloadEnumValue>
+ <wpml:payloadSubEnumValue>0</wpml:payloadSubEnumValue>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ </wpml:payloadInfo>
+ </wpml:missionConfig>
+ <!-- 步骤3:设置路径点模板文件夹 -->
+ <Folder>
+ <wpml:templateType>waypoint</wpml:templateType>
+ <wpml:templateId>0</wpml:templateId>
+ <wpml:waylineCoordinateSysParam>
+ <wpml:coordinateMode>WGS84</wpml:coordinateMode>
+ <wpml:heightMode>relativeToStartPoint</wpml:heightMode>
+ </wpml:waylineCoordinateSysParam>
+ <wpml:autoFlightSpeed>10</wpml:autoFlightSpeed>
+ <wpml:globalHeight>100</wpml:globalHeight>
+ <wpml:caliFlightEnable>0</wpml:caliFlightEnable>
+ <wpml:gimbalPitchMode>manual</wpml:gimbalPitchMode>
+ <wpml:globalWaypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
+ </wpml:globalWaypointHeadingParam>
+ <wpml:globalWaypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:globalWaypointTurnMode>
+ <wpml:globalUseStraightLine>1</wpml:globalUseStraightLine>
+ <Placemark>
+ <Point>
+ <!-- 经度和纬度 -->
+ <coordinates>
+ 115.86002109342,28.6202713913694
+ </coordinates>
+ </Point>
+ <wpml:index>0</wpml:index>
+ <wpml:ellipsoidHeight>100</wpml:ellipsoidHeight>
+ <wpml:height>100</wpml:height>
+ <wpml:waypointSpeed></wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useGlobalHeight>1</wpml:useGlobalHeight>
+ <wpml:useGlobalSpeed>1</wpml:useGlobalSpeed>
+ <wpml:useGlobalHeadingParam>1</wpml:useGlobalHeadingParam>
+ <wpml:useGlobalTurnParam>1</wpml:useGlobalTurnParam>
+ <wpml:useStraightLine></wpml:useStraightLine>
+ <!-- 宣布航路点1#的行动组 -->
+ <wpml:actionGroup>
+ <wpml:actionGroupId>1</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>1</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>1</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>0</wpml:actionId>
+ <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:fileSuffix>航点dkbh01</wpml:fileSuffix>
+ <wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>
+ <wpml:useGlobalPayloadLensIndex>1</wpml:useGlobalPayloadLensIndex>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>1</wpml:actionId>
+ <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:gimbalHeadingYawBase>north</wpml:gimbalHeadingYawBase>
+ <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
+ <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
+ <wpml:gimbalPitchRotateAngle>-83</wpml:gimbalPitchRotateAngle>
+ <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
+ <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
+ <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
+ <wpml:gimbalYawRotateAngle>0</wpml:gimbalYawRotateAngle>
+ <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
+ <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ </wpml:actionGroup>
+ </Placemark>
+ <Placemark>
+ <Point>
+ <!-- 经度和纬度 -->
+ <coordinates>
+ 115.86002109342,28.6142037658042
+ </coordinates>
+ </Point>
+ <wpml:index>1</wpml:index>
+ <wpml:ellipsoidHeight>100</wpml:ellipsoidHeight>
+ <wpml:height>100</wpml:height>
+ <wpml:waypointSpeed></wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useGlobalHeight>1</wpml:useGlobalHeight>
+ <wpml:useGlobalSpeed>1</wpml:useGlobalSpeed>
+ <wpml:useGlobalHeadingParam>1</wpml:useGlobalHeadingParam>
+ <wpml:useGlobalTurnParam>1</wpml:useGlobalTurnParam>
+ <wpml:useStraightLine></wpml:useStraightLine>
+ <!-- 宣布航路点1#的行动组 -->
+ <wpml:actionGroup>
+ <wpml:actionGroupId>2</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>2</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>2</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>0</wpml:actionId>
+ <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:fileSuffix>航点dkbh01</wpml:fileSuffix>
+ <wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>
+ <wpml:useGlobalPayloadLensIndex>1</wpml:useGlobalPayloadLensIndex>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>1</wpml:actionId>
+ <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:gimbalHeadingYawBase>north</wpml:gimbalHeadingYawBase>
+ <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
+ <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
+ <wpml:gimbalPitchRotateAngle>-83</wpml:gimbalPitchRotateAngle>
+ <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
+ <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
+ <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
+ <wpml:gimbalYawRotateAngle>0</wpml:gimbalYawRotateAngle>
+ <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
+ <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ </wpml:actionGroup>
+ </Placemark>
+ <Placemark>
+ <Point>
+ <!-- 经度和纬度 -->
+ <coordinates>
+ 115.866374254306,28.6142037658042
+ </coordinates>
+ </Point>
+ <wpml:index>2</wpml:index>
+ <wpml:ellipsoidHeight>100</wpml:ellipsoidHeight>
+ <wpml:height>100</wpml:height>
+ <wpml:waypointSpeed></wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useGlobalHeight>1</wpml:useGlobalHeight>
+ <wpml:useGlobalSpeed>1</wpml:useGlobalSpeed>
+ <wpml:useGlobalHeadingParam>1</wpml:useGlobalHeadingParam>
+ <wpml:useGlobalTurnParam>1</wpml:useGlobalTurnParam>
+ <wpml:useStraightLine></wpml:useStraightLine>
+ <!-- 宣布航路点1#的行动组 -->
+ <wpml:actionGroup>
+ <wpml:actionGroupId>3</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>3</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>3</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>0</wpml:actionId>
+ <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:fileSuffix>航点dkbh01</wpml:fileSuffix>
+ <wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>
+ <wpml:useGlobalPayloadLensIndex>1</wpml:useGlobalPayloadLensIndex>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>1</wpml:actionId>
+ <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:gimbalHeadingYawBase>north</wpml:gimbalHeadingYawBase>
+ <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
+ <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
+ <wpml:gimbalPitchRotateAngle>-83</wpml:gimbalPitchRotateAngle>
+ <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
+ <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
+ <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
+ <wpml:gimbalYawRotateAngle>0</wpml:gimbalYawRotateAngle>
+ <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
+ <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ </wpml:actionGroup>
+ </Placemark>
+ <Placemark>
+ <Point>
+ <!-- 经度和纬度 -->
+ <coordinates>
+ 115.866374254306,28.6202713913694
+ </coordinates>
+ </Point>
+ <wpml:index>3</wpml:index>
+ <wpml:ellipsoidHeight>100</wpml:ellipsoidHeight>
+ <wpml:height>100</wpml:height>
+ <wpml:waypointSpeed></wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useGlobalHeight>1</wpml:useGlobalHeight>
+ <wpml:useGlobalSpeed>1</wpml:useGlobalSpeed>
+ <wpml:useGlobalHeadingParam>1</wpml:useGlobalHeadingParam>
+ <wpml:useGlobalTurnParam>1</wpml:useGlobalTurnParam>
+ <wpml:useStraightLine></wpml:useStraightLine>
+ <!-- 宣布航路点1#的行动组 -->
+ <wpml:actionGroup>
+ <wpml:actionGroupId>4</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>4</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>4</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>0</wpml:actionId>
+ <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:fileSuffix>航点dkbh01</wpml:fileSuffix>
+ <wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>
+ <wpml:useGlobalPayloadLensIndex>1</wpml:useGlobalPayloadLensIndex>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>1</wpml:actionId>
+ <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:gimbalHeadingYawBase>north</wpml:gimbalHeadingYawBase>
+ <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
+ <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
+ <wpml:gimbalPitchRotateAngle>-83</wpml:gimbalPitchRotateAngle>
+ <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
+ <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
+ <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
+ <wpml:gimbalYawRotateAngle>0</wpml:gimbalYawRotateAngle>
+ <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
+ <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ </wpml:actionGroup>
+ </Placemark>
+ <Placemark>
+ <Point>
+ <!-- 经度和纬度 -->
+ <coordinates>
+ 115.86425430209,28.6357383285408
+ </coordinates>
+ </Point>
+ <wpml:index>4</wpml:index>
+ <wpml:ellipsoidHeight>100</wpml:ellipsoidHeight>
+ <wpml:height>100</wpml:height>
+ <wpml:waypointSpeed></wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useGlobalHeight>1</wpml:useGlobalHeight>
+ <wpml:useGlobalSpeed>1</wpml:useGlobalSpeed>
+ <wpml:useGlobalHeadingParam>1</wpml:useGlobalHeadingParam>
+ <wpml:useGlobalTurnParam>1</wpml:useGlobalTurnParam>
+ <wpml:useStraightLine></wpml:useStraightLine>
+ <!-- 宣布航路点1#的行动组 -->
+ <wpml:actionGroup>
+ <wpml:actionGroupId>5</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>5</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>5</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>0</wpml:actionId>
+ <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:fileSuffix>航点dkbh02</wpml:fileSuffix>
+ <wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>
+ <wpml:useGlobalPayloadLensIndex>1</wpml:useGlobalPayloadLensIndex>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>1</wpml:actionId>
+ <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:gimbalHeadingYawBase>north</wpml:gimbalHeadingYawBase>
+ <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
+ <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
+ <wpml:gimbalPitchRotateAngle>-83</wpml:gimbalPitchRotateAngle>
+ <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
+ <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
+ <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
+ <wpml:gimbalYawRotateAngle>0</wpml:gimbalYawRotateAngle>
+ <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
+ <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ </wpml:actionGroup>
+ </Placemark>
+ <Placemark>
+ <Point>
+ <!-- 经度和纬度 -->
+ <coordinates>
+ 115.86425430209,28.633120921433
+ </coordinates>
+ </Point>
+ <wpml:index>5</wpml:index>
+ <wpml:ellipsoidHeight>100</wpml:ellipsoidHeight>
+ <wpml:height>100</wpml:height>
+ <wpml:waypointSpeed></wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useGlobalHeight>1</wpml:useGlobalHeight>
+ <wpml:useGlobalSpeed>1</wpml:useGlobalSpeed>
+ <wpml:useGlobalHeadingParam>1</wpml:useGlobalHeadingParam>
+ <wpml:useGlobalTurnParam>1</wpml:useGlobalTurnParam>
+ <wpml:useStraightLine></wpml:useStraightLine>
+ <!-- 宣布航路点1#的行动组 -->
+ <wpml:actionGroup>
+ <wpml:actionGroupId>6</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>6</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>6</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>0</wpml:actionId>
+ <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:fileSuffix>航点dkbh02</wpml:fileSuffix>
+ <wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>
+ <wpml:useGlobalPayloadLensIndex>1</wpml:useGlobalPayloadLensIndex>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>1</wpml:actionId>
+ <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:gimbalHeadingYawBase>north</wpml:gimbalHeadingYawBase>
+ <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
+ <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
+ <wpml:gimbalPitchRotateAngle>-83</wpml:gimbalPitchRotateAngle>
+ <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
+ <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
+ <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
+ <wpml:gimbalYawRotateAngle>0</wpml:gimbalYawRotateAngle>
+ <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
+ <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ </wpml:actionGroup>
+ </Placemark>
+ <Placemark>
+ <Point>
+ <!-- 经度和纬度 -->
+ <coordinates>
+ 115.866977149064,28.633120921433
+ </coordinates>
+ </Point>
+ <wpml:index>6</wpml:index>
+ <wpml:ellipsoidHeight>100</wpml:ellipsoidHeight>
+ <wpml:height>100</wpml:height>
+ <wpml:waypointSpeed></wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useGlobalHeight>1</wpml:useGlobalHeight>
+ <wpml:useGlobalSpeed>1</wpml:useGlobalSpeed>
+ <wpml:useGlobalHeadingParam>1</wpml:useGlobalHeadingParam>
+ <wpml:useGlobalTurnParam>1</wpml:useGlobalTurnParam>
+ <wpml:useStraightLine></wpml:useStraightLine>
+ <!-- 宣布航路点1#的行动组 -->
+ <wpml:actionGroup>
+ <wpml:actionGroupId>7</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>7</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>7</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>0</wpml:actionId>
+ <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:fileSuffix>航点dkbh02</wpml:fileSuffix>
+ <wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>
+ <wpml:useGlobalPayloadLensIndex>1</wpml:useGlobalPayloadLensIndex>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>1</wpml:actionId>
+ <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:gimbalHeadingYawBase>north</wpml:gimbalHeadingYawBase>
+ <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
+ <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
+ <wpml:gimbalPitchRotateAngle>-83</wpml:gimbalPitchRotateAngle>
+ <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
+ <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
+ <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
+ <wpml:gimbalYawRotateAngle>0</wpml:gimbalYawRotateAngle>
+ <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
+ <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ </wpml:actionGroup>
+ </Placemark>
+ <Placemark>
+ <Point>
+ <!-- 经度和纬度 -->
+ <coordinates>
+ 115.866977149064,28.6357383285408
+ </coordinates>
+ </Point>
+ <wpml:index>7</wpml:index>
+ <wpml:ellipsoidHeight>100</wpml:ellipsoidHeight>
+ <wpml:height>100</wpml:height>
+ <wpml:waypointSpeed></wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useGlobalHeight>1</wpml:useGlobalHeight>
+ <wpml:useGlobalSpeed>1</wpml:useGlobalSpeed>
+ <wpml:useGlobalHeadingParam>1</wpml:useGlobalHeadingParam>
+ <wpml:useGlobalTurnParam>1</wpml:useGlobalTurnParam>
+ <wpml:useStraightLine></wpml:useStraightLine>
+ <!-- 宣布航路点1#的行动组 -->
+ <wpml:actionGroup>
+ <wpml:actionGroupId>8</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>8</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>8</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>0</wpml:actionId>
+ <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:fileSuffix>航点dkbh02</wpml:fileSuffix>
+ <wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>
+ <wpml:useGlobalPayloadLensIndex>1</wpml:useGlobalPayloadLensIndex>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>1</wpml:actionId>
+ <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:gimbalHeadingYawBase>north</wpml:gimbalHeadingYawBase>
+ <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
+ <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
+ <wpml:gimbalPitchRotateAngle>-83</wpml:gimbalPitchRotateAngle>
+ <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
+ <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
+ <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
+ <wpml:gimbalYawRotateAngle>0</wpml:gimbalYawRotateAngle>
+ <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
+ <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ </wpml:actionGroup>
+ </Placemark>
+ <Placemark>
+ <Point>
+ <!-- 经度和纬度 -->
+ <coordinates>
+ 115.838147600941,28.618654178036
+ </coordinates>
+ </Point>
+ <wpml:index>8</wpml:index>
+ <wpml:ellipsoidHeight>100</wpml:ellipsoidHeight>
+ <wpml:height>100</wpml:height>
+ <wpml:waypointSpeed></wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useGlobalHeight>1</wpml:useGlobalHeight>
+ <wpml:useGlobalSpeed>1</wpml:useGlobalSpeed>
+ <wpml:useGlobalHeadingParam>1</wpml:useGlobalHeadingParam>
+ <wpml:useGlobalTurnParam>1</wpml:useGlobalTurnParam>
+ <wpml:useStraightLine></wpml:useStraightLine>
+ <!-- 宣布航路点1#的行动组 -->
+ <wpml:actionGroup>
+ <wpml:actionGroupId>9</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>9</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>9</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>0</wpml:actionId>
+ <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:fileSuffix>航点dkbh03</wpml:fileSuffix>
+ <wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>
+ <wpml:useGlobalPayloadLensIndex>1</wpml:useGlobalPayloadLensIndex>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>1</wpml:actionId>
+ <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:gimbalHeadingYawBase>north</wpml:gimbalHeadingYawBase>
+ <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
+ <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
+ <wpml:gimbalPitchRotateAngle>-83</wpml:gimbalPitchRotateAngle>
+ <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
+ <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
+ <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
+ <wpml:gimbalYawRotateAngle>0</wpml:gimbalYawRotateAngle>
+ <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
+ <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ </wpml:actionGroup>
+ </Placemark>
+ <Placemark>
+ <Point>
+ <!-- 经度和纬度 -->
+ <coordinates>
+ 115.838147600941,28.6160843601496
+ </coordinates>
+ </Point>
+ <wpml:index>9</wpml:index>
+ <wpml:ellipsoidHeight>100</wpml:ellipsoidHeight>
+ <wpml:height>100</wpml:height>
+ <wpml:waypointSpeed></wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useGlobalHeight>1</wpml:useGlobalHeight>
+ <wpml:useGlobalSpeed>1</wpml:useGlobalSpeed>
+ <wpml:useGlobalHeadingParam>1</wpml:useGlobalHeadingParam>
+ <wpml:useGlobalTurnParam>1</wpml:useGlobalTurnParam>
+ <wpml:useStraightLine></wpml:useStraightLine>
+ <!-- 宣布航路点1#的行动组 -->
+ <wpml:actionGroup>
+ <wpml:actionGroupId>10</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>10</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>10</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>0</wpml:actionId>
+ <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:fileSuffix>航点dkbh03</wpml:fileSuffix>
+ <wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>
+ <wpml:useGlobalPayloadLensIndex>1</wpml:useGlobalPayloadLensIndex>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>1</wpml:actionId>
+ <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:gimbalHeadingYawBase>north</wpml:gimbalHeadingYawBase>
+ <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
+ <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
+ <wpml:gimbalPitchRotateAngle>-83</wpml:gimbalPitchRotateAngle>
+ <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
+ <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
+ <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
+ <wpml:gimbalYawRotateAngle>0</wpml:gimbalYawRotateAngle>
+ <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
+ <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ </wpml:actionGroup>
+ </Placemark>
+ <Placemark>
+ <Point>
+ <!-- 经度和纬度 -->
+ <coordinates>
+ 115.841288489469,28.6160843601496
+ </coordinates>
+ </Point>
+ <wpml:index>10</wpml:index>
+ <wpml:ellipsoidHeight>100</wpml:ellipsoidHeight>
+ <wpml:height>100</wpml:height>
+ <wpml:waypointSpeed></wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useGlobalHeight>1</wpml:useGlobalHeight>
+ <wpml:useGlobalSpeed>1</wpml:useGlobalSpeed>
+ <wpml:useGlobalHeadingParam>1</wpml:useGlobalHeadingParam>
+ <wpml:useGlobalTurnParam>1</wpml:useGlobalTurnParam>
+ <wpml:useStraightLine></wpml:useStraightLine>
+ <!-- 宣布航路点1#的行动组 -->
+ <wpml:actionGroup>
+ <wpml:actionGroupId>11</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>11</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>11</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>0</wpml:actionId>
+ <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:fileSuffix>航点dkbh03</wpml:fileSuffix>
+ <wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>
+ <wpml:useGlobalPayloadLensIndex>1</wpml:useGlobalPayloadLensIndex>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>1</wpml:actionId>
+ <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:gimbalHeadingYawBase>north</wpml:gimbalHeadingYawBase>
+ <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
+ <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
+ <wpml:gimbalPitchRotateAngle>-83</wpml:gimbalPitchRotateAngle>
+ <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
+ <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
+ <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
+ <wpml:gimbalYawRotateAngle>0</wpml:gimbalYawRotateAngle>
+ <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
+ <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ </wpml:actionGroup>
+ </Placemark>
+ <Placemark>
+ <Point>
+ <!-- 经度和纬度 -->
+ <coordinates>
+ 115.841288489469,28.618654178036
+ </coordinates>
+ </Point>
+ <wpml:index>11</wpml:index>
+ <wpml:ellipsoidHeight>100</wpml:ellipsoidHeight>
+ <wpml:height>100</wpml:height>
+ <wpml:waypointSpeed></wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useGlobalHeight>1</wpml:useGlobalHeight>
+ <wpml:useGlobalSpeed>1</wpml:useGlobalSpeed>
+ <wpml:useGlobalHeadingParam>1</wpml:useGlobalHeadingParam>
+ <wpml:useGlobalTurnParam>1</wpml:useGlobalTurnParam>
+ <wpml:useStraightLine></wpml:useStraightLine>
+ <!-- 宣布航路点1#的行动组 -->
+ <wpml:actionGroup>
+ <wpml:actionGroupId>12</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>12</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>12</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>0</wpml:actionId>
+ <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:fileSuffix>航点dkbh03</wpml:fileSuffix>
+ <wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>
+ <wpml:useGlobalPayloadLensIndex>1</wpml:useGlobalPayloadLensIndex>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>1</wpml:actionId>
+ <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:gimbalHeadingYawBase>north</wpml:gimbalHeadingYawBase>
+ <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
+ <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
+ <wpml:gimbalPitchRotateAngle>-83</wpml:gimbalPitchRotateAngle>
+ <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
+ <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
+ <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
+ <wpml:gimbalYawRotateAngle>0</wpml:gimbalYawRotateAngle>
+ <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
+ <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ </wpml:actionGroup>
+ </Placemark>
+ <!-- 负载设置 -->
+ <wpml:payloadParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:focusMode></wpml:focusMode>
+ <wpml:meteringMode></wpml:meteringMode>
+ <wpml:returnMode></wpml:returnMode>
+ <wpml:samplingRate></wpml:samplingRate>
+ <wpml:scanningMode></wpml:scanningMode>
+ <wpml:imageFormat>wide,ir</wpml:imageFormat>
+ </wpml:payloadParam>
+ </Folder>
+ </Document>
+</kml>
diff --git a/src/main/resources/template/newwaylines.xml b/src/main/resources/template/newwaylines.xml
new file mode 100644
index 0000000..44a725c
--- /dev/null
+++ b/src/main/resources/template/newwaylines.xml
@@ -0,0 +1,725 @@
+<?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.3">
+ <Document>
+ <wpml:missionConfig>
+ <wpml:flyToWaylineMode>safely</wpml:flyToWaylineMode>
+ <wpml:finishAction>goHome</wpml:finishAction>
+ <wpml:exitOnRCLost>executeLostAction</wpml:exitOnRCLost>
+ <wpml:executeRCLostAction>goBack</wpml:executeRCLostAction>
+ <wpml:takeOffSecurityHeight>20</wpml:takeOffSecurityHeight>
+ <wpml:globalTransitionalSpeed>10</wpml:globalTransitionalSpeed>
+ <wpml:globalRTHHeight>100</wpml:globalRTHHeight>
+ <wpml:droneInfo>
+ <wpml:droneEnumValue>67</wpml:droneEnumValue>
+ <wpml:droneSubEnumValue>1</wpml:droneSubEnumValue>
+ </wpml:droneInfo>
+ <wpml:payloadInfo>
+ <wpml:payloadEnumValue>53</wpml:payloadEnumValue>
+ <wpml:payloadSubEnumValue>0</wpml:payloadSubEnumValue>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ </wpml:payloadInfo>
+ </wpml:missionConfig>
+ <Folder>
+ <wpml:templateId>0</wpml:templateId>
+ <wpml:executeHeightMode>relativeToStartPoint</wpml:executeHeightMode>
+ <wpml:waylineId>0</wpml:waylineId>
+ <wpml:autoFlightSpeed>10</wpml:autoFlightSpeed>
+ <Placemark>
+ <Point>
+ <coordinates>
+ 115.86002109342,28.6202713913694
+ </coordinates>
+ </Point>
+ <wpml:index>0</wpml:index>
+ <wpml:executeHeight>100</wpml:executeHeight>
+ <wpml:waypointSpeed></wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useStraightLine>1</wpml:useStraightLine>
+ <wpml:actionGroup>
+ <wpml:actionGroupId>1</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>1</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>1</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <wpml:action>
+ <wpml:actionId>0</wpml:actionId>
+ <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:fileSuffix>航点dkbh01</wpml:fileSuffix>
+ <wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>
+ <wpml:useGlobalPayloadLensIndex>1</wpml:useGlobalPayloadLensIndex>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <wpml:action>
+ <wpml:actionId>1</wpml:actionId>
+ <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:gimbalHeadingYawBase>north</wpml:gimbalHeadingYawBase>
+ <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
+ <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
+ <wpml:gimbalPitchRotateAngle>-83</wpml:gimbalPitchRotateAngle>
+ <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
+ <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
+ <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
+ <wpml:gimbalYawRotateAngle>0</wpml:gimbalYawRotateAngle>
+ <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
+ <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ </wpml:actionGroup>
+ </Placemark>
+ <Placemark>
+ <Point>
+ <coordinates>
+ 115.86002109342,28.6142037658042
+ </coordinates>
+ </Point>
+ <wpml:index>1</wpml:index>
+ <wpml:executeHeight>100</wpml:executeHeight>
+ <wpml:waypointSpeed></wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useStraightLine>1</wpml:useStraightLine>
+ <wpml:actionGroup>
+ <wpml:actionGroupId>2</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>2</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>2</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <wpml:action>
+ <wpml:actionId>0</wpml:actionId>
+ <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:fileSuffix>航点dkbh01</wpml:fileSuffix>
+ <wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>
+ <wpml:useGlobalPayloadLensIndex>1</wpml:useGlobalPayloadLensIndex>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <wpml:action>
+ <wpml:actionId>1</wpml:actionId>
+ <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:gimbalHeadingYawBase>north</wpml:gimbalHeadingYawBase>
+ <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
+ <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
+ <wpml:gimbalPitchRotateAngle>-83</wpml:gimbalPitchRotateAngle>
+ <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
+ <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
+ <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
+ <wpml:gimbalYawRotateAngle>0</wpml:gimbalYawRotateAngle>
+ <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
+ <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ </wpml:actionGroup>
+ </Placemark>
+ <Placemark>
+ <Point>
+ <coordinates>
+ 115.866374254306,28.6142037658042
+ </coordinates>
+ </Point>
+ <wpml:index>2</wpml:index>
+ <wpml:executeHeight>100</wpml:executeHeight>
+ <wpml:waypointSpeed></wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useStraightLine>1</wpml:useStraightLine>
+ <wpml:actionGroup>
+ <wpml:actionGroupId>3</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>3</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>3</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <wpml:action>
+ <wpml:actionId>0</wpml:actionId>
+ <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:fileSuffix>航点dkbh01</wpml:fileSuffix>
+ <wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>
+ <wpml:useGlobalPayloadLensIndex>1</wpml:useGlobalPayloadLensIndex>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <wpml:action>
+ <wpml:actionId>1</wpml:actionId>
+ <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:gimbalHeadingYawBase>north</wpml:gimbalHeadingYawBase>
+ <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
+ <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
+ <wpml:gimbalPitchRotateAngle>-83</wpml:gimbalPitchRotateAngle>
+ <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
+ <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
+ <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
+ <wpml:gimbalYawRotateAngle>0</wpml:gimbalYawRotateAngle>
+ <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
+ <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ </wpml:actionGroup>
+ </Placemark>
+ <Placemark>
+ <Point>
+ <coordinates>
+ 115.866374254306,28.6202713913694
+ </coordinates>
+ </Point>
+ <wpml:index>3</wpml:index>
+ <wpml:executeHeight>100</wpml:executeHeight>
+ <wpml:waypointSpeed></wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useStraightLine>1</wpml:useStraightLine>
+ <wpml:actionGroup>
+ <wpml:actionGroupId>4</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>4</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>4</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <wpml:action>
+ <wpml:actionId>0</wpml:actionId>
+ <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:fileSuffix>航点dkbh01</wpml:fileSuffix>
+ <wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>
+ <wpml:useGlobalPayloadLensIndex>1</wpml:useGlobalPayloadLensIndex>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <wpml:action>
+ <wpml:actionId>1</wpml:actionId>
+ <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:gimbalHeadingYawBase>north</wpml:gimbalHeadingYawBase>
+ <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
+ <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
+ <wpml:gimbalPitchRotateAngle>-83</wpml:gimbalPitchRotateAngle>
+ <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
+ <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
+ <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
+ <wpml:gimbalYawRotateAngle>0</wpml:gimbalYawRotateAngle>
+ <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
+ <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ </wpml:actionGroup>
+ </Placemark>
+ <Placemark>
+ <Point>
+ <coordinates>
+ 115.86425430209,28.6357383285408
+ </coordinates>
+ </Point>
+ <wpml:index>4</wpml:index>
+ <wpml:executeHeight>100</wpml:executeHeight>
+ <wpml:waypointSpeed></wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useStraightLine>1</wpml:useStraightLine>
+ <wpml:actionGroup>
+ <wpml:actionGroupId>5</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>5</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>5</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <wpml:action>
+ <wpml:actionId>0</wpml:actionId>
+ <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:fileSuffix>航点dkbh02</wpml:fileSuffix>
+ <wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>
+ <wpml:useGlobalPayloadLensIndex>1</wpml:useGlobalPayloadLensIndex>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <wpml:action>
+ <wpml:actionId>1</wpml:actionId>
+ <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:gimbalHeadingYawBase>north</wpml:gimbalHeadingYawBase>
+ <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
+ <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
+ <wpml:gimbalPitchRotateAngle>-83</wpml:gimbalPitchRotateAngle>
+ <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
+ <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
+ <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
+ <wpml:gimbalYawRotateAngle>0</wpml:gimbalYawRotateAngle>
+ <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
+ <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ </wpml:actionGroup>
+ </Placemark>
+ <Placemark>
+ <Point>
+ <coordinates>
+ 115.86425430209,28.633120921433
+ </coordinates>
+ </Point>
+ <wpml:index>5</wpml:index>
+ <wpml:executeHeight>100</wpml:executeHeight>
+ <wpml:waypointSpeed></wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useStraightLine>1</wpml:useStraightLine>
+ <wpml:actionGroup>
+ <wpml:actionGroupId>6</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>6</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>6</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <wpml:action>
+ <wpml:actionId>0</wpml:actionId>
+ <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:fileSuffix>航点dkbh02</wpml:fileSuffix>
+ <wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>
+ <wpml:useGlobalPayloadLensIndex>1</wpml:useGlobalPayloadLensIndex>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <wpml:action>
+ <wpml:actionId>1</wpml:actionId>
+ <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:gimbalHeadingYawBase>north</wpml:gimbalHeadingYawBase>
+ <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
+ <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
+ <wpml:gimbalPitchRotateAngle>-83</wpml:gimbalPitchRotateAngle>
+ <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
+ <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
+ <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
+ <wpml:gimbalYawRotateAngle>0</wpml:gimbalYawRotateAngle>
+ <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
+ <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ </wpml:actionGroup>
+ </Placemark>
+ <Placemark>
+ <Point>
+ <coordinates>
+ 115.866977149064,28.633120921433
+ </coordinates>
+ </Point>
+ <wpml:index>6</wpml:index>
+ <wpml:executeHeight>100</wpml:executeHeight>
+ <wpml:waypointSpeed></wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useStraightLine>1</wpml:useStraightLine>
+ <wpml:actionGroup>
+ <wpml:actionGroupId>7</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>7</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>7</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <wpml:action>
+ <wpml:actionId>0</wpml:actionId>
+ <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:fileSuffix>航点dkbh02</wpml:fileSuffix>
+ <wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>
+ <wpml:useGlobalPayloadLensIndex>1</wpml:useGlobalPayloadLensIndex>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <wpml:action>
+ <wpml:actionId>1</wpml:actionId>
+ <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:gimbalHeadingYawBase>north</wpml:gimbalHeadingYawBase>
+ <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
+ <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
+ <wpml:gimbalPitchRotateAngle>-83</wpml:gimbalPitchRotateAngle>
+ <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
+ <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
+ <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
+ <wpml:gimbalYawRotateAngle>0</wpml:gimbalYawRotateAngle>
+ <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
+ <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ </wpml:actionGroup>
+ </Placemark>
+ <Placemark>
+ <Point>
+ <coordinates>
+ 115.866977149064,28.6357383285408
+ </coordinates>
+ </Point>
+ <wpml:index>7</wpml:index>
+ <wpml:executeHeight>100</wpml:executeHeight>
+ <wpml:waypointSpeed></wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useStraightLine>1</wpml:useStraightLine>
+ <wpml:actionGroup>
+ <wpml:actionGroupId>8</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>8</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>8</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <wpml:action>
+ <wpml:actionId>0</wpml:actionId>
+ <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:fileSuffix>航点dkbh02</wpml:fileSuffix>
+ <wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>
+ <wpml:useGlobalPayloadLensIndex>1</wpml:useGlobalPayloadLensIndex>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <wpml:action>
+ <wpml:actionId>1</wpml:actionId>
+ <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:gimbalHeadingYawBase>north</wpml:gimbalHeadingYawBase>
+ <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
+ <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
+ <wpml:gimbalPitchRotateAngle>-83</wpml:gimbalPitchRotateAngle>
+ <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
+ <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
+ <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
+ <wpml:gimbalYawRotateAngle>0</wpml:gimbalYawRotateAngle>
+ <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
+ <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ </wpml:actionGroup>
+ </Placemark>
+ <Placemark>
+ <Point>
+ <coordinates>
+ 115.838147600941,28.618654178036
+ </coordinates>
+ </Point>
+ <wpml:index>8</wpml:index>
+ <wpml:executeHeight>100</wpml:executeHeight>
+ <wpml:waypointSpeed></wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useStraightLine>1</wpml:useStraightLine>
+ <wpml:actionGroup>
+ <wpml:actionGroupId>9</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>9</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>9</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <wpml:action>
+ <wpml:actionId>0</wpml:actionId>
+ <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:fileSuffix>航点dkbh03</wpml:fileSuffix>
+ <wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>
+ <wpml:useGlobalPayloadLensIndex>1</wpml:useGlobalPayloadLensIndex>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <wpml:action>
+ <wpml:actionId>1</wpml:actionId>
+ <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:gimbalHeadingYawBase>north</wpml:gimbalHeadingYawBase>
+ <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
+ <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
+ <wpml:gimbalPitchRotateAngle>-83</wpml:gimbalPitchRotateAngle>
+ <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
+ <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
+ <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
+ <wpml:gimbalYawRotateAngle>0</wpml:gimbalYawRotateAngle>
+ <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
+ <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ </wpml:actionGroup>
+ </Placemark>
+ <Placemark>
+ <Point>
+ <coordinates>
+ 115.838147600941,28.6160843601496
+ </coordinates>
+ </Point>
+ <wpml:index>9</wpml:index>
+ <wpml:executeHeight>100</wpml:executeHeight>
+ <wpml:waypointSpeed></wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useStraightLine>1</wpml:useStraightLine>
+ <wpml:actionGroup>
+ <wpml:actionGroupId>10</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>10</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>10</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <wpml:action>
+ <wpml:actionId>0</wpml:actionId>
+ <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:fileSuffix>航点dkbh03</wpml:fileSuffix>
+ <wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>
+ <wpml:useGlobalPayloadLensIndex>1</wpml:useGlobalPayloadLensIndex>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <wpml:action>
+ <wpml:actionId>1</wpml:actionId>
+ <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:gimbalHeadingYawBase>north</wpml:gimbalHeadingYawBase>
+ <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
+ <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
+ <wpml:gimbalPitchRotateAngle>-83</wpml:gimbalPitchRotateAngle>
+ <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
+ <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
+ <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
+ <wpml:gimbalYawRotateAngle>0</wpml:gimbalYawRotateAngle>
+ <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
+ <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ </wpml:actionGroup>
+ </Placemark>
+ <Placemark>
+ <Point>
+ <coordinates>
+ 115.841288489469,28.6160843601496
+ </coordinates>
+ </Point>
+ <wpml:index>10</wpml:index>
+ <wpml:executeHeight>100</wpml:executeHeight>
+ <wpml:waypointSpeed></wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useStraightLine>1</wpml:useStraightLine>
+ <wpml:actionGroup>
+ <wpml:actionGroupId>11</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>11</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>11</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <wpml:action>
+ <wpml:actionId>0</wpml:actionId>
+ <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:fileSuffix>航点dkbh03</wpml:fileSuffix>
+ <wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>
+ <wpml:useGlobalPayloadLensIndex>1</wpml:useGlobalPayloadLensIndex>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <wpml:action>
+ <wpml:actionId>1</wpml:actionId>
+ <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:gimbalHeadingYawBase>north</wpml:gimbalHeadingYawBase>
+ <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
+ <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
+ <wpml:gimbalPitchRotateAngle>-83</wpml:gimbalPitchRotateAngle>
+ <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
+ <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
+ <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
+ <wpml:gimbalYawRotateAngle>0</wpml:gimbalYawRotateAngle>
+ <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
+ <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ </wpml:actionGroup>
+ </Placemark>
+ <Placemark>
+ <Point>
+ <coordinates>
+ 115.841288489469,28.618654178036
+ </coordinates>
+ </Point>
+ <wpml:index>11</wpml:index>
+ <wpml:executeHeight>100</wpml:executeHeight>
+ <wpml:waypointSpeed></wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useStraightLine>1</wpml:useStraightLine>
+ <wpml:actionGroup>
+ <wpml:actionGroupId>12</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>12</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>12</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <wpml:action>
+ <wpml:actionId>0</wpml:actionId>
+ <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:fileSuffix>航点dkbh03</wpml:fileSuffix>
+ <wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>
+ <wpml:useGlobalPayloadLensIndex>1</wpml:useGlobalPayloadLensIndex>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <wpml:action>
+ <wpml:actionId>1</wpml:actionId>
+ <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:gimbalHeadingYawBase>north</wpml:gimbalHeadingYawBase>
+ <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
+ <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
+ <wpml:gimbalPitchRotateAngle>-83</wpml:gimbalPitchRotateAngle>
+ <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
+ <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
+ <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
+ <wpml:gimbalYawRotateAngle>0</wpml:gimbalYawRotateAngle>
+ <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
+ <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ </wpml:actionGroup>
+ </Placemark>
+ </Folder>
+ </Document>
+</kml>
diff --git a/src/main/resources/template/template.kml b/src/main/resources/template/template.kml
new file mode 100644
index 0000000..b18a950
--- /dev/null
+++ b/src/main/resources/template/template.kml
@@ -0,0 +1,868 @@
+<?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.3">
+ <Document>
+ <!-- 步骤1:实现文件创建信息 -->
+ <wpml:author>Aix</wpml:author>
+ <wpml:createTime>1711701361124</wpml:createTime>
+ <wpml:updateTime>1711701361124</wpml:updateTime>
+ <!-- 步骤2:设置任务配置 -->
+ <wpml:missionConfig>
+ <wpml:flyToWaylineMode>safely</wpml:flyToWaylineMode>
+ <wpml:finishAction>goHome</wpml:finishAction>
+ <wpml:exitOnRCLost>executeLostAction</wpml:exitOnRCLost>
+ <wpml:executeRCLostAction>goBack</wpml:executeRCLostAction>
+ <wpml:takeOffSecurityHeight>20</wpml:takeOffSecurityHeight>
+ <wpml:takeOffRefPoint></wpml:takeOffRefPoint>
+ <wpml:takeOffRefPointAGLHeight></wpml:takeOffRefPointAGLHeight>
+ <wpml:globalTransitionalSpeed></wpml:globalTransitionalSpeed>
+ <wpml:globalRTHHeight></wpml:globalRTHHeight>
+ <wpml:droneInfo>
+ <!-- 用M30申报无人机型号 -->
+ <wpml:droneEnumValue>67</wpml:droneEnumValue>
+ <wpml:droneSubEnumValue>1</wpml:droneSubEnumValue>
+ </wpml:droneInfo>
+ <wpml:payloadInfo>
+ <!-- 用M30声明有效载荷模型 -->
+ <wpml:payloadEnumValue>53</wpml:payloadEnumValue>
+ <wpml:payloadSubEnumValue>0</wpml:payloadSubEnumValue>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ </wpml:payloadInfo>
+ </wpml:missionConfig>
+ <!-- 步骤3:设置路径点模板文件夹 -->
+ <Folder>
+ <wpml:templateType>waypoint</wpml:templateType>
+ <wpml:templateId>0</wpml:templateId>
+ <wpml:waylineCoordinateSysParam>
+ <wpml:coordinateMode></wpml:coordinateMode>
+ <wpml:heightMode></wpml:heightMode>
+ </wpml:waylineCoordinateSysParam>
+ <wpml:autoFlightSpeed>10</wpml:autoFlightSpeed>
+ <wpml:globalHeight>100</wpml:globalHeight>
+ <wpml:caliFlightEnable>0</wpml:caliFlightEnable>
+ <wpml:gimbalPitchMode>manual</wpml:gimbalPitchMode>
+ <wpml:globalWaypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex></wpml:waypointHeadingPoiIndex>
+ </wpml:globalWaypointHeadingParam>
+ <wpml:globalWaypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:globalWaypointTurnMode>
+ <wpml:globalUseStraightLine>1</wpml:globalUseStraightLine>
+ <Placemark>
+ <Point>
+ <!-- 经度和纬度 -->
+ <coordinates>
+ 115.86002109342,28.6202713913694
+ </coordinates>
+ </Point>
+ <wpml:index>0</wpml:index>
+ <wpml:ellipsoidHeight>100</wpml:ellipsoidHeight>
+ <wpml:height>100</wpml:height>
+ <wpml:waypointSpeed></wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex></wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useGlobalHeight>1</wpml:useGlobalHeight>
+ <wpml:useGlobalSpeed>1</wpml:useGlobalSpeed>
+ <wpml:useGlobalHeadingParam>1</wpml:useGlobalHeadingParam>
+ <wpml:useGlobalTurnParam>1</wpml:useGlobalTurnParam>
+ <wpml:useStraightLine></wpml:useStraightLine>
+ <!-- 宣布航路点1#的行动组 -->
+ <wpml:actionGroup>
+ <wpml:actionGroupId>1</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>1</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>1</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>0</wpml:actionId>
+ <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:fileSuffix>航点dkbh01</wpml:fileSuffix>
+ <wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>
+ <wpml:useGlobalPayloadLensIndex>1</wpml:useGlobalPayloadLensIndex>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>1</wpml:actionId>
+ <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:gimbalHeadingYawBase>north</wpml:gimbalHeadingYawBase>
+ <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
+ <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
+ <wpml:gimbalPitchRotateAngle>-83</wpml:gimbalPitchRotateAngle>
+ <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
+ <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
+ <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
+ <wpml:gimbalYawRotateAngle>0</wpml:gimbalYawRotateAngle>
+ <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
+ <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ </wpml:actionGroup>
+ </Placemark>
+ <Placemark>
+ <Point>
+ <!-- 经度和纬度 -->
+ <coordinates>
+ 115.86002109342,28.6142037658042
+ </coordinates>
+ </Point>
+ <wpml:index>1</wpml:index>
+ <wpml:ellipsoidHeight>100</wpml:ellipsoidHeight>
+ <wpml:height>100</wpml:height>
+ <wpml:waypointSpeed></wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex></wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useGlobalHeight>1</wpml:useGlobalHeight>
+ <wpml:useGlobalSpeed>1</wpml:useGlobalSpeed>
+ <wpml:useGlobalHeadingParam>1</wpml:useGlobalHeadingParam>
+ <wpml:useGlobalTurnParam>1</wpml:useGlobalTurnParam>
+ <wpml:useStraightLine></wpml:useStraightLine>
+ <!-- 宣布航路点1#的行动组 -->
+ <wpml:actionGroup>
+ <wpml:actionGroupId>2</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>2</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>2</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>0</wpml:actionId>
+ <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:fileSuffix>航点dkbh01</wpml:fileSuffix>
+ <wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>
+ <wpml:useGlobalPayloadLensIndex>1</wpml:useGlobalPayloadLensIndex>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>1</wpml:actionId>
+ <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:gimbalHeadingYawBase>north</wpml:gimbalHeadingYawBase>
+ <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
+ <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
+ <wpml:gimbalPitchRotateAngle>-83</wpml:gimbalPitchRotateAngle>
+ <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
+ <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
+ <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
+ <wpml:gimbalYawRotateAngle>0</wpml:gimbalYawRotateAngle>
+ <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
+ <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ </wpml:actionGroup>
+ </Placemark>
+ <Placemark>
+ <Point>
+ <!-- 经度和纬度 -->
+ <coordinates>
+ 115.866374254306,28.6142037658042
+ </coordinates>
+ </Point>
+ <wpml:index>2</wpml:index>
+ <wpml:ellipsoidHeight>100</wpml:ellipsoidHeight>
+ <wpml:height>100</wpml:height>
+ <wpml:waypointSpeed></wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex></wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useGlobalHeight>1</wpml:useGlobalHeight>
+ <wpml:useGlobalSpeed>1</wpml:useGlobalSpeed>
+ <wpml:useGlobalHeadingParam>1</wpml:useGlobalHeadingParam>
+ <wpml:useGlobalTurnParam>1</wpml:useGlobalTurnParam>
+ <wpml:useStraightLine></wpml:useStraightLine>
+ <!-- 宣布航路点1#的行动组 -->
+ <wpml:actionGroup>
+ <wpml:actionGroupId>3</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>3</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>3</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>0</wpml:actionId>
+ <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:fileSuffix>航点dkbh01</wpml:fileSuffix>
+ <wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>
+ <wpml:useGlobalPayloadLensIndex>1</wpml:useGlobalPayloadLensIndex>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>1</wpml:actionId>
+ <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:gimbalHeadingYawBase>north</wpml:gimbalHeadingYawBase>
+ <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
+ <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
+ <wpml:gimbalPitchRotateAngle>-83</wpml:gimbalPitchRotateAngle>
+ <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
+ <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
+ <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
+ <wpml:gimbalYawRotateAngle>0</wpml:gimbalYawRotateAngle>
+ <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
+ <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ </wpml:actionGroup>
+ </Placemark>
+ <Placemark>
+ <Point>
+ <!-- 经度和纬度 -->
+ <coordinates>
+ 115.866374254306,28.6202713913694
+ </coordinates>
+ </Point>
+ <wpml:index>3</wpml:index>
+ <wpml:ellipsoidHeight>100</wpml:ellipsoidHeight>
+ <wpml:height>100</wpml:height>
+ <wpml:waypointSpeed></wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex></wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useGlobalHeight>1</wpml:useGlobalHeight>
+ <wpml:useGlobalSpeed>1</wpml:useGlobalSpeed>
+ <wpml:useGlobalHeadingParam>1</wpml:useGlobalHeadingParam>
+ <wpml:useGlobalTurnParam>1</wpml:useGlobalTurnParam>
+ <wpml:useStraightLine></wpml:useStraightLine>
+ <!-- 宣布航路点1#的行动组 -->
+ <wpml:actionGroup>
+ <wpml:actionGroupId>4</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>4</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>4</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>0</wpml:actionId>
+ <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:fileSuffix>航点dkbh01</wpml:fileSuffix>
+ <wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>
+ <wpml:useGlobalPayloadLensIndex>1</wpml:useGlobalPayloadLensIndex>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>1</wpml:actionId>
+ <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:gimbalHeadingYawBase>north</wpml:gimbalHeadingYawBase>
+ <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
+ <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
+ <wpml:gimbalPitchRotateAngle>-83</wpml:gimbalPitchRotateAngle>
+ <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
+ <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
+ <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
+ <wpml:gimbalYawRotateAngle>0</wpml:gimbalYawRotateAngle>
+ <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
+ <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ </wpml:actionGroup>
+ </Placemark>
+ <Placemark>
+ <Point>
+ <!-- 经度和纬度 -->
+ <coordinates>
+ 115.86425430209,28.6357383285408
+ </coordinates>
+ </Point>
+ <wpml:index>4</wpml:index>
+ <wpml:ellipsoidHeight>100</wpml:ellipsoidHeight>
+ <wpml:height>100</wpml:height>
+ <wpml:waypointSpeed></wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex></wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useGlobalHeight>1</wpml:useGlobalHeight>
+ <wpml:useGlobalSpeed>1</wpml:useGlobalSpeed>
+ <wpml:useGlobalHeadingParam>1</wpml:useGlobalHeadingParam>
+ <wpml:useGlobalTurnParam>1</wpml:useGlobalTurnParam>
+ <wpml:useStraightLine></wpml:useStraightLine>
+ <!-- 宣布航路点1#的行动组 -->
+ <wpml:actionGroup>
+ <wpml:actionGroupId>5</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>5</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>5</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>0</wpml:actionId>
+ <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:fileSuffix>航点dkbh02</wpml:fileSuffix>
+ <wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>
+ <wpml:useGlobalPayloadLensIndex>1</wpml:useGlobalPayloadLensIndex>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>1</wpml:actionId>
+ <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:gimbalHeadingYawBase>north</wpml:gimbalHeadingYawBase>
+ <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
+ <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
+ <wpml:gimbalPitchRotateAngle>-83</wpml:gimbalPitchRotateAngle>
+ <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
+ <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
+ <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
+ <wpml:gimbalYawRotateAngle>0</wpml:gimbalYawRotateAngle>
+ <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
+ <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ </wpml:actionGroup>
+ </Placemark>
+ <Placemark>
+ <Point>
+ <!-- 经度和纬度 -->
+ <coordinates>
+ 115.86425430209,28.633120921433
+ </coordinates>
+ </Point>
+ <wpml:index>5</wpml:index>
+ <wpml:ellipsoidHeight>100</wpml:ellipsoidHeight>
+ <wpml:height>100</wpml:height>
+ <wpml:waypointSpeed></wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex></wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useGlobalHeight>1</wpml:useGlobalHeight>
+ <wpml:useGlobalSpeed>1</wpml:useGlobalSpeed>
+ <wpml:useGlobalHeadingParam>1</wpml:useGlobalHeadingParam>
+ <wpml:useGlobalTurnParam>1</wpml:useGlobalTurnParam>
+ <wpml:useStraightLine></wpml:useStraightLine>
+ <!-- 宣布航路点1#的行动组 -->
+ <wpml:actionGroup>
+ <wpml:actionGroupId>6</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>6</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>6</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>0</wpml:actionId>
+ <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:fileSuffix>航点dkbh02</wpml:fileSuffix>
+ <wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>
+ <wpml:useGlobalPayloadLensIndex>1</wpml:useGlobalPayloadLensIndex>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>1</wpml:actionId>
+ <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:gimbalHeadingYawBase>north</wpml:gimbalHeadingYawBase>
+ <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
+ <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
+ <wpml:gimbalPitchRotateAngle>-83</wpml:gimbalPitchRotateAngle>
+ <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
+ <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
+ <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
+ <wpml:gimbalYawRotateAngle>0</wpml:gimbalYawRotateAngle>
+ <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
+ <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ </wpml:actionGroup>
+ </Placemark>
+ <Placemark>
+ <Point>
+ <!-- 经度和纬度 -->
+ <coordinates>
+ 115.866977149064,28.633120921433
+ </coordinates>
+ </Point>
+ <wpml:index>6</wpml:index>
+ <wpml:ellipsoidHeight>100</wpml:ellipsoidHeight>
+ <wpml:height>100</wpml:height>
+ <wpml:waypointSpeed></wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex></wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useGlobalHeight>1</wpml:useGlobalHeight>
+ <wpml:useGlobalSpeed>1</wpml:useGlobalSpeed>
+ <wpml:useGlobalHeadingParam>1</wpml:useGlobalHeadingParam>
+ <wpml:useGlobalTurnParam>1</wpml:useGlobalTurnParam>
+ <wpml:useStraightLine></wpml:useStraightLine>
+ <!-- 宣布航路点1#的行动组 -->
+ <wpml:actionGroup>
+ <wpml:actionGroupId>7</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>7</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>7</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>0</wpml:actionId>
+ <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:fileSuffix>航点dkbh02</wpml:fileSuffix>
+ <wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>
+ <wpml:useGlobalPayloadLensIndex>1</wpml:useGlobalPayloadLensIndex>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>1</wpml:actionId>
+ <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:gimbalHeadingYawBase>north</wpml:gimbalHeadingYawBase>
+ <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
+ <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
+ <wpml:gimbalPitchRotateAngle>-83</wpml:gimbalPitchRotateAngle>
+ <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
+ <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
+ <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
+ <wpml:gimbalYawRotateAngle>0</wpml:gimbalYawRotateAngle>
+ <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
+ <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ </wpml:actionGroup>
+ </Placemark>
+ <Placemark>
+ <Point>
+ <!-- 经度和纬度 -->
+ <coordinates>
+ 115.866977149064,28.6357383285408
+ </coordinates>
+ </Point>
+ <wpml:index>7</wpml:index>
+ <wpml:ellipsoidHeight>100</wpml:ellipsoidHeight>
+ <wpml:height>100</wpml:height>
+ <wpml:waypointSpeed></wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex></wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useGlobalHeight>1</wpml:useGlobalHeight>
+ <wpml:useGlobalSpeed>1</wpml:useGlobalSpeed>
+ <wpml:useGlobalHeadingParam>1</wpml:useGlobalHeadingParam>
+ <wpml:useGlobalTurnParam>1</wpml:useGlobalTurnParam>
+ <wpml:useStraightLine></wpml:useStraightLine>
+ <!-- 宣布航路点1#的行动组 -->
+ <wpml:actionGroup>
+ <wpml:actionGroupId>8</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>8</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>8</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>0</wpml:actionId>
+ <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:fileSuffix>航点dkbh02</wpml:fileSuffix>
+ <wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>
+ <wpml:useGlobalPayloadLensIndex>1</wpml:useGlobalPayloadLensIndex>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>1</wpml:actionId>
+ <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:gimbalHeadingYawBase>north</wpml:gimbalHeadingYawBase>
+ <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
+ <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
+ <wpml:gimbalPitchRotateAngle>-83</wpml:gimbalPitchRotateAngle>
+ <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
+ <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
+ <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
+ <wpml:gimbalYawRotateAngle>0</wpml:gimbalYawRotateAngle>
+ <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
+ <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ </wpml:actionGroup>
+ </Placemark>
+ <Placemark>
+ <Point>
+ <!-- 经度和纬度 -->
+ <coordinates>
+ 115.838147600941,28.618654178036
+ </coordinates>
+ </Point>
+ <wpml:index>8</wpml:index>
+ <wpml:ellipsoidHeight>100</wpml:ellipsoidHeight>
+ <wpml:height>100</wpml:height>
+ <wpml:waypointSpeed></wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex></wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useGlobalHeight>1</wpml:useGlobalHeight>
+ <wpml:useGlobalSpeed>1</wpml:useGlobalSpeed>
+ <wpml:useGlobalHeadingParam>1</wpml:useGlobalHeadingParam>
+ <wpml:useGlobalTurnParam>1</wpml:useGlobalTurnParam>
+ <wpml:useStraightLine></wpml:useStraightLine>
+ <!-- 宣布航路点1#的行动组 -->
+ <wpml:actionGroup>
+ <wpml:actionGroupId>9</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>9</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>9</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>0</wpml:actionId>
+ <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:fileSuffix>航点dkbh03</wpml:fileSuffix>
+ <wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>
+ <wpml:useGlobalPayloadLensIndex>1</wpml:useGlobalPayloadLensIndex>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>1</wpml:actionId>
+ <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:gimbalHeadingYawBase>north</wpml:gimbalHeadingYawBase>
+ <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
+ <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
+ <wpml:gimbalPitchRotateAngle>-83</wpml:gimbalPitchRotateAngle>
+ <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
+ <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
+ <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
+ <wpml:gimbalYawRotateAngle>0</wpml:gimbalYawRotateAngle>
+ <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
+ <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ </wpml:actionGroup>
+ </Placemark>
+ <Placemark>
+ <Point>
+ <!-- 经度和纬度 -->
+ <coordinates>
+ 115.838147600941,28.6160843601496
+ </coordinates>
+ </Point>
+ <wpml:index>9</wpml:index>
+ <wpml:ellipsoidHeight>100</wpml:ellipsoidHeight>
+ <wpml:height>100</wpml:height>
+ <wpml:waypointSpeed></wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex></wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useGlobalHeight>1</wpml:useGlobalHeight>
+ <wpml:useGlobalSpeed>1</wpml:useGlobalSpeed>
+ <wpml:useGlobalHeadingParam>1</wpml:useGlobalHeadingParam>
+ <wpml:useGlobalTurnParam>1</wpml:useGlobalTurnParam>
+ <wpml:useStraightLine></wpml:useStraightLine>
+ <!-- 宣布航路点1#的行动组 -->
+ <wpml:actionGroup>
+ <wpml:actionGroupId>10</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>10</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>10</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>0</wpml:actionId>
+ <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:fileSuffix>航点dkbh03</wpml:fileSuffix>
+ <wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>
+ <wpml:useGlobalPayloadLensIndex>1</wpml:useGlobalPayloadLensIndex>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>1</wpml:actionId>
+ <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:gimbalHeadingYawBase>north</wpml:gimbalHeadingYawBase>
+ <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
+ <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
+ <wpml:gimbalPitchRotateAngle>-83</wpml:gimbalPitchRotateAngle>
+ <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
+ <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
+ <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
+ <wpml:gimbalYawRotateAngle>0</wpml:gimbalYawRotateAngle>
+ <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
+ <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ </wpml:actionGroup>
+ </Placemark>
+ <Placemark>
+ <Point>
+ <!-- 经度和纬度 -->
+ <coordinates>
+ 115.841288489469,28.6160843601496
+ </coordinates>
+ </Point>
+ <wpml:index>10</wpml:index>
+ <wpml:ellipsoidHeight>100</wpml:ellipsoidHeight>
+ <wpml:height>100</wpml:height>
+ <wpml:waypointSpeed></wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex></wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useGlobalHeight>1</wpml:useGlobalHeight>
+ <wpml:useGlobalSpeed>1</wpml:useGlobalSpeed>
+ <wpml:useGlobalHeadingParam>1</wpml:useGlobalHeadingParam>
+ <wpml:useGlobalTurnParam>1</wpml:useGlobalTurnParam>
+ <wpml:useStraightLine></wpml:useStraightLine>
+ <!-- 宣布航路点1#的行动组 -->
+ <wpml:actionGroup>
+ <wpml:actionGroupId>11</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>11</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>11</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>0</wpml:actionId>
+ <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:fileSuffix>航点dkbh03</wpml:fileSuffix>
+ <wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>
+ <wpml:useGlobalPayloadLensIndex>1</wpml:useGlobalPayloadLensIndex>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>1</wpml:actionId>
+ <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:gimbalHeadingYawBase>north</wpml:gimbalHeadingYawBase>
+ <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
+ <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
+ <wpml:gimbalPitchRotateAngle>-83</wpml:gimbalPitchRotateAngle>
+ <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
+ <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
+ <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
+ <wpml:gimbalYawRotateAngle>0</wpml:gimbalYawRotateAngle>
+ <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
+ <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ </wpml:actionGroup>
+ </Placemark>
+ <Placemark>
+ <Point>
+ <!-- 经度和纬度 -->
+ <coordinates>
+ 115.841288489469,28.618654178036
+ </coordinates>
+ </Point>
+ <wpml:index>11</wpml:index>
+ <wpml:ellipsoidHeight>100</wpml:ellipsoidHeight>
+ <wpml:height>100</wpml:height>
+ <wpml:waypointSpeed></wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>followWayline</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>0</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex></wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>toPointAndStopWithDiscontinuityCurvature</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useGlobalHeight>1</wpml:useGlobalHeight>
+ <wpml:useGlobalSpeed>1</wpml:useGlobalSpeed>
+ <wpml:useGlobalHeadingParam>1</wpml:useGlobalHeadingParam>
+ <wpml:useGlobalTurnParam>1</wpml:useGlobalTurnParam>
+ <wpml:useStraightLine></wpml:useStraightLine>
+ <!-- 宣布航路点1#的行动组 -->
+ <wpml:actionGroup>
+ <wpml:actionGroupId>12</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>12</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>12</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>0</wpml:actionId>
+ <wpml:actionActuatorFunc>takePhoto</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:fileSuffix>航点dkbh03</wpml:fileSuffix>
+ <wpml:payloadLensIndex>wide,ir</wpml:payloadLensIndex>
+ <wpml:useGlobalPayloadLensIndex>1</wpml:useGlobalPayloadLensIndex>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>1</wpml:actionId>
+ <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:gimbalHeadingYawBase>north</wpml:gimbalHeadingYawBase>
+ <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
+ <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
+ <wpml:gimbalPitchRotateAngle>-83</wpml:gimbalPitchRotateAngle>
+ <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
+ <wpml:gimbalRollRotateAngle>0</wpml:gimbalRollRotateAngle>
+ <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
+ <wpml:gimbalYawRotateAngle>0</wpml:gimbalYawRotateAngle>
+ <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
+ <wpml:gimbalRotateTime>0</wpml:gimbalRotateTime>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ </wpml:actionGroup>
+ </Placemark>
+ <!-- 负载设置 -->
+ <wpml:payloadParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <wpml:focusMode></wpml:focusMode>
+ <wpml:meteringMode></wpml:meteringMode>
+ <wpml:returnMode></wpml:returnMode>
+ <wpml:samplingRate></wpml:samplingRate>
+ <wpml:scanningMode></wpml:scanningMode>
+ <wpml:imageFormat>wide,ir</wpml:imageFormat>
+ </wpml:payloadParam>
+ </Folder>
+ </Document>
+</kml>
diff --git a/src/main/resources/template/template.xml b/src/main/resources/template/template.xml
new file mode 100644
index 0000000..d812a51
--- /dev/null
+++ b/src/main/resources/template/template.xml
@@ -0,0 +1,181 @@
+<?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.3">
+ <Document>
+ <!-- 步骤1:实现文件创建信息 -->
+ <wpml:author>${author!''}</wpml:author>
+ <wpml:createTime>${createTime!''}</wpml:createTime>
+ <wpml:updateTime>${updateTime!''}</wpml:updateTime>
+ <!-- 步骤2:设置任务配置 -->
+ <wpml:missionConfig>
+ <wpml:flyToWaylineMode>${missionConfig.flyToWaylineMode!''}</wpml:flyToWaylineMode>
+ <wpml:finishAction>${missionConfig.finishAction!''}</wpml:finishAction>
+ <wpml:exitOnRCLost>${missionConfig.exitOnRCLost!''}</wpml:exitOnRCLost>
+ <wpml:executeRCLostAction>${missionConfig.executeRCLostAction!''}</wpml:executeRCLostAction>
+ <wpml:takeOffSecurityHeight>${missionConfig.takeOffSecurityHeight!''}</wpml:takeOffSecurityHeight>
+ <wpml:takeOffRefPoint>${missionConfig.takeOffRefPoint!''}</wpml:takeOffRefPoint>
+ <wpml:takeOffRefPointAGLHeight>${missionConfig.takeOffRefPointAGLHeight!''}</wpml:takeOffRefPointAGLHeight>
+ <wpml:globalTransitionalSpeed>${missionConfig.globalTransitionalSpeed!''}</wpml:globalTransitionalSpeed>
+ <wpml:globalRTHHeight>${missionConfig.globalRTHHeight!''}</wpml:globalRTHHeight>
+ <wpml:droneInfo>
+ <!-- 用M30申报无人机型号 -->
+ <wpml:droneEnumValue>${missionConfig.droneInfo.droneEnumValue!''}</wpml:droneEnumValue>
+ <wpml:droneSubEnumValue>${missionConfig.droneInfo.droneSubEnumValue!''}</wpml:droneSubEnumValue>
+ </wpml:droneInfo>
+ <wpml:payloadInfo>
+ <!-- 用M30声明有效载荷模型 -->
+ <wpml:payloadEnumValue>${missionConfig.payloadInfo.payloadEnumValue!''}</wpml:payloadEnumValue>
+ <wpml:payloadSubEnumValue>${missionConfig.payloadInfo.payloadSubEnumValue!''}</wpml:payloadSubEnumValue>
+ <wpml:payloadPositionIndex>${missionConfig.payloadInfo.payloadPositionIndex!''}</wpml:payloadPositionIndex>
+ </wpml:payloadInfo>
+ </wpml:missionConfig>
+ <!-- 步骤3:设置路径点模板文件夹 -->
+ <Folder>
+ <wpml:templateType>${folder.templateType!''}</wpml:templateType>
+ <wpml:templateId>${folder.templateId!''}</wpml:templateId>
+ <wpml:waylineCoordinateSysParam>
+ <wpml:coordinateMode>${folder.waylineCoordinateSysParam.coordinateMode!''}</wpml:coordinateMode>
+ <wpml:heightMode>${folder.waylineCoordinateSysParam.heightMode!''}</wpml:heightMode>
+ </wpml:waylineCoordinateSysParam>
+ <wpml:autoFlightSpeed>${folder.autoFlightSpeed!''}</wpml:autoFlightSpeed>
+ <wpml:globalHeight>${folder.globalHeight!''}</wpml:globalHeight>
+ <wpml:caliFlightEnable>${folder.caliFlightEnable!''}</wpml:caliFlightEnable>
+ <wpml:gimbalPitchMode>${folder.gimbalPitchMode!''}</wpml:gimbalPitchMode>
+ <wpml:globalWaypointHeadingParam>
+ <wpml:waypointHeadingMode>${folder.globalWaypointHeadingParam.waypointHeadingMode!''}</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>${folder.globalWaypointHeadingParam.waypointHeadingAngle!''}</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>${folder.globalWaypointHeadingParam.waypointPoiPoint!''}</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>${folder.globalWaypointHeadingParam.waypointHeadingPathMode!''}</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex>${folder.globalWaypointHeadingParam.waypointHeadingPoiIndex!''}</wpml:waypointHeadingPoiIndex>
+ </wpml:globalWaypointHeadingParam>
+ <wpml:globalWaypointTurnMode>${folder.globalWaypointTurnMode!''}</wpml:globalWaypointTurnMode>
+ <wpml:globalUseStraightLine>${folder.globalUseStraightLine!''}</wpml:globalUseStraightLine>
+ <#if folder.placemarkList??>
+ <#assign placemarkIndex = 0>
+ <#list folder.placemarkList as placemark>
+ <Placemark>
+ <Point>
+ <!-- 经度和纬度 -->
+ <coordinates>
+ ${placemark.coordinates!''}
+ </coordinates>
+ </Point>
+ <wpml:index>${placemarkIndex!''}</wpml:index>
+ <#assign placemarkIndex = placemarkIndex + 1>
+ <wpml:ellipsoidHeight>${placemark.ellipsoidHeight!''}</wpml:ellipsoidHeight>
+ <wpml:height>${placemark.height!''}</wpml:height>
+ <wpml:waypointSpeed>${placemark.waypointSpeed!''}</wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>${folder.globalWaypointHeadingParam.waypointHeadingMode!''}</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>${folder.globalWaypointHeadingParam.waypointHeadingAngle!''}</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>${folder.globalWaypointHeadingParam.waypointPoiPoint!''}</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>${folder.globalWaypointHeadingParam.waypointHeadingPathMode!''}</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex>${folder.globalWaypointHeadingParam.waypointHeadingPoiIndex!''}</wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>${folder.globalWaypointTurnMode!''}</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useGlobalHeight>${placemark.useGlobalHeight!''}</wpml:useGlobalHeight>
+ <wpml:useGlobalSpeed>${placemark.useGlobalSpeed!''}</wpml:useGlobalSpeed>
+ <wpml:useGlobalHeadingParam>${placemark.useGlobalHeadingParam!''}</wpml:useGlobalHeadingParam>
+ <wpml:useGlobalTurnParam>${placemark.useGlobalTurnParam!''}</wpml:useGlobalTurnParam>
+ <wpml:useStraightLine>${placemark.useStraightLine!''}</wpml:useStraightLine>
+ <!-- 宣布航路点1#的行动组 -->
+ <#if placemark.actionGroup??>
+ <wpml:actionGroup>
+ <wpml:actionGroupId>${placemark.actionGroup.actionGroupId!''}</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>${placemark.actionGroup.actionGroupStartIndex!''}</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>${placemark.actionGroup.actionGroupEndIndex!''}</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>${placemark.actionGroup.actionGroupMode!''}</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>${placemark.actionGroup.actionTrigger.actionTriggerType!''}</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <#if placemark.actionGroup.actions??>
+ <#assign idx = 0>
+ <#list placemark.actionGroup.actions as action>
+ <!-- 动作 -->
+ <wpml:action>
+ <wpml:actionId>${idx!''}</wpml:actionId>
+ <wpml:actionActuatorFunc>${action.actionActuatorFunc!''}</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <#if action.actionActuatorFuncParam.fileSuffix??>
+ <wpml:fileSuffix>${action.actionActuatorFuncParam.fileSuffix!''}</wpml:fileSuffix>
+ </#if>
+ <#if action.actionActuatorFuncParam.payloadLensIndex??>
+ <wpml:payloadLensIndex>${action.actionActuatorFuncParam.payloadLensIndex!''}</wpml:payloadLensIndex>
+ </#if>
+ <#if action.actionActuatorFuncParam.useGlobalPayloadLensIndex??>
+ <wpml:useGlobalPayloadLensIndex>${action.actionActuatorFuncParam.useGlobalPayloadLensIndex!''}</wpml:useGlobalPayloadLensIndex>
+ </#if>
+ <#if action.actionActuatorFuncParam.isPointFocus??>
+ <wpml:isPointFocus>${action.actionActuatorFuncParam.isPointFocus!''}</wpml:isPointFocus>
+ </#if>
+ <#if action.actionActuatorFuncParam.focusX??>
+ <wpml:focusX>${action.actionActuatorFuncParam.focusX!''}</wpml:focusX>
+ </#if>
+ <#if action.actionActuatorFuncParam.focusY??>
+ <wpml:focusY>${action.actionActuatorFuncParam.focusY!''}</wpml:focusY>
+ </#if>
+ <#if action.actionActuatorFuncParam.focusRegionWidth??>
+ <wpml:focusRegionWidth>${action.actionActuatorFuncParam.focusRegionWidth!''}</wpml:focusRegionWidth>
+ </#if>
+ <#if action.actionActuatorFuncParam.focusRegionHeight??>
+ <wpml:focusRegionHeight>${action.actionActuatorFuncParam.focusRegionHeight!''}</wpml:focusRegionHeight>
+ </#if>
+ <#if action.actionActuatorFuncParam.isInfiniteFocus??>
+ <wpml:isInfiniteFocus>${action.actionActuatorFuncParam.isInfiniteFocus!''}</wpml:isInfiniteFocus>
+ </#if>
+ <#if action.actionActuatorFuncParam.gimbalHeadingYawBase??>
+ <wpml:gimbalHeadingYawBase>${action.actionActuatorFuncParam.gimbalHeadingYawBase!''}</wpml:gimbalHeadingYawBase>
+ </#if>
+ <#if action.actionActuatorFuncParam.gimbalRotateMode??>
+ <wpml:gimbalRotateMode>${action.actionActuatorFuncParam.gimbalRotateMode!''}</wpml:gimbalRotateMode>
+ </#if>
+ <#if action.actionActuatorFuncParam.gimbalPitchRotateEnable??>
+ <wpml:gimbalPitchRotateEnable>${action.actionActuatorFuncParam.gimbalPitchRotateEnable!''}</wpml:gimbalPitchRotateEnable>
+ </#if>
+ <#if action.actionActuatorFuncParam.gimbalPitchRotateAngle??>
+ <wpml:gimbalPitchRotateAngle>${action.actionActuatorFuncParam.gimbalPitchRotateAngle!''}</wpml:gimbalPitchRotateAngle>
+ </#if>
+ <#if action.actionActuatorFuncParam.gimbalRollRotateEnable??>
+ <wpml:gimbalRollRotateEnable>${action.actionActuatorFuncParam.gimbalRollRotateEnable!''}</wpml:gimbalRollRotateEnable>
+ </#if>
+ <#if action.actionActuatorFuncParam.gimbalRollRotateAngle??>
+ <wpml:gimbalRollRotateAngle>${action.actionActuatorFuncParam.gimbalRollRotateAngle!''}</wpml:gimbalRollRotateAngle>
+ </#if>
+ <#if action.actionActuatorFuncParam.gimbalYawRotateEnable??>
+ <wpml:gimbalYawRotateEnable>${action.actionActuatorFuncParam.gimbalYawRotateEnable!''}</wpml:gimbalYawRotateEnable>
+ </#if>
+ <#if action.actionActuatorFuncParam.gimbalYawRotateAngle??>
+ <wpml:gimbalYawRotateAngle>${action.actionActuatorFuncParam.gimbalYawRotateAngle!''}</wpml:gimbalYawRotateAngle>
+ </#if>
+ <#if action.actionActuatorFuncParam.gimbalRotateTimeEnable??>
+ <wpml:gimbalRotateTimeEnable>${action.actionActuatorFuncParam.gimbalRotateTimeEnable!''}</wpml:gimbalRotateTimeEnable>
+ </#if>
+ <#if action.actionActuatorFuncParam.gimbalRotateTime??>
+ <wpml:gimbalRotateTime>${action.actionActuatorFuncParam.gimbalRotateTime!''}</wpml:gimbalRotateTime>
+ </#if>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <#assign idx = idx + 1>
+ </#list>
+ </#if>
+ </wpml:actionGroup>
+ </#if>
+ </Placemark>
+ </#list>
+ </#if>
+ <!-- 负载设置 -->
+ <wpml:payloadParam>
+ <wpml:payloadPositionIndex>${folder.payloadParam.payloadPositionIndex!''}</wpml:payloadPositionIndex>
+ <wpml:focusMode>${folder.payloadParam.focusMode!''}</wpml:focusMode>
+ <wpml:meteringMode>${folder.payloadParam.meteringMode!''}</wpml:meteringMode>
+ <wpml:returnMode>${folder.payloadParam.returnMode!''}</wpml:returnMode>
+ <wpml:samplingRate>${folder.payloadParam.samplingRate!''}</wpml:samplingRate>
+ <wpml:scanningMode>${folder.payloadParam.scanningMode!''}</wpml:scanningMode>
+ <wpml:imageFormat>${folder.payloadParam.imageFormat!''}</wpml:imageFormat>
+ </wpml:payloadParam>
+ </Folder>
+ </Document>
+</kml>
diff --git a/src/main/resources/template/waylines.xml b/src/main/resources/template/waylines.xml
new file mode 100644
index 0000000..8140d2f
--- /dev/null
+++ b/src/main/resources/template/waylines.xml
@@ -0,0 +1,136 @@
+<?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.3">
+ <Document>
+ <wpml:missionConfig>
+ <wpml:flyToWaylineMode>${missionConfig.flyToWaylineMode!''}</wpml:flyToWaylineMode>
+ <wpml:finishAction>${missionConfig.finishAction!''}</wpml:finishAction>
+ <wpml:exitOnRCLost>${missionConfig.exitOnRCLost!''}</wpml:exitOnRCLost>
+ <wpml:executeRCLostAction>${missionConfig.executeRCLostAction!''}</wpml:executeRCLostAction>
+ <wpml:takeOffSecurityHeight>${missionConfig.takeOffSecurityHeight!''}</wpml:takeOffSecurityHeight>
+ <wpml:globalTransitionalSpeed>${missionConfig.globalTransitionalSpeed!''}</wpml:globalTransitionalSpeed>
+ <wpml:globalRTHHeight>${missionConfig.globalRTHHeight!''}</wpml:globalRTHHeight>
+ <wpml:droneInfo>
+ <wpml:droneEnumValue>${missionConfig.droneInfo.droneEnumValue!''}</wpml:droneEnumValue>
+ <wpml:droneSubEnumValue>${missionConfig.droneInfo.droneSubEnumValue!''}</wpml:droneSubEnumValue>
+ </wpml:droneInfo>
+ <wpml:payloadInfo>
+ <wpml:payloadEnumValue>${missionConfig.payloadInfo.payloadEnumValue!''}</wpml:payloadEnumValue>
+ <wpml:payloadSubEnumValue>${missionConfig.payloadInfo.payloadSubEnumValue!''}</wpml:payloadSubEnumValue>
+ <wpml:payloadPositionIndex>${missionConfig.payloadInfo.payloadPositionIndex!''}</wpml:payloadPositionIndex>
+ </wpml:payloadInfo>
+ </wpml:missionConfig>
+ <Folder>
+ <wpml:templateId>${folder.templateId!''}</wpml:templateId>
+ <wpml:executeHeightMode>${folder.waylineCoordinateSysParam.heightMode!''}</wpml:executeHeightMode>
+ <wpml:waylineId>0</wpml:waylineId>
+ <wpml:autoFlightSpeed>${folder.autoFlightSpeed!''}</wpml:autoFlightSpeed>
+ <#if folder.placemarkList??>
+ <#assign placemarkIndex = 0>
+ <#list folder.placemarkList as placemark>
+ <Placemark>
+ <Point>
+ <coordinates>
+ ${placemark.coordinates!''}
+ </coordinates>
+ </Point>
+ <wpml:index>${placemarkIndex!''}</wpml:index>
+ <#assign placemarkIndex = placemarkIndex + 1>
+ <wpml:executeHeight>${placemark.height!''}</wpml:executeHeight>
+ <wpml:waypointSpeed>${placemark.waypointSpeed!''}</wpml:waypointSpeed>
+ <wpml:waypointHeadingParam>
+ <wpml:waypointHeadingMode>${folder.globalWaypointHeadingParam.waypointHeadingMode!''}</wpml:waypointHeadingMode>
+ <wpml:waypointHeadingAngle>${folder.globalWaypointHeadingParam.waypointHeadingAngle!''}</wpml:waypointHeadingAngle>
+ <wpml:waypointPoiPoint>${folder.globalWaypointHeadingParam.waypointPoiPoint!''}</wpml:waypointPoiPoint>
+ <wpml:waypointHeadingPathMode>${folder.globalWaypointHeadingParam.waypointHeadingPathMode!''}</wpml:waypointHeadingPathMode>
+ <wpml:waypointHeadingPoiIndex>${folder.globalWaypointHeadingParam.waypointHeadingPoiIndex!''}</wpml:waypointHeadingPoiIndex>
+ </wpml:waypointHeadingParam>
+ <wpml:waypointTurnParam>
+ <wpml:waypointTurnMode>${folder.globalWaypointTurnMode!''}</wpml:waypointTurnMode>
+ <wpml:waypointTurnDampingDist>0.2</wpml:waypointTurnDampingDist>
+ </wpml:waypointTurnParam>
+ <wpml:useStraightLine>${folder.globalUseStraightLine!''}</wpml:useStraightLine>
+ <wpml:actionGroup>
+ <wpml:actionGroupId>${placemark.actionGroup.actionGroupId!''}</wpml:actionGroupId>
+ <wpml:actionGroupStartIndex>${placemark.actionGroup.actionGroupStartIndex!''}</wpml:actionGroupStartIndex>
+ <wpml:actionGroupEndIndex>${placemark.actionGroup.actionGroupEndIndex!''}</wpml:actionGroupEndIndex>
+ <wpml:actionGroupMode>${placemark.actionGroup.actionGroupMode!''}</wpml:actionGroupMode>
+ <wpml:actionTrigger>
+ <wpml:actionTriggerType>${placemark.actionGroup.actionTrigger.actionTriggerType!''}</wpml:actionTriggerType>
+ </wpml:actionTrigger>
+ <#if placemark.actionGroup.actions??>
+ <#assign idx = 0>
+ <#list placemark.actionGroup.actions as action>
+ <wpml:action>
+ <wpml:actionId>${idx!''}</wpml:actionId>
+ <wpml:actionActuatorFunc>${action.actionActuatorFunc!''}</wpml:actionActuatorFunc>
+ <wpml:actionActuatorFuncParam>
+ <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
+ <#if action.actionActuatorFuncParam.fileSuffix??>
+ <wpml:fileSuffix>${action.actionActuatorFuncParam.fileSuffix!''}</wpml:fileSuffix>
+ </#if>
+ <#if action.actionActuatorFuncParam.payloadLensIndex??>
+ <wpml:payloadLensIndex>${action.actionActuatorFuncParam.payloadLensIndex!''}</wpml:payloadLensIndex>
+ </#if>
+ <#if action.actionActuatorFuncParam.useGlobalPayloadLensIndex??>
+ <wpml:useGlobalPayloadLensIndex>${action.actionActuatorFuncParam.useGlobalPayloadLensIndex!''}</wpml:useGlobalPayloadLensIndex>
+ </#if>
+ <#if action.actionActuatorFuncParam.isPointFocus??>
+ <wpml:isPointFocus>${action.actionActuatorFuncParam.isPointFocus!''}</wpml:isPointFocus>
+ </#if>
+ <#if action.actionActuatorFuncParam.focusX??>
+ <wpml:focusX>${action.actionActuatorFuncParam.focusX!''}</wpml:focusX>
+ </#if>
+ <#if action.actionActuatorFuncParam.focusY??>
+ <wpml:focusY>${action.actionActuatorFuncParam.focusY!''}</wpml:focusY>
+ </#if>
+ <#if action.actionActuatorFuncParam.focusRegionWidth??>
+ <wpml:focusRegionWidth>${action.actionActuatorFuncParam.focusRegionWidth!''}</wpml:focusRegionWidth>
+ </#if>
+ <#if action.actionActuatorFuncParam.focusRegionHeight??>
+ <wpml:focusRegionHeight>${action.actionActuatorFuncParam.focusRegionHeight!''}</wpml:focusRegionHeight>
+ </#if>
+ <#if action.actionActuatorFuncParam.isInfiniteFocus??>
+ <wpml:isInfiniteFocus>${action.actionActuatorFuncParam.isInfiniteFocus!''}</wpml:isInfiniteFocus>
+ </#if>
+ <#if action.actionActuatorFuncParam.gimbalHeadingYawBase??>
+ <wpml:gimbalHeadingYawBase>${action.actionActuatorFuncParam.gimbalHeadingYawBase!''}</wpml:gimbalHeadingYawBase>
+ </#if>
+ <#if action.actionActuatorFuncParam.gimbalRotateMode??>
+ <wpml:gimbalRotateMode>${action.actionActuatorFuncParam.gimbalRotateMode!''}</wpml:gimbalRotateMode>
+ </#if>
+ <#if action.actionActuatorFuncParam.gimbalPitchRotateEnable??>
+ <wpml:gimbalPitchRotateEnable>${action.actionActuatorFuncParam.gimbalPitchRotateEnable!''}</wpml:gimbalPitchRotateEnable>
+ </#if>
+ <#if action.actionActuatorFuncParam.gimbalPitchRotateAngle??>
+ <wpml:gimbalPitchRotateAngle>${action.actionActuatorFuncParam.gimbalPitchRotateAngle!''}</wpml:gimbalPitchRotateAngle>
+ </#if>
+ <#if action.actionActuatorFuncParam.gimbalRollRotateEnable??>
+ <wpml:gimbalRollRotateEnable>${action.actionActuatorFuncParam.gimbalRollRotateEnable!''}</wpml:gimbalRollRotateEnable>
+ </#if>
+ <#if action.actionActuatorFuncParam.gimbalRollRotateAngle??>
+ <wpml:gimbalRollRotateAngle>${action.actionActuatorFuncParam.gimbalRollRotateAngle!''}</wpml:gimbalRollRotateAngle>
+ </#if>
+ <#if action.actionActuatorFuncParam.gimbalYawRotateEnable??>
+ <wpml:gimbalYawRotateEnable>${action.actionActuatorFuncParam.gimbalYawRotateEnable!''}</wpml:gimbalYawRotateEnable>
+ </#if>
+ <#if action.actionActuatorFuncParam.gimbalYawRotateAngle??>
+ <wpml:gimbalYawRotateAngle>${action.actionActuatorFuncParam.gimbalYawRotateAngle!''}</wpml:gimbalYawRotateAngle>
+ </#if>
+ <#if action.actionActuatorFuncParam.gimbalRotateTimeEnable??>
+ <wpml:gimbalRotateTimeEnable>${action.actionActuatorFuncParam.gimbalRotateTimeEnable!''}</wpml:gimbalRotateTimeEnable>
+ </#if>
+ <#if action.actionActuatorFuncParam.gimbalRotateTime??>
+ <wpml:gimbalRotateTime>${action.actionActuatorFuncParam.gimbalRotateTime!''}</wpml:gimbalRotateTime>
+ </#if>
+ </wpml:actionActuatorFuncParam>
+ </wpml:action>
+ <#assign idx = idx + 1>
+ </#list>
+ </#if>
+ </wpml:actionGroup>
+ </Placemark>
+ </#list>
+ </#if>
+ </Folder>
+ </Document>
+</kml>
diff --git a/src/main/resources/template2/newTemplate.xml b/src/main/resources/template2/newTemplate.xml
new file mode 100644
index 0000000..afea1e4
--- /dev/null
+++ b/src/main/resources/template2/newTemplate.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<INFO>这就是一个简单的模板</INFO>
+<Profile>
+<ID>9e55fa00152a4f5bab88c6215664d03c</ID>
+<Name>张三三</Name>
+
+<Demo>
+ <Subject>subject0</Subject>
+ <Score>60</Score>
+</Demo>
+<Demo>
+ <Subject>subject1</Subject>
+ <Score>61</Score>
+</Demo>
+<Demo>
+ <Subject>subject2</Subject>
+ <Score>62</Score>
+</Demo>
+<Demo>
+ <Subject>subject3</Subject>
+ <Score>63</Score>
+</Demo>
+<Demo>
+ <Subject>subject4</Subject>
+ <Score>64</Score>
+</Demo>
+<Demo>
+ <Subject>subject5</Subject>
+ <Score>65</Score>
+</Demo>
+<Demo>
+ <Subject>subject6</Subject>
+ <Score>66</Score>
+</Demo>
+<Demo>
+ <Subject>subject7</Subject>
+ <Score>67</Score>
+</Demo>
+<Demo>
+ <Subject>subject8</Subject>
+ <Score>68</Score>
+</Demo>
+<Demo>
+ <Subject>subject9</Subject>
+ <Score>69</Score>
+</Demo>
+
+</Profile>
diff --git a/src/main/resources/template2/template.xml b/src/main/resources/template2/template.xml
new file mode 100644
index 0000000..c5c51ea
--- /dev/null
+++ b/src/main/resources/template2/template.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<INFO>这就是一个简单的模板</INFO>
+<Profile>
+<ID>${id!''}</ID>
+<Name>${name!''}</Name>
+
+<#list demoList as list>
+<Demo>
+ <Subject>${list.subject}</Subject>
+ <Score>${list.score}</Score>
+</Demo>
+</#list>
+
+</Profile>
--
Gitblit v1.9.3