From 1f6fafd5c0d26ac863e7d48b40c802fa962b07cb Mon Sep 17 00:00:00 2001
From: Xiajijian <1176061145@qq.com>
Date: Sat, 07 Mar 2026 15:39:48 +0800
Subject: [PATCH] 1. 修改生成kmz文件核心代码,海拔高度相关信息。
---
ard-route/src/main/java/com/ard/route/util/RouteFileUtils.java | 66 ++++++++++++++++++++++++--------
1 files changed, 49 insertions(+), 17 deletions(-)
diff --git a/ard-route/src/main/java/com/ard/route/util/RouteFileUtils.java b/ard-route/src/main/java/com/ard/route/util/RouteFileUtils.java
index 628b2b1..b79dc6a 100644
--- a/ard-route/src/main/java/com/ard/route/util/RouteFileUtils.java
+++ b/ard-route/src/main/java/com/ard/route/util/RouteFileUtils.java
@@ -3,8 +3,8 @@
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
-import com.ard.route.domain.*;
-import com.ard.route.domain.kml.*;
+import com.ard.route.domain.djuav.*;
+import com.ard.route.domain.djuav.kml.*;
import com.ard.route.enums.kml.*;
import com.ard.route.constant.FileTypeConstants;
import com.thoughtworks.xstream.XStream;
@@ -36,12 +36,19 @@
*/
public static KmlInfo parseKml(InputStream inputStream) {
XStream xStream = new XStream();
- xStream.allowTypes(new Class[]{KmlInfo.class, KmlAction.class, KmlWayLineCoordinateSysParam.class, KmlPoint.class});
+ xStream.allowTypes(new Class[]{
+ KmlInfo.class,
+ KmlAction.class,
+ KmlWayLineCoordinateSysParam.class,
+ KmlPoint.class,
+ KmlActionGroup.class
+ });
xStream.alias("kml", KmlInfo.class);
xStream.processAnnotations(KmlInfo.class);
xStream.autodetectAnnotations(true);
xStream.ignoreUnknownElements();
xStream.addImplicitCollection(KmlActionGroup.class, "action");
+ xStream.addImplicitCollection(KmlPlacemark.class, "actionGroup");
return (KmlInfo) xStream.fromXML(inputStream);
}
@@ -53,10 +60,11 @@
* @param wpmlInfo wpml 文件信息
* @return 本地文件路径
*/
- public static String buildKmz(String fileName, KmlInfo kmlInfo, KmlInfo wpmlInfo, String kmzFilePath) {
+ public static String buildKmzA(String fileName, KmlInfo kmlInfo, KmlInfo wpmlInfo, String kmzFilePath) {
XStream xStream = new XStream(new DomDriver());
xStream.processAnnotations(KmlInfo.class);
xStream.addImplicitCollection(KmlActionGroup.class, "action");
+ xStream.addImplicitCollection(KmlPlacemark.class, "actionGroup");
String kml = XML_HEADER + xStream.toXML(kmlInfo);
String wpml = XML_HEADER + xStream.toXML(wpmlInfo);
@@ -135,7 +143,9 @@
}else {
kmlMissionConfig.setGlobalTransitionalSpeed("15");
}
- kmlMissionConfig.setGlobalRTHHeight("100");
+ if (kmlParams.getHeightMode().equals(HeightModeEnums.RELATIVE_TO_START_POINT.getValue())){
+ kmlMissionConfig.setGlobalRTHHeight("100");
+ }
kmlMissionConfig.setTakeOffRefPoint(kmlParams.getTakeOffRefPoint());
kmlMissionConfig.setDroneInfo(buildKmlDroneInfo(kmlParams.getDroneType(), kmlParams.getSubDroneType()));
kmlMissionConfig.setPayloadInfo(buildKmlPayloadInfo(kmlParams.getPayloadType(), kmlParams.getPayloadPosition()));
@@ -147,7 +157,8 @@
kmlDroneInfo.setDroneEnumValue(String.valueOf(droneType));
if (Objects.equals(droneType, DroneEnumValueEnums.M30_M30T.getValue()) ||
Objects.equals(droneType, DroneEnumValueEnums.M3D_M3TD.getValue()) ||
- Objects.equals(droneType, DroneEnumValueEnums.M3E_M3T_M3M.getValue())) {
+ Objects.equals(droneType, DroneEnumValueEnums.M3E_M3T_M3M.getValue())||
+ Objects.equals(droneType, DroneEnumValueEnums.MATRICE_4D.getValue())) {
kmlDroneInfo.setDroneSubEnumValue(String.valueOf(subDroneType));
}
return kmlDroneInfo;
@@ -166,13 +177,28 @@
kmlFolder.setAutoFlightSpeed(String.valueOf(kmlParams.getAutoFlightSpeed()));
if (StringUtils.equals(fileType, FileTypeConstants.KML)) {
kmlFolder.setTemplateType(kmlParams.getTemplateType());
- kmlFolder.setWaylineCoordinateSysParam(buildKmlWayLineCoordinateSysParam(kmlParams.getTemplateType(), HeightModeEnums.RELATIVE_TO_START_POINT.getValue(),
- String.valueOf(kmlParams.getGlobalHeight())));
+ if (kmlParams.getHeightMode().equals(HeightModeEnums.RELATIVE_TO_START_POINT.getValue())){
+ kmlFolder.setWaylineCoordinateSysParam(
+ buildKmlWayLineCoordinateSysParam(
+ kmlParams.getTemplateType(),
+ HeightModeEnums.RELATIVE_TO_START_POINT.getValue(),
+ String.valueOf(kmlParams.getGlobalHeight())));
+ }else if(kmlParams.getHeightMode().equals(HeightModeEnums.EGM96.getValue())){
+ kmlFolder.setWaylineCoordinateSysParam(
+ buildKmlWayLineCoordinateSysParam(
+ kmlParams.getTemplateType(),
+ HeightModeEnums.EGM96.getValue(),
+ String.valueOf(kmlParams.getGlobalHeight())));
+ }
kmlFolder.setPayloadParam(buildKmlPayloadParam(kmlParams));
}
if (StringUtils.equals(fileType, FileTypeConstants.WPML)) {
kmlFolder.setWaylineId("0");
- kmlFolder.setExecuteHeightMode(ExecuteHeightModeEnums.RELATIVE_TO_START_POINT.getValue());
+ if (kmlParams.getHeightMode().equals(HeightModeEnums.RELATIVE_TO_START_POINT.getValue())){
+ kmlFolder.setExecuteHeightMode(ExecuteHeightModeEnums.RELATIVE_TO_START_POINT.getValue());
+ } else if (kmlParams.getHeightMode().equals(HeightModeEnums.EGM96.getValue())) {
+ kmlFolder.setExecuteHeightMode(ExecuteHeightModeEnums.WGS84.getValue());
+ }
if (CollectionUtil.isNotEmpty(kmlParams.getStartActionList())) {
KmlActionGroup kmlActionGroup = new KmlActionGroup();
kmlActionGroup.setAction(getKmlActionList(kmlParams.getStartActionList(), kmlParams));
@@ -329,7 +355,9 @@
if (CollectionUtil.isNotEmpty(routePointInfo.getActionGroupList())) {
List<KmlActionGroup> kmlActionGroupList = new ArrayList<>();
for (ActionGroupReq actionGroupReq : routePointInfo.getActionGroupList()) {
- kmlActionGroupList.add(buildKmlActionGroup(actionGroupReq, kmlParams));
+ if (ObjectUtil.isNotEmpty(actionGroupReq.getActions())){
+ kmlActionGroupList.add(buildKmlActionGroup(actionGroupReq, kmlParams));
+ }
}
kmlPlacemark.setActionGroup(kmlActionGroupList);
}
@@ -492,13 +520,13 @@
public static KmlActionGroup buildKmlActionGroup(ActionGroupReq actionGroupReq, KmlParams kmlParams) {
KmlActionGroup kmlActionGroup = new KmlActionGroup();
- kmlActionGroup.setActionGroupId(String.valueOf(actionGroupReq.getActionGroupId()));
- kmlActionGroup.setActionGroupStartIndex(String.valueOf(actionGroupReq.getActionGroupStartIndex()));
- kmlActionGroup.setActionGroupEndIndex(String.valueOf(actionGroupReq.getActionGroupEndIndex()));
- kmlActionGroup.setActionGroupMode(ActionGroupModeEnums.SEQUENCE.getValue());
+ kmlActionGroup.setActionGroupId(String.valueOf(actionGroupReq.getActionGroupId()));
+ kmlActionGroup.setActionGroupStartIndex(String.valueOf(actionGroupReq.getActionGroupStartIndex()));
+ kmlActionGroup.setActionGroupEndIndex(String.valueOf(actionGroupReq.getActionGroupEndIndex()));
+ kmlActionGroup.setActionGroupMode(ActionGroupModeEnums.SEQUENCE.getValue());
- kmlActionGroup.setActionTrigger(buildKmlActionTrigger(actionGroupReq.getActionTriggerType(), actionGroupReq.getActionTriggerParam()));
- kmlActionGroup.setAction(getKmlActionList(actionGroupReq.getActions(), kmlParams));
+ kmlActionGroup.setActionTrigger(buildKmlActionTrigger(actionGroupReq.getActionTriggerType(), actionGroupReq.getActionTriggerParam()));
+ kmlActionGroup.setAction(getKmlActionList(actionGroupReq.getActions(), kmlParams));
return kmlActionGroup;
}
@@ -530,7 +558,11 @@
}else {
kmlActionActuatorFuncParam.setFileSuffix("panoramicPhoto_360");
}
- kmlActionActuatorFuncParam.setUseGlobalPayloadLensIndex(String.valueOf(pointActionReq.getUseGlobalImageFormat()));
+ if (pointActionReq.getUseGlobalImageFormat() != null) {
+ kmlActionActuatorFuncParam.setUseGlobalPayloadLensIndex(String.valueOf(pointActionReq.getUseGlobalImageFormat()));
+ }else {
+ kmlActionActuatorFuncParam.setUseGlobalPayloadLensIndex("0");
+ }
if (ObjectUtil.equals(pointActionReq.getUseGlobalImageFormat(), 0)) {
kmlActionActuatorFuncParam.setPayloadLensIndex(pointActionReq.getImageFormat());
} else {
--
Gitblit v1.9.3