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;
|
}
|
|
}
|