Xiajijian
2025-12-12 9001e055d272ad7e0a3b60e2891939aeb29dc1ad
1. 禁飞区修改。
3 files modified
100 ■■■■■ changed files
ard-route/src/main/java/com/ard/route/domain/route/ArdRouteInfo.java 9 ●●●●● patch | view | raw | blame | history
ard-route/src/main/java/com/ard/route/service/impl/ArdRouteInfoServiceImpl.java 69 ●●●●● patch | view | raw | blame | history
ard-route/src/main/java/com/ard/route/util/InitializationUtils.java 22 ●●●●● patch | view | raw | blame | history
ard-route/src/main/java/com/ard/route/domain/route/ArdRouteInfo.java
@@ -49,11 +49,16 @@
    @Excel(name = "负载类型")
    private String payload;
    /** 是否只读 是否只读0:否 1:是 */
    /**
     * 是否只读 是否只读
     * 0:否
     * 1:是
     */
    @Excel(name = "是否只读")
    private String readOnly;
    /** 时间排序
    /**
     * 时间排序
     * 0:正序
     * 1:倒序
     */
ard-route/src/main/java/com/ard/route/service/impl/ArdRouteInfoServiceImpl.java
@@ -12,6 +12,7 @@
import com.ard.data.noflyzone.domain.Vertex;
import com.ard.data.noflyzone.service.IArdNoFlyZoneService;
import com.ard.data.noflyzone.utils.NoFlyZoneUtils;
import com.ard.framework.web.service.TokenService;
import com.ard.oss.model.MinioUploadResult;
import com.ard.oss.service.impl.OssServiceContext;
import com.ard.ossdock.service.impl.OssDockServiceContext;
@@ -29,12 +30,15 @@
import com.ard.work.domain.dto.state.PointData;
import com.ard.work.domain.dto.wayline.*;
import com.ard.work.service.ITyService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import static com.ard.route.util.InitializationUtils.divided_6;
import static com.ard.route.util.ToolUtils.*;
import static com.ard.route.util.UavRouteReqUtils.fileConversionEntity;
@@ -46,6 +50,8 @@
 */
@Service
public class ArdRouteInfoServiceImpl implements IArdRouteInfoService {
    private static final Logger log = LoggerFactory.getLogger(TokenService.class);
    @Autowired
    private ArdRouteInfoMapper ardRouteInfoMapper;
@@ -83,6 +89,14 @@
        }
        for (RoutePointReq routePointReq : ardRouteInfo.getUavRouteReq().getRoutePointList()) {
            routePointReq.setHeight(routePointReq.getHeight() + getDoublePoint(ardRouteInfo.getUavRouteReq().getTakeOffRefPoint(),"alt"));
            // 判断无人机类型
            if (ardRouteInfo.getUavRouteReq().getDroneType().equals(89)){
                for (ActionGroupReq actionGroupReq : routePointReq.getActionGroupList()) {
                    for (PointActionReq action : actionGroupReq.getActions()) {
                        action.setZoom(divided_6(action.getZoom()));
                    }
                }
            }
        }
        return ardRouteInfo;
    }
@@ -154,7 +168,6 @@
            }
            ardRouteInfo.setPath(kmzResult.getPath());
        }
        ardRouteInfo.setReadOnly("0");
        return ardRouteInfoMapper.updateArdRouteInfo(dataProcessing(ardRouteInfo));
    }
@@ -238,13 +251,17 @@
                ardRouteInfo.setType(templateTypeData(uavRouteReq));
                ardRouteInfo.setAircraft(droneTypeData(uavRouteReq));
            }
            // 判断禁飞区
