package com.ard.route.util; import com.ard.oss.service.impl.OssServiceContext; import com.ard.route.domain.djuav.ActionGroupReq; import com.ard.route.domain.djuav.PointActionReq; import com.ard.route.domain.djuav.RoutePointReq; import com.ard.route.domain.djuav.UavRouteReq; import com.ard.route.domain.djuav.kml.*; import com.ard.route.domain.vo.KmzInfoVo; import org.apache.commons.compress.archivers.ArchiveEntry; import org.apache.commons.compress.archivers.ArchiveInputStream; import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import java.util.Objects; import static com.ard.route.util.ToolUtils.getDoublePoint; public class UavRouteReqUtils { // 将文件转换成 UavRouteReq 实体 public static UavRouteReq fileConversionEntity(MultipartFile file){ KmzInfoVo kmzInfoVO = new KmzInfoVo(); try (InputStream inputStream = file.getInputStream(); ArchiveInputStream archiveInputStream = new ZipArchiveInputStream(inputStream)){ ArchiveEntry entry; while (!Objects.isNull(entry = archiveInputStream.getNextEntry())) { String name = entry.getName(); if (name.toLowerCase().endsWith(".kml")) { kmzInfoVO.setKmlInfo(RouteFileUtils.parseKml(archiveInputStream)); } else if (name.toLowerCase().endsWith(".wpml")) { kmzInfoVO.setWpmlInfo(RouteFileUtils.parseKml(archiveInputStream)); } } return kmzInfoVoToUavRouteReq(kmzInfoVO); }catch (Exception e) { e.printStackTrace(); } return null; } public static UavRouteReq kmzInfoVoToUavRouteReq(KmzInfoVo vo) { UavRouteReq uavRouteReq = new UavRouteReq(); if (vo.getKmlInfo().getDocument().getFolder().getTemplateType() != null){ uavRouteReq.setTemplateType(vo.getKmlInfo().getDocument().getFolder().getTemplateType()); } uavRouteReq.setDroneType(Integer.valueOf(vo.getKmlInfo().getDocument().getKmlMissionConfig().getDroneInfo().getDroneEnumValue())); uavRouteReq.setImageFormat(vo.getKmlInfo().getDocument().getFolder().getPayloadParam().getImageFormat()); uavRouteReq.setGlobalHeight(Double.valueOf(vo.getKmlInfo().getDocument().getFolder().getGlobalHeight())); uavRouteReq.setAutoFlightSpeed(Double.valueOf(vo.getKmlInfo().getDocument().getFolder().getAutoFlightSpeed())); uavRouteReq.setTakeOffRefPoint(vo.getKmlInfo().getDocument().getKmlMissionConfig().getTakeOffRefPoint()); uavRouteReq.setRoutePointList(routePointList(vo.getKmlInfo().getDocument().getFolder().getPlacemarkList())); return uavRouteReq; } public static List routePointList(List placemarkList) { List routePointList = new ArrayList<>(); for (KmlPlacemark kmlPlacemark : placemarkList) { RoutePointReq routePointReq = new RoutePointReq(); routePointReq.setRoutePointIndex(Integer.valueOf(kmlPlacemark.getIndex())); routePointReq.setLongitude(getDoublePoint(kmlPlacemark.getKmlPoint().getCoordinates(),"lon")); routePointReq.setLatitude(getDoublePoint(kmlPlacemark.getKmlPoint().getCoordinates(),"lat")); routePointReq.setHeight(Double.valueOf(kmlPlacemark.getHeight())); if (kmlPlacemark.getWaypointSpeed() != null) { routePointReq.setSpeed(Double.valueOf(kmlPlacemark.getWaypointSpeed())); } if (kmlPlacemark.getActionGroup() != null) { routePointReq.setActionGroupList(actionGroupList(kmlPlacemark.getActionGroup())); } routePointList.add(routePointReq); } return routePointList; } public static List actionGroupList(List actionGroup) { List actionGroupList = new ArrayList<>(); for (KmlActionGroup kmlActionGroup : actionGroup) { ActionGroupReq actionGroupReq = new ActionGroupReq(); List actions = new ArrayList<>(); //for (KmlAction kmlAction : kmlActionGroup.getAction()) { for (int i=0 ; i < kmlActionGroup.getAction().size() ; i++) { PointActionReq pointActionReq = actions(kmlActionGroup.getAction().get(i),i); actions.add(pointActionReq); } actionGroupReq.setActions(actions); actionGroupList.add(actionGroupReq); } return actionGroupList; } public static PointActionReq actions(KmlAction kmlAction,Integer actionIndex){ PointActionReq pointActionReq = new PointActionReq(); pointActionReq.setActionIndex(actionIndex); if ("takePhoto".equals(kmlAction.getActionActuatorFunc())) { // 照相 pointActionReq.setTakePhotoType(0); pointActionReq.setFileSuffix(kmlAction.getActionActuatorFuncParam().getFileSuffix()); pointActionReq.setImageFormat(""); pointActionReq.setUseGlobalImageFormat(Integer.valueOf(kmlAction.getActionActuatorFuncParam().getUseGlobalPayloadLensIndex())); } if ("startRecord".equals(kmlAction.getActionActuatorFunc())) { // 开始录像 pointActionReq.setPanoShotSubMode(kmlAction.getActionActuatorFuncParam().getFileSuffix()); pointActionReq.setStartRecord(true); } if ("stopRecord".equals(kmlAction.getActionActuatorFunc())) { // 停止录像 pointActionReq.setStopRecord(true); } if ("gimbalRotate".equals(kmlAction.getActionActuatorFunc())) { // 云台偏航俯仰 if ("1".equals(kmlAction.getActionActuatorFuncParam().getGimbalPitchRotateEnable())) { // 云台俯仰角 pointActionReq.setGimbalPitchRotateAngle(Double.valueOf(kmlAction.getActionActuatorFuncParam().getGimbalPitchRotateAngle())); } if ("1".equals(kmlAction.getActionActuatorFuncParam().getGimbalYawRotateEnable())){ // 云台偏航角 pointActionReq.setGimbalYawRotateAngle(Double.valueOf(kmlAction.getActionActuatorFuncParam().getGimbalYawRotateAngle())); } } if ("zoom".equals(kmlAction.getActionActuatorFunc())) { // 变焦 pointActionReq.setZoom(Double.valueOf(kmlAction.getActionActuatorFuncParam().getFocalLength())); } if ("hover".equals(kmlAction.getActionActuatorFunc())) { // 悬停 pointActionReq.setHoverTime(Integer.valueOf(kmlAction.getActionActuatorFuncParam().getHoverTime())); } if ("rotateYaw".equals(kmlAction.getActionActuatorFunc())) { // 飞行器偏航 pointActionReq.setAircraftHeading(Double.valueOf(kmlAction.getActionActuatorFuncParam().getAircraftHeading())); } return pointActionReq; } }