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 lotInfos) { Folder folder = FolderUtils.setFloder(); List 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 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; } }