package com.ruoyi.system.domain; import java.math.BigDecimal; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.core.domain.BaseEntity; /** * 航线具体航点明细对象 route_waypoints * * @author ruoyi * @date 2026-01-21 */ public class RouteWaypoints extends BaseEntity { private static final long serialVersionUID = 1L; /** 航点ID */ private Long id; /** 所属航线ID (关联 routes.id) */ @Excel(name = "所属航线ID (关联 routes.id)") private Long routeId; /** 航点名称 (如: WP1) */ @Excel(name = "航点名称 (如: WP1)") private String name; /** 航点顺序 (从1开始递增) */ @Excel(name = "航点顺序 (从1开始递增)") private Long seq; /** 纬度 */ @Excel(name = "纬度") private BigDecimal lat; /** 经度 */ @Excel(name = "经度") private BigDecimal lng; /** 高度 (米) */ @Excel(name = "高度 (米)") private Double alt; /** 速度 (km/h) */ @Excel(name = "速度 (km/h)") private Double speed; /** 起始时间 (如: K+00:40:00) */ @Excel(name = "起始时间 (如: K+00:40:00)") private String startTime; /** 转弯角度 (用于计算转弯半径) */ @Excel(name = "转弯角度 (用于计算转弯半径)") private Double turnAngle; /** 航点类型: normal-普通, hold_circle-圆形盘旋, hold_ellipse-椭圆盘旋 */ @Excel(name = "航点类型") private String pointType; /** 盘旋参数JSON: 圆(radius,clockwise) 椭圆(semiMajor,semiMinor,headingDeg,clockwise) */ @Excel(name = "盘旋参数") private String holdParams; public void setId(Long id) { this.id = id; } public Long getId() { return id; } public void setRouteId(Long routeId) { this.routeId = routeId; } public Long getRouteId() { return routeId; } public void setName(String name) { this.name = name; } public String getName() { return name; } public void setSeq(Long seq) { this.seq = seq; } public Long getSeq() { return seq; } public void setLat(BigDecimal lat) { this.lat = lat; } public BigDecimal getLat() { return lat; } public void setLng(BigDecimal lng) { this.lng = lng; } public BigDecimal getLng() { return lng; } public void setAlt(Double alt) { this.alt = alt; } public Double getAlt() { return alt; } public void setSpeed(Double speed) { this.speed = speed; } public Double getSpeed() { return speed; } public void setStartTime(String startTime) { this.startTime = startTime; } public String getStartTime() { return startTime; } public void setTurnAngle(Double turnAngle) { this.turnAngle = turnAngle; } public Double getTurnAngle() { return turnAngle; } public void setPointType(String pointType) { this.pointType = pointType; } public String getPointType() { return pointType; } public void setHoldParams(String holdParams) { this.holdParams = holdParams; } public String getHoldParams() { return holdParams; } @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) .append("id", getId()) .append("routeId", getRouteId()) .append("name", getName()) .append("seq", getSeq()) .append("lat", getLat()) .append("lng", getLng()) .append("alt", getAlt()) .append("speed", getSpeed()) .append("startTime", getStartTime()) .append("turnAngle", getTurnAngle()) .append("pointType", getPointType()) .append("holdParams", getHoldParams()) .toString(); } /** * 获取转弯半径 (该字段不在数据库中,仅用于逻辑计算) * 公式: R = V^2 / (g * tan(θ)) */ public Double getTurnRadius() { // 安全校验:如果角度为0、速度为null,半径视为0 if (this.turnAngle == null || this.turnAngle == 0 || this.speed == null) { return 0.0; } // 单位换算:速度从 km/h 转为 m/s double v_mps = this.speed / 3.6; // 单位换算:角度从 度(Degree) 转为 弧度(Radians) double radians = Math.toRadians(this.turnAngle); // 重力加速度 g double g = 9.8; // 计算半径 double radius = (v_mps * v_mps) / (g * Math.tan(radians)); return radius; } }