| | |
| | | package com.ruoyi.alarm.radar.service.impl; |
| | | |
| | | import com.alibaba.fastjson2.JSONObject; |
| | | import com.ruoyi.alarm.radar.domain.ArdAlarmRadar; |
| | | import com.ruoyi.alarm.radar.domain.RadarAlarmData; |
| | | import com.ruoyi.alarm.radar.service.ArdRadarService; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.device.camera.domain.ArdCameras; |
| | |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | |
| | | @Async |
| | | public void followGuide(String msg) { |
| | | try { |
| | | Map<String, Object> msgMap = JSONObject.parseObject(msg, Map.class); |
| | | if (msgMap != null) { |
| | | Double p = Double.parseDouble(msgMap.get("p").toString()); |
| | | Double t = Double.parseDouble(msgMap.get("t").toString()); |
| | | Long distance = Long.parseLong(msgMap.get("distance").toString()); |
| | | String radarId = msgMap.get("radarId").toString(); |
| | | RadarAlarmData radarFollowData = JSONObject.parseObject(msg, RadarAlarmData.class); |
| | | if (radarFollowData != null) { |
| | | ArdAlarmRadar ardFollowRadar = radarFollowData.getArdFollowRadars(); |
| | | if (ardFollowRadar != null) { |
| | | //当每次上报只上报一个追踪信息,认为不太可能雷达扫描一次会跟踪多个目标 |
| | | String radarId = radarFollowData.getRadarId();//雷达id |
| | | //这里追踪的坐标为雷达经过计算上传的经纬度 |
| | | Double longitude = ardFollowRadar.getLongitude(); |
| | | Double latitude = ardFollowRadar.getLatitude(); |
| | | //获取雷达所在塔上的大光电 |
| | | ArdCameras camera = ardEquipRadarMapper.getCameraByRadar(radarId); |
| | | if (StringUtils.isNotNull(camera)) { |
| | | log.debug("获取到雷达塔上的光电:" + camera.getId()); |
| | | //计算目标点坐标 |
| | | GlobalCoordinates cameraCoordinates = new GlobalCoordinates(camera.getLatitude(), camera.getLongitude()); |
| | | GlobalCoordinates targetCoordinates = GisUtil.getGlobalCoordinates(cameraCoordinates, p, distance); |
| | | //获取ptz |
| | | double[] cameraPoint = new double[]{ camera.getLongitude(), camera.getLatitude(),camera.getAltitude()}; |
| | | double[] targetPoint = new double[]{targetCoordinates.getLongitude(), targetCoordinates.getLatitude()}; |
| | | double[] cameraPTZ = GisUtil.getCameraPTZ(cameraPoint, targetPoint, 20, 150); |
| | | //如果雷达塔上有光电 |
| | | log.debug("获取到雷达塔上的大光电:" + camera.getId()); |
| | | //如果雷达塔上有光电,引导光电的1通道到追踪的坐标 |
| | | CameraCmd cmd = new CameraCmd(camera.getId(), 1); |
| | | cmd.setOperator("sys_radar_follow"); |
| | | Map<String, Double> ptzMap = new HashMap<>(); |
| | | ptzMap.put("p", p); |
| | | ptzMap.put("t", t); |
| | | ptzMap.put("z", cameraPTZ[2]); |
| | | cmd.setPtzMap(ptzMap); |
| | | boolean res = iCameraSdkService.setPtz(cmd); |
| | | cmd.setCameraId(camera.getId()); |
| | | cmd.setChanNo(1); |
| | | cmd.setTargetPosition(new double[]{longitude,latitude}); |
| | | boolean res = iCameraSdkService.guideTargetPosition(cmd); |
| | | if (res) { |
| | | log.debug("雷达追踪引导成功"); |
| | | } else { |
| | | log.debug("雷达追踪引导失败"); |
| | | } |
| | | } else { |
| | | log.debug("未获取到雷达塔上的光电"); |
| | | log.debug("未获取到雷达塔上的大光电"); |
| | | } |
| | | } |
| | | } |
| | | } catch (Exception ex) { |
| | | log.error("达追踪引导异常:" + ex.getMessage()); |
| | | log.error("雷达追踪引导异常:" + ex.getMessage()); |
| | | } |
| | | } |
| | | } |