From 06a1c6004cef3290089a4b629006088a1a5e87a0 Mon Sep 17 00:00:00 2001 From: liusuyi <1951119284@qq.com> Date: 星期六, 22 六月 2024 11:59:07 +0800 Subject: [PATCH] 增加:坐标引导俯仰角度修正 --- ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java | 53 +++++++++++++++-- ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java | 71 +++++++++++++---------- ard-work/src/main/java/com/ruoyi/device/camera/service/ICameraSdkService.java | 7 +- ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java | 29 ++++++--- 4 files changed, 106 insertions(+), 54 deletions(-) diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/service/ICameraSdkService.java b/ard-work/src/main/java/com/ruoyi/device/camera/service/ICameraSdkService.java index 18f0cde..c4aad00 100644 --- a/ard-work/src/main/java/com/ruoyi/device/camera/service/ICameraSdkService.java +++ b/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); } diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java index 41ce896..eb62b1c 100644 --- a/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java +++ b/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绫宠寖鍥村唴鐨勫湴褰㈠弬鏁伴泦鍚堬紝璁$畻骞冲潎鍊煎姞涓奣鍊硷級 + * @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); } diff --git a/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java b/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java index e703e1c..3b57ed3 100644 --- a/ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java +++ b/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 @@ -407,9 +411,9 @@ float t = (float) dh_ptz_location_info.nPTZTilt / 10 * -1; String nPTZTilt = df.format(t < 0 ? t + 360 : t); String nPTZZoom = df.format((float) dh_ptz_location_info.nPTZZoom); - ptzMap.put("p", nPTZPan); - ptzMap.put("t", nPTZTilt); - ptzMap.put("z", nPTZZoom); + ptzMap.put("p" , nPTZPan); + ptzMap.put("t" , nPTZTilt); + ptzMap.put("z" , nPTZZoom); return AjaxResult.success(ptzMap); } @@ -587,7 +591,7 @@ // return false; //} log.debug("鏈湴褰曞儚寮�濮�"); - return AjaxResult.success("鏈湴褰曞儚寮�濮�", lRealHandle); + return AjaxResult.success("鏈湴褰曞儚寮�濮�" , lRealHandle); } catch (Exception ex) { log.error("鏈湴褰曞儚寮�濮嬪紓甯�" + ex.getMessage()); return AjaxResult.error("鏈湴褰曞儚寮�濮嬪紓甯�" + ex.getMessage()); @@ -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) { @@ -1103,10 +1110,10 @@ int nHeight = cfg_encode_info.stuMainStream[0].stuVideoFormat.nHeight; String resolution = nWidth + "*" + nHeight; float nFrameRate = cfg_encode_info.stuMainStream[0].stuVideoFormat.nFrameRate; - map.put("resolution", resolution);//鍒嗚鲸鐜� - map.put("videoBitrate", String.valueOf(nBitRate));//姣旂壒鐜� - map.put("videoEncType", videoEncType);//缂栫爜 - map.put("nFrameRate", String.valueOf(nFrameRate));//甯х巼 + map.put("resolution" , resolution);//鍒嗚鲸鐜� + map.put("videoBitrate" , String.valueOf(nBitRate));//姣旂壒鐜� + map.put("videoEncType" , videoEncType);//缂栫爜 + map.put("nFrameRate" , String.valueOf(nFrameRate));//甯х巼 } } catch (Exception ex) { log.error("鍙栫爜娴佸帇缂╁弬鏁板紓甯�:" + ex.getMessage()); @@ -1133,8 +1140,8 @@ float nAngelH = (float) dh_out_ptz_view_range_status.nAngelH / 10; float nAngelV = (float) dh_out_ptz_view_range_status.nAngelV / 10; Map<String, Object> map = getPtz(cmd);//鑾峰彇ptz - map.put("fHorFieldAngle", nAngelH);// 姘村钩瑙嗗満瑙� - map.put("fVerFieldAngle", nAngelV);// 鍨傜洿瑙嗗満瑙� + map.put("fHorFieldAngle" , nAngelH);// 姘村钩瑙嗗満瑙� + map.put("fVerFieldAngle" , nAngelV);// 鍨傜洿瑙嗗満瑙� return AjaxResult.success(map); } catch (Exception ex) { log.error("鑾峰彇浜戝彴鍙鍩熷紓甯�" + ex.getMessage()); diff --git a/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java b/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java index ef02d00..ae93c60 100644 --- a/ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java +++ b/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;//寮傚父鍥炶皟 @@ -89,7 +94,7 @@ String WIN_PATH = System.getProperty("user.dir") + File.separator + "ardLog" + File.separator + "logs" + File.separator; hCNetSDK.NET_DVR_SetLogToFile(3, WIN_PATH, true); } else { - hCNetSDK.NET_DVR_SetLogToFile(3, "/home/ardLog/hiklog", true); + hCNetSDK.NET_DVR_SetLogToFile(3, "/home/ardLog/hiklog" , true); } String m_sDeviceIP = camera.getIp(); String m_sUsername = camera.getUsername(); @@ -168,7 +173,7 @@ createGuideQueue(camera); return AjaxResult.success("璁惧鐧诲綍鎴愬姛"); } catch (Exception ex) { - log.error("璁惧鐧诲綍寮傚父", ex); + log.error("璁惧鐧诲綍寮傚父" , ex); return AjaxResult.error("璁惧鐧诲綍寮傚父" + ex.getMessage()); } } @@ -195,7 +200,7 @@ String WIN_PATH = System.getProperty("user.dir") + File.separator + "ardLog" + File.separator + "logs" + File.separator; hCNetSDK.NET_DVR_SetLogToFile(3, WIN_PATH, true); } else { - hCNetSDK.NET_DVR_SetLogToFile(3, "/home/ardLog/hiklog", true); + hCNetSDK.NET_DVR_SetLogToFile(3, "/home/ardLog/hiklog" , true); } String m_sDeviceIP = camera.getIp(); String m_sUsername = camera.getUsername(); @@ -274,7 +279,7 @@ createGuideQueue(camera); return AjaxResult.success("璁惧鐧诲綍鎴愬姛"); } catch (Exception ex) { - log.error("娉ㄥ唽璁惧寮傚父", ex); + log.error("娉ㄥ唽璁惧寮傚父" , ex); return AjaxResult.error("娉ㄥ唽璁惧寮傚父" + ex.getMessage()); } } @@ -868,10 +873,10 @@ nFrameRate = "鏈煡"; break; } - map.put("resolution", resolution);//鍒嗚鲸鐜� - map.put("videoBitrate", videoBitrate);//姣旂壒鐜� - map.put("videoEncType", videoEncType);//缂栫爜 - map.put("nFrameRate", nFrameRate);//甯х巼 + map.put("resolution" , resolution);//鍒嗚鲸鐜� + map.put("videoBitrate" , videoBitrate);//姣旂壒鐜� + map.put("videoEncType" , videoEncType);//缂栫爜 + map.put("nFrameRate" , nFrameRate);//甯х巼 } else { int code = hCNetSDK.NET_DVR_GetLastError(); @@ -924,9 +929,9 @@ double z = d.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); //log.debug("T鍨傜洿鍙傛暟涓�: " + p + "P姘村钩鍙傛暟涓�: " + t + "Z鍙樺�嶅弬鏁颁负: " + z); Map<String, Object> ptzMap = new HashMap<>(); - ptzMap.put("p", p); - ptzMap.put("t", t); - ptzMap.put("z", z); + ptzMap.put("p" , p); + ptzMap.put("t" , t); + ptzMap.put("z" , z); return AjaxResult.success(ptzMap); } @@ -973,9 +978,9 @@ float fTilt = lpPTZAbsoluteEX_cfg.struPTZCtrl.fTilt; float t = fTilt < 0 ? fTilt + 360 : fTilt; float z = lpPTZAbsoluteEX_cfg.struPTZCtrl.fZoom; - ptzMap.put("p", p); - ptzMap.put("t", t); - ptzMap.put("z", z); + ptzMap.put("p" , p); + ptzMap.put("t" , t); + ptzMap.put("z" , z); return AjaxResult.success(ptzMap); } catch (Exception ex) { log.error("鑾峰彇楂樼簿搴TZ缁濆浣嶇疆寮傚父:" + ex.getMessage()); @@ -1080,7 +1085,7 @@ return AjaxResult.success("璁剧疆楂樼簿搴TZ鍙傛暟鎴愬姛"); } catch (Exception ex) { - log.error("璁剧疆楂樼簿搴TZ鍙傛暟寮傚父", ex); + log.error("璁剧疆楂樼簿搴TZ鍙傛暟寮傚父" , ex); return AjaxResult.error("璁剧疆楂樼簿搴TZ鍙傛暟寮傚父:" + ex); } } @@ -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)); @@ -1224,12 +1232,12 @@ String wZoomPosMax = df.format((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wZoomPosMax)) / 10); String wZoomPosMin = df.format((float) Integer.parseInt(Integer.toHexString(m_ptzPosCurrent.wZoomPosMin)) / 10); Map<String, Object> ptzScopeMap = new HashMap<>(); - ptzScopeMap.put("pMax", wPanPosMax); - ptzScopeMap.put("pMin", wPanPosMin); - ptzScopeMap.put("tMax", wTiltPosMax); - ptzScopeMap.put("tMin", wTiltPosMin); - ptzScopeMap.put("zMax", wZoomPosMax); - ptzScopeMap.put("zMin", wZoomPosMin); + ptzScopeMap.put("pMax" , wPanPosMax); + ptzScopeMap.put("pMin" , wPanPosMin); + ptzScopeMap.put("tMax" , wTiltPosMax); + ptzScopeMap.put("tMin" , wTiltPosMin); + ptzScopeMap.put("zMax" , wZoomPosMax); + ptzScopeMap.put("zMin" , wZoomPosMin); return AjaxResult.success(ptzScopeMap); } } @@ -1325,7 +1333,7 @@ boolean bool = hCNetSDK.NET_DVR_SetDVRConfig(userId, NET_DVR_SET_CCDPARAMCFG, chanNo, point, struDayNigh.size()); if (!bool) { int code = hCNetSDK.NET_DVR_GetLastError(); - log.error("鍒囨崲绾㈠澶辫触 ErrorCode:{},ErrorInfo:{}", code, SdkErrorCodeEnum.getDescByCode(code)); + log.error("鍒囨崲绾㈠澶辫触 ErrorCode:{},ErrorInfo:{}" , code, SdkErrorCodeEnum.getDescByCode(code)); return AjaxResult.warn("鍒囨崲绾㈠澶辫触:" + SdkErrorCodeEnum.getDescByCode(code) + "(" + code + ")"); } log.debug("鍒囨崲绾㈠鎴愬姛"); @@ -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()); } @@ -1926,11 +1933,11 @@ } struGisInfo.read(); Map<String, Object> map = new HashMap<>(); - map.put("p", struGisInfo.struPtzPos.fPanPos); - map.put("t", struGisInfo.struPtzPos.fTiltPos < 0 ? struGisInfo.struPtzPos.fTiltPos + 360 : struGisInfo.struPtzPos.fTiltPos); - map.put("z", struGisInfo.struPtzPos.fZoomPos); - map.put("fHorFieldAngle", struGisInfo.fHorizontalValue);// 姘村钩瑙嗗満瑙� - map.put("fVerFieldAngle", struGisInfo.fVerticalValue);// 鍨傜洿瑙嗗満瑙� + map.put("p" , struGisInfo.struPtzPos.fPanPos); + map.put("t" , struGisInfo.struPtzPos.fTiltPos < 0 ? struGisInfo.struPtzPos.fTiltPos + 360 : struGisInfo.struPtzPos.fTiltPos); + map.put("z" , struGisInfo.struPtzPos.fZoomPos); + map.put("fHorFieldAngle" , struGisInfo.fHorizontalValue);// 姘村钩瑙嗗満瑙� + map.put("fVerFieldAngle" , struGisInfo.fVerticalValue);// 鍨傜洿瑙嗗満瑙� return AjaxResult.success(map); } @@ -1990,7 +1997,7 @@ return AjaxResult.warn("鏈湴褰曞儚鍙栨祦澶辫触:" + SdkErrorCodeEnum.getDescByCode(code) + "(" + code + ")"); } log.debug("鏈湴褰曞儚寮�濮�"); - return AjaxResult.success("褰曞儚寮�濮�", lRealHandle); + return AjaxResult.success("褰曞儚寮�濮�" , lRealHandle); } catch (Exception ex) { log.error("鏈湴褰曞儚寮�濮嬪紓甯�" + ex.getMessage()); return AjaxResult.error("鏈湴褰曞儚寮�濮嬪紓甯�" + ex.getMessage()); -- Gitblit v1.9.3