liusuyi
2024-06-22 06a1c6004cef3290089a4b629006088a1a5e87a0
增加:坐标引导俯仰角度修正
已修改4个文件
68 ■■■■ 文件已修改
ard-work/src/main/java/com/ruoyi/device/camera/service/ICameraSdkService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/camera/service/ICameraSdkService.java
@@ -3,9 +3,6 @@
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.device.camera.domain.ArdCameras;
import com.ruoyi.device.camera.domain.CameraCmd;
import org.springframework.scheduling.annotation.Async;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
public interface ICameraSdkService {
@@ -108,6 +105,10 @@
    //本地录像开始
    AjaxResult localRecordStart(CameraCmd cmd);
    //本地录像停止
    AjaxResult localRecordStop(CameraCmd cmd);
    //修正俯仰值
    Double correctPitch(CameraCmd cmd);
}
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) {
ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java
@@ -16,6 +16,7 @@
import com.ruoyi.device.camera.domain.ArdCameras;
import com.ruoyi.device.camera.domain.CameraCmd;
import com.ruoyi.device.camera.service.IArdCamerasService;
import com.ruoyi.device.camera.service.ICameraSdkService;
import com.ruoyi.device.channel.domain.ArdChannel;
import com.ruoyi.device.channel.service.IArdChannelService;
import com.ruoyi.media.domain.Vtdu;
@@ -74,6 +75,9 @@
    private IArdChannelService ardChannelService;
    @Resource
    private IVtduService vtduService;
    @Resource
    ICameraSdkService cameraSdkService;
    @Value("${minio.endpoint}")
    private String minioEndPoint;
    @Resource
@@ -781,8 +785,11 @@
            double[] cameraPositon = new double[]{cameras.getLongitude(), cameras.getLatitude(), cameras.getAltitude()};
            double[] targetPositions = cmd.getTargetPosition();
            double[] cameraPTZ = GisUtil.getCameraPTZ(cameraPositon, targetPositions, 20, 150);
            //修正俯仰
            double correctPitch = cameraSdkService.correctPitch(cmd);
            double newt = cameraPTZ[1] + correctPitch;
            int p = (int) (cameraPTZ[0] * 10);
            int t = (int) (cameraPTZ[1] * 10);
            int t = (int) (newt * 10);
            int z = (int) (cameraPTZ[2]);
            boolean bool = netsdk.CLIENT_DHPTZControlEx(loginId, chanNo - 1, NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_EXACTGOTO, p, t, z, 0);
            if (!bool) {
ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java
@@ -15,8 +15,11 @@
import com.ruoyi.device.camera.factory.CameraSDK;
import com.ruoyi.device.camera.domain.ArdCameras;
import com.ruoyi.device.camera.domain.CameraCmd;
import com.ruoyi.device.camera.service.ICameraSdkService;
import com.ruoyi.device.channel.domain.ArdChannel;
import com.ruoyi.device.channel.service.IArdChannelService;
import com.ruoyi.device.terrain.domain.ArdTerrainMark;
import com.ruoyi.device.terrain.service.IArdTerrainMarkService;
import com.ruoyi.media.domain.Vtdu;
import com.ruoyi.media.service.IVtduService;
import com.ruoyi.utils.gis.GisUtil;
@@ -43,6 +46,7 @@
import java.text.DecimalFormat;
import java.util.*;
import java.util.concurrent.PriorityBlockingQueue;
import java.util.stream.Collectors;
import static com.ruoyi.utils.sdk.hiksdk.lib.HCNetSDK.*;
import static com.ruoyi.utils.sdk.hiksdk.lib.HCNetSDK.NET_DVR_GET_GISINFO;
@@ -64,7 +68,8 @@
    private IVtduService vtduService;
    @Resource
    private QueueHandler queueHandler;
    @Resource
    ICameraSdkService cameraSdkService;
    public Object _lock = new Object();
    public static HCNetSDK hCNetSDK = HCNetSDK.hCNetSDK;
    private static HCNetSDK.FExceptionCallBack fExceptionCallBack;//异常回调
@@ -1102,7 +1107,10 @@
            double[] targetPositions = cmd.getTargetPosition();
            double[] cameraPTZ = GisUtil.getCameraPTZ(cameraPositon, targetPositions, 20, 150);
            String p = String.valueOf((int) (cameraPTZ[0] * 10));
            String t = String.valueOf((int) (cameraPTZ[1] * 10));
            //修正俯仰
            double correctPitch = cameraSdkService.correctPitch(cmd);
            double newt = cameraPTZ[1] + correctPitch;
            String t = String.valueOf((int) (newt * 10));
            String z = String.valueOf((int) (cameraPTZ[2] * 10));
            m_ptzPosCurrent.wPanPos = (short) (Integer.parseInt(p, 16));
            m_ptzPosCurrent.wTiltPos = (short) (Integer.parseInt(t, 16));
@@ -1860,8 +1868,7 @@
                Pointer pStrPicCfg = strPicCfg.getPointer();
                NativeLong lChannel = new NativeLong(chanNo);
                IntByReference pInt = new IntByReference(0);
                boolean b_GetPicCfg = hCNetSDK.NET_DVR_GetDVRConfig(camera.getLoginId(), HCNetSDK.NET_DVR_GET_PICCFG_V40, lChannel.intValue(),
                        pStrPicCfg, strPicCfg.size(), pInt);
                boolean b_GetPicCfg = hCNetSDK.NET_DVR_GetDVRConfig(camera.getLoginId(), HCNetSDK.NET_DVR_GET_PICCFG_V40, lChannel.intValue(), pStrPicCfg, strPicCfg.size(), pInt);
                if (!b_GetPicCfg) {
                    // log.error("获取图像参数失败,错误码:" + hCNetSDK.NET_DVR_GetLastError());
                }