From 73e1deae4e9d3e56f5e2376106af0c916f3b2fa2 Mon Sep 17 00:00:00 2001 From: gyb Date: Tue, 10 Mar 2026 17:30:33 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E8=88=AA=E7=BA=BF=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=96=B0=E7=9A=84=E8=88=AA=E7=82=B9=E5=8A=A8=E4=BD=9C=E4=BF=9D?= =?UTF-8?q?=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/kml/KmlActionActuatorFuncParam.java | 14 +++ .../airline/domain/uitl/WayPointUitls.java | 97 +++++++++++++++++++ .../airline/service/dto/AirLinePointDTO.java | 20 ++++ 3 files changed, 131 insertions(+) diff --git a/src/main/java/com/ruoyi/airline/domain/model/kml/KmlActionActuatorFuncParam.java b/src/main/java/com/ruoyi/airline/domain/model/kml/KmlActionActuatorFuncParam.java index 91d92ec..4371f74 100644 --- a/src/main/java/com/ruoyi/airline/domain/model/kml/KmlActionActuatorFuncParam.java +++ b/src/main/java/com/ruoyi/airline/domain/model/kml/KmlActionActuatorFuncParam.java @@ -158,4 +158,18 @@ public class KmlActionActuatorFuncParam { @XStreamAlias("wpml:recordPointCloudOperate") private String recordPointCloudOperate; + + // 间隔拍照参数 + + @XStreamAlias("wpml:photoTime") + private String photoTime; + + @XStreamAlias("wpml:photoDistance") + private String photoDistance; + + @XStreamAlias("wpml:photoType") + private String photoType; + + @XStreamAlias("wpml:droneYaw") + private String droneYaw; } diff --git a/src/main/java/com/ruoyi/airline/domain/uitl/WayPointUitls.java b/src/main/java/com/ruoyi/airline/domain/uitl/WayPointUitls.java index e205597..0e9f820 100644 --- a/src/main/java/com/ruoyi/airline/domain/uitl/WayPointUitls.java +++ b/src/main/java/com/ruoyi/airline/domain/uitl/WayPointUitls.java @@ -165,6 +165,29 @@ public class WayPointUitls { case 20: // 返航 (使用的是第一个航点的经纬度和高度) return String.format("%d\t0\t3\t20\t0\t0\t0\t0\t%s\t%s\t%d.000000\t1", index, point.getLat(), point.getLon(), point.getAlt()); + case 4000: // 飞行器偏航角 + return String.format(Locale.US, + "%d\t0\t3\t531\t0\t%s\t0\t0\t0\t0\t0.000000\t1", + index, point.getDroneYaw()); + + case 5000: // 开始等时间隔拍照 + return String.format(Locale.US, + "%d\t0\t3\t205\t%s\t0\t%s\t0\t0\t0\t0.000000\t1", + index, point.getPhotoTime(), point.getPhotoType()); + + case 6000: // 开始等间距隔拍照 + return String.format(Locale.US, + "%d\t0\t3\t205\t%s\t0\t%s\t0\t0\t0\t0.000000\t1", + index, point.getPhotoDistance(), point.getPhotoType()); + + case 7000: // 结束间隔拍照 + return String.format(Locale.US, + "%d\t0\t3\t2501\t0\t0\t0\t0\t0\t0\t0.000000\t1", index); + + case 8000: // 全景拍照 + return String.format(Locale.US, + "%d\t0\t3\t2501\t0\t0\t0\t0\t0\t0\t0.000000\t1", index); + default: throw new IllegalArgumentException("未知命令: " + point.getCommand()); } @@ -274,6 +297,66 @@ public class WayPointUitls { )); break; + case "panoPhoto": + // 全景拍照(命令8000) + linePoints.add(buildPoint( + 8000, + "0", "0", 0, + "0", "0", "0", "0", + 0, 0, 0 + )); + break; + + case "startTimeIntervalPhoto": + // 开始等时间隔拍照(命令5000) + linePoints.add(buildPoint( + 5000, + "0", "0", 0, + "0", "0", "0", "0", + 0, 0, 0, + actionActuatorFuncParam.getPhotoTime(), + null, + actionActuatorFuncParam.getPhotoType(), + null + )); + break; + + case "startDistanceIntervalPhoto": + // 开始等间距隔拍照(命令6000) + linePoints.add(buildPoint( + 6000, + "0", "0", 0, + "0", "0", "0", "0", + 0, 0, 0, + null, + actionActuatorFuncParam.getPhotoDistance(), + actionActuatorFuncParam.getPhotoType(), + null + )); + break; + + case "stopIntervalPhoto": + // 结束间隔拍照(命令7000) + linePoints.add(buildPoint( + 7000, + "0", "0", 0, + "0", "0", "0", "0", + 0, 0, 0 + )); + break; + + case "aircraftYaw": + // 飞行器偏航角(命令4000) + linePoints.add(buildPoint( + 4000, + "0", "0", 0, + "0", "0", "0", "0", + 0, 0, 0, + null, null, null, + actionActuatorFuncParam.getDroneYaw() + )); + break; + default: log.error("未知动作类型: {}", actionType); } @@ -299,5 +382,19 @@ public class WayPointUitls { return point; } + //构建waypoint航点(带间隔拍照参数) + public static AirLinePointDTO buildPoint(int command, String lat, String lon, int alt, + String loiterTime, String cameraPitch, String cameraRoll, String cameraYaw, + int sessionControl, int zoomAbsolute, int rotateDirection, + String photoTime, String photoDistance, String photoType, String droneYaw) { + AirLinePointDTO point = buildPoint(command, lat, lon, alt, loiterTime, cameraPitch, cameraRoll, cameraYaw, + sessionControl, zoomAbsolute, rotateDirection); + point.setPhotoTime(photoTime); + point.setPhotoDistance(photoDistance); + point.setPhotoType(photoType); + point.setDroneYaw(droneYaw); + return point; + } + } diff --git a/src/main/java/com/ruoyi/airline/service/dto/AirLinePointDTO.java b/src/main/java/com/ruoyi/airline/service/dto/AirLinePointDTO.java index e210f2f..eee943e 100644 --- a/src/main/java/com/ruoyi/airline/service/dto/AirLinePointDTO.java +++ b/src/main/java/com/ruoyi/airline/service/dto/AirLinePointDTO.java @@ -75,4 +75,24 @@ public class AirLinePointDTO implements Serializable { * 转动方向 -1逆时针 1相对机场方向 (硬件定义的) */ private Integer rotateDirection; + + /** + * 间隔拍照时间(秒)- 命令5000 + */ + private String photoTime; + + /** + * 间隔拍照距离(米)- 命令6000 + */ + private String photoDistance; + + /** + * 照片类型(数组1,2,3)- 命令5000/6000 + */ + private String photoType; + + /** + * 飞行器偏航角 - 命令4000 + */ + private String droneYaw; }