xieb
2024-04-08 ff968e2cfb132eb86c70e94e99b9937a8a7b15e9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
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 freemarker.template.Configuration;
import freemarker.template.Template;
import lombok.Builder;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.locationtech.jts.geom.Coordinate;
 
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
 
/**
 * @PROJECT_NAME: drone
 * @DESCRIPTION:
 * @USER: aix
 * @DATE: 2024/3/27 11:11
 */
@Data
@Builder
@Slf4j
public class XMLTemplateModel {
 
    private String author = "aix";
 
    private String createTime;
 
    private String updateTime;
 
    private MissionConfig missionConfig;
 
    private Folder folder;
 
    /**
     * 初始化模板对象
     * @param coordinates
     * @param lotInfos
     * @return
     */
    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(coordinates[0].y + "," + coordinates[0].x + ",0"))
                .folder(folder)
                .build();
 
        return xtm;
    }
 
}