//            List<RoutePointReq> routePointList = ardRouteInfo.getUavRouteReq().getRoutePointList();
//            for (RoutePointReq routePointReq : routePointList) {
//                ArdNoflyDto ardNoflyDto = new ArdNoflyDto();
//                ardNoflyDto.setCurrent(new Vertex(routePointReq.getLongitude(), routePointReq.getLatitude()));
//                verifyNoFlyZone(ardNoflyDto);
//            }
            try {
                arrayWithinNoFlyZone(ardRouteInfo.getUavRouteReq().getRoutePointList());
            } catch (ControlException e) {
                // 返回包含禁飞区错误信息的特定结果
                return MinioUploadResult.builder()
                        .originalFilename("禁飞区错误.航线航点在禁飞区!")
                        .build();
            }
            String url = ossService.upload("kmz",file);
            String urlDock = ossDockService.upload("kmz",file);
            ardRouteInfo.setName(file.getOriginalFilename());
@@ -259,7 +276,35 @@
                    .originalFilename(file.getOriginalFilename())
                    .build();
        }catch (Exception e){
            log.error("上传航线文件失败", e);
            return null;
        }
    }
    /**
     * 判断一组数组,是否包含禁飞区
     */
    private void arrayWithinNoFlyZone(List<RoutePointReq> routePointList) {
        if (routePointList == null || routePointList.isEmpty()) {
            return;
        }
        // 检查第一个航点
        ArdNoflyDto firstDto = new ArdNoflyDto();
        firstDto.setTarget(new Vertex(
                routePointList.get(0).getLongitude(),
                routePointList.get(0).getLatitude()));
        verifyNoFlyZone(firstDto);
        // 检查后续航点及与前一个航点的线段
        for (int i = 1; i < routePointList.size(); i++) {
            ArdNoflyDto dto = new ArdNoflyDto();
            dto.setCurrent(new Vertex(
                    routePointList.get(i - 1).getLongitude(),
                    routePointList.get(i - 1).getLatitude()));
            dto.setTarget(new Vertex(
                    routePointList.get(i).getLongitude(),
                    routePointList.get(i).getLatitude()));
            verifyNoFlyZone(dto);
        }
    }
@@ -311,6 +356,16 @@
        } catch (IOException | ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
        // 判断禁飞区
        try {
            arrayWithinNoFlyZone(route.getUavRouteReq().getRoutePointList());
        } catch (ControlException e) {
            log.error("禁飞区错误.航线航点在禁飞区!", e);
            // 返回包含禁飞区错误信息的特定结果
            return false;
        }
        // 1.2通过minio获取航线信息
        // 2.将航线信息转换成对应实体类
        WayLineUploadDTO wayLineUploadDTO = buildWayLineUploadDTO(route);
ard-route/src/main/java/com/ard/route/util/InitializationUtils.java
@@ -17,7 +17,7 @@
public class InitializationUtils {
    // 禅思H20T 公倍数
    private static final Double CHANSI_H20 = 23.76237623;
    private static final Double CHANSI_H20T = 23.76237623;
    // 禅思H20T 焦距值
    private static final Double CHANSI_H20_FOCUS = 6.83;
@@ -101,14 +101,30 @@
            for (ActionGroupReq actionGroupReq : routePointReq.getActionGroupList()) {
                for (PointActionReq action : actionGroupReq.getActions()) {
                    if (action.getZoom() != null){
                        //action.setZoom(action.getZoom() * CHANSI_H20);
                        action.setZoom(action.getZoom() * CHANSI_H20_FOCUS);
                        action.setZoom(multiple_23(action.getZoom()));
                        //action.setZoom(multiple_6(action.getZoom()));
                    }
                }
            }
        }
    }
    public static Double multiple_23(Double zoom){
        return zoom * CHANSI_H20T;
    }
    public static Double multiple_6(Double zoom){
        return zoom * CHANSI_H20_FOCUS;
    }
    public static Double divided_23(Double zoom){
        return zoom / CHANSI_H20T;
    }
    public static Double divided_6(Double zoom){
        return zoom / CHANSI_H20_FOCUS;
    }
    /**
     * 初始化数据
     */