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<RoutePointReq> routePointList(List<KmlPlacemark> placemarkList) {
|
List<RoutePointReq> 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<ActionGroupReq> actionGroupList(List<KmlActionGroup> actionGroup) {
|
List<ActionGroupReq> actionGroupList = new ArrayList<>();
|
for (KmlActionGroup kmlActionGroup : actionGroup) {
|
ActionGroupReq actionGroupReq = new ActionGroupReq();
|
List<PointActionReq> 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;
|
}
|
|
}
|