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()); }