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/InitializationUtils.java   |    1 +
 ard-route/src/main/java/com/ard/route/util/RouteFileUtils.java        |   25 +++++++++++++++++++++----
 ard-route/src/main/java/com/ard/route/domain/djuav/kml/KmlParams.java |   10 ++++++++++
 ard-route/src/main/java/com/ard/route/domain/djuav/UavRouteReq.java   |    9 +++++++++
 4 files changed, 41 insertions(+), 4 deletions(-)

diff --git a/ard-route/src/main/java/com/ard/route/domain/djuav/UavRouteReq.java b/ard-route/src/main/java/com/ard/route/domain/djuav/UavRouteReq.java
index 9f5a690..5ce5286 100644
--- a/ard-route/src/main/java/com/ard/route/domain/djuav/UavRouteReq.java
+++ b/ard-route/src/main/java/com/ard/route/domain/djuav/UavRouteReq.java
@@ -143,4 +143,13 @@
      */
     private String mappingHeadingMode;
 
+    /**
+     * 航点高程参考平面
+     * EGM96:使用海拔高编辑
+     * relativeToStartPoint:使用相对点的高度进行编辑
+     * aboveGroundLevel:使用地形数据,AGL下编辑(仅支持司空2平台)
+     * realTimeFollowSurface: 使用实时仿地模式(仅用于建图航拍模版),仅支持M3E/M3T/M3M机型
+     */
+    private String heightMode;
+
 }
diff --git a/ard-route/src/main/java/com/ard/route/domain/djuav/kml/KmlParams.java b/ard-route/src/main/java/com/ard/route/domain/djuav/kml/KmlParams.java
index 0bcfa3a..b144d0f 100644
--- a/ard-route/src/main/java/com/ard/route/domain/djuav/kml/KmlParams.java
+++ b/ard-route/src/main/java/com/ard/route/domain/djuav/kml/KmlParams.java
@@ -110,5 +110,15 @@
      * 全局航线速度
      */
     private Double globalTransitionalSpeed;
+
+    /**
+     * 航点高程参考平面
+     * EGM96:使用海拔高编辑
+     * relativeToStartPoint:使用相对点的高度进行编辑
+     * aboveGroundLevel:使用地形数据,AGL下编辑(仅支持司空2平台)
+     * realTimeFollowSurface: 使用实时仿地模式(仅用于建图航拍模版),仅支持M3E/M3T/M3M机型
+     */
+    private String heightMode;
+
 }
 
diff --git a/ard-route/src/main/java/com/ard/route/util/InitializationUtils.java b/ard-route/src/main/java/com/ard/route/util/InitializationUtils.java
index 99845a7..d688837 100644
--- a/ard-route/src/main/java/com/ard/route/util/InitializationUtils.java
+++ b/ard-route/src/main/java/com/ard/route/util/InitializationUtils.java
@@ -56,6 +56,7 @@
         }
         uavRouteReq.setWaypointTurnReq(waypointTurnReq);
         uavRouteReq.setGimbalPitchMode("usePointSetting");
+        uavRouteReq.setHeightMode("EGM96");
         if (M350_RTK.getValue().equals(uavRouteReq.getDroneType())) {
             // 变焦数值加工
             buildZoom(uavRouteReq);
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 ceeb180..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
@@ -143,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()));
@@ -175,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));

--
Gitblit v1.9.3