liusuyi
2024-06-22 06a1c6004cef3290089a4b629006088a1a5e87a0
ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java
@@ -18,6 +18,8 @@
import com.ruoyi.device.camera.factory.CameraSDKFactory;
import com.ruoyi.device.noguidezone.domain.ArdCameraNoGuideZone;
import com.ruoyi.device.noguidezone.service.IArdCameraNoGuideZoneService;
import com.ruoyi.device.terrain.domain.ArdTerrainMark;
import com.ruoyi.device.terrain.service.IArdTerrainMarkService;
import com.ruoyi.utils.gis.GisUtil;
import com.ruoyi.utils.gis.Point;
import com.ruoyi.utils.sdk.common.GlobalVariable;
@@ -26,8 +28,10 @@
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -49,6 +53,8 @@
    private IArdAlarmpointsWellService ardAlarmpointsWellService;
    @Resource
    private IArdCameraNoGuideZoneService ardCameraNoGuideZoneService;
    @Resource
    private IArdTerrainMarkService ardTerrainMarkService;
    /**
     * 启动线程方法,用于执行初始化登录相机的逻辑
@@ -505,6 +511,37 @@
        }
    }
    /**
     * @return
     * @Author 刘苏义
     * @Description 修正俯仰值(根据相机ID获取500米范围内的地形参数集合,计算平均值加上T值)
     * @Date 2024/6/22 11:16
     * @Param
     */
    @Override
    public Double correctPitch(CameraCmd cmd) {
        Double pitchAngle = 0.0;
        try {
            double[] targetPositions = cmd.getTargetPosition();
            ArdTerrainMark ardTerrainMark = new ArdTerrainMark();
            ardTerrainMark.setCameraId(cmd.getCameraId());
            List<ArdTerrainMark> ardTerrainMarks = ardTerrainMarkService.selectArdTerrainMarkList(ardTerrainMark);
            //过滤500米范围内的集合
            ardTerrainMarks = ardTerrainMarks.stream().filter(n -> GisUtil.getDistance(targetPositions, new double[]{n.getLongitude(), n.getLatitude(), n.getAltitude()}) <= 500).collect(Collectors.toList());
            //计算T平均值
            OptionalDouble averageT = ardTerrainMarks.stream().mapToDouble(ArdTerrainMark::getT).average();
            // 输出
            if (averageT.isPresent()) {
                pitchAngle = averageT.getAsDouble();
                log.debug("修正俯仰值:" + pitchAngle);
            }
        } catch (Exception ex) {
            log.error("修正俯仰值异常:" + ex.getMessage());
        }
        return pitchAngle;
    }
    //引导指向井
    @Override
    public AjaxResult guideTargetWell(CameraCmd cmd) {
@@ -549,17 +586,17 @@
                    case 1:
                        if (ardWellGuideCamera.getP1() != null) {
                            ptzMap = new HashMap<>();
                            ptzMap.put("p", ardWellGuideCamera.getP1());
                            ptzMap.put("t", ardWellGuideCamera.getT1());
                            ptzMap.put("z", ardWellGuideCamera.getZ1());
                            ptzMap.put("p" , ardWellGuideCamera.getP1());
                            ptzMap.put("t" , ardWellGuideCamera.getT1());
                            ptzMap.put("z" , ardWellGuideCamera.getZ1());
                        }
                        break;
                    case 2:
                        if (ardWellGuideCamera.getP2() != null) {
                            ptzMap = new HashMap<>();
                            ptzMap.put("p", ardWellGuideCamera.getP2());
                            ptzMap.put("t", ardWellGuideCamera.getT2());
                            ptzMap.put("z", ardWellGuideCamera.getZ2());
                            ptzMap.put("p" , ardWellGuideCamera.getP2());
                            ptzMap.put("t" , ardWellGuideCamera.getT2());
                            ptzMap.put("z" , ardWellGuideCamera.getZ2());
                        }
                        break;
@@ -587,9 +624,9 @@
        }
        //按井坐标开始引导
        if (!guideTargetPosition(cmd).get("code").equals(200)) {
            return AjaxResult.warn("井坐标引导失败", "cameraId:" + cameraId);
            return AjaxResult.warn("井坐标引导失败" , "cameraId:" + cameraId);
        }
        return AjaxResult.success("井坐标引导成功", "cameraId:" + cameraId);
        return AjaxResult.success("井坐标引导成功" , "cameraId:" + cameraId);
    }