jinpengyong
2023-07-28 a28c013704c3545505f2940b3fd6f86a7bf4a87c
fix:矩形调整
4 files modified
141 ■■■■■ changed files
screen-api/src/main/java/com/moral/api/controller/UAVController.java 121 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/exception/consumer/CruiserDataConsumer.java 12 ●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/exception/consumer/SecondDataConsumer.java 6 ●●●● patch | view | raw | blame | history
screen-api/src/main/resources/mapper/HistorySecondUavMapper.xml 2 ●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/controller/UAVController.java
@@ -86,30 +86,17 @@
        ArrayList<Double> flyLatList = new ArrayList<>();
        //经度
        ArrayList<Double> flyLonList = new ArrayList<>();
//        HashMap<String, Object> map = new HashMap<>();
//        String mac ="p5dnd7a0243592";
//        String time1 ="2023-05-14 10:40:00";
//        String time2 ="2023-05-14 11:10:00";
//        map.put("mac",mac);
//        map.put("time1",time1);
//        map.put("time2",time2);
//        map.put("height",0.5);
//        List<UAVResultDTO> uavResultDTOS = historySecondUavMapper.reList(map);
//        QueryWrapper<HistorySecondUav> queryWrapper = new QueryWrapper<>();
//        queryWrapper.select("value");
//        queryWrapper.eq("mac",mac);
//        queryWrapper.between("time",time1,time2);
//        List<HistorySecondUav> historySecondUavs = historySecondUavMapper.selectList(queryWrapper);
        List<HistorySecondUav> historySecondUavs = historySecondUavMapper.reList(params);
        if (ObjectUtils.isEmpty(historySecondUavs)){
            return new ResultMessage(ResponseCodeEnum.TARGET_IS_NULL,"null");
        }
        int ik=1;
        for (HistorySecondUav historySecondUav : historySecondUavs) {
            String value = historySecondUav.getValue();
            Map map1 = JSON.parseObject(value, Map.class);
            flyLatList.add(Double.parseDouble(map1.get("flylat").toString()));
            flyLonList.add(Double.parseDouble(map1.get("flylon").toString()));
            historySecondUav.setId(ik++);
        }
        Double maxLat = Collections.max(flyLatList);
@@ -166,23 +153,8 @@
                }
            }
        }
        ArrayList<UAVResultDTO> uavResultDTOS1 = new ArrayList<>();
        for (UAVGteForDTO uavGteForDTO : list) {
            ArrayList<String[]> doubleArrayList = new ArrayList<>();
            doubleArrayList.add(uavGteForDTO.getLeftTop());
            doubleArrayList.add(uavGteForDTO.getLeftBottom());
            doubleArrayList.add(uavGteForDTO.getRightTop());
            doubleArrayList.add(uavGteForDTO.getRightBottom());
//            UAVResultDTO result = getResult(doubleArrayList);
//            uavResultDTOS1.add(result);
        }
        if (!ObjectUtils.isEmpty(uavResultDTOS1)){
            return new ResultMessage(ResponseCodeEnum.SUCCESS.getCode(), ResponseCodeEnum.SUCCESS.getMsg(),uavResultDTOS1);
        }
        HashMap<String,List<String>> rsMap = new HashMap<>();
        List<String>  stringList = new ArrayList<>();
        for (UAVGteForDTO uavGteForDTO : list) {
            ArrayList<String> list1 = new ArrayList<>();
            ArrayList<String[]> doubleArrayList = new ArrayList<>();
@@ -190,6 +162,12 @@
            doubleArrayList.add(uavGteForDTO.getLeftBottom());
            doubleArrayList.add(uavGteForDTO.getRightTop());
            doubleArrayList.add(uavGteForDTO.getRightBottom());
            String[] leftTops = uavGteForDTO.getLeftTop();
            String[] rightBottoms = uavGteForDTO.getRightBottom();
            Double x1 = Double.parseDouble(leftTops[0]);
            Double x2 = Double.parseDouble(rightBottoms[0]);
            Double y1 = Double.parseDouble(leftTops[1]);
            Double y2 = Double.parseDouble(rightBottoms[1]);
            //获取区域对象
            for (int i = 0; i < historySecondUavs.size(); i++) {
                HistorySecondUav historySecondUav = historySecondUavs.get(i);
@@ -198,32 +176,20 @@
                String flylat = map1.get("flylat").toString();
                String flylon = map1.get("flylon").toString();
                //判断点是否在区域内
                boolean flag = isInPolygon(flylon,flylat,doubleArrayList);
                boolean flag = isInPolygon(flylon,flylat,x1,x2,y1,y2);
                if (flag){
                    list1.add(historySecondUav.getValue());
                    historySecondUavs.remove(i);
                    String time = DateUtils.dateToDateString(historySecondUav.getTime());
                    //historySecondUavs.remove(i);
                    if(!stringList.contains(time)){
                        list1.add(historySecondUav.getValue());
                        stringList.add(time);
                    }
                }
            }
            //获取中心点坐标
            String result = getResult(doubleArrayList);
            rsMap.put(result,list1);
            }
//            for (HistorySecondUav historySecondUav : historySecondUavs) {
//                String value = historySecondUav.getValue();
//                Map map1 = JSON.parseObject(value, Map.class);
//                String flylat = map1.get("flylat").toString();
//                String flylon = map1.get("flylon").toString();
//                //判断点是否在区域内
//                boolean flag = isInPolygon(flylon,flylat,doubleArrayList);
//                if (flag){
//                    historySecondUavs.remove(historySecondUav);
//                    list1.add(historySecondUav.getValue());
//                }
//            }
//            //获取中心点坐标
//            String result = getResult(doubleArrayList);
//            rsMap.put(result,list1);
//        }
        }
        //计算区域类所有因子的平均数
        ArrayList<UAVResultDTO> uavResultDTOS = new ArrayList<>();
@@ -405,8 +371,12 @@
                    ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
        //处理查询业务
        List<UAVQueryTimeSlotDTO> dtos = historySecondUavService.queryTimeSlot(form);
        if (ObjectUtils.isEmpty(dtos)){
            return new ResultMessage(ResponseCodeEnum.TARGET_IS_NULL,null);
        }
        //封装vo层
        UAVQueryTimeSlotVOs vo = UAVQueryTimeSlotVOs.convert(dtos);
        //返回数据
        return new ResultMessage(ResponseCodeEnum.SUCCESS.getCode(), ResponseCodeEnum.SUCCESS.getMsg(),vo);
    }
@@ -502,6 +472,40 @@
        return rsLon+"_"+rsLat;
//        return uavResultDTO;
    }
    //获取中心点
    public static UAVResultDTO getResults(ArrayList<String[]> doubleArrayList){
        UAVResultDTO uavResultDTO = new UAVResultDTO();
        int total = doubleArrayList.size();
        double X = 0, Y = 0, Z = 0;
        for (int i = 0; i < total; i++) {
            double lat, lon, x, y, z;
            String[] strings = doubleArrayList.get(i);
            lon = Double.parseDouble(strings[0]) * Math.PI / 180;
            lat = Double.parseDouble(strings[1]) * Math.PI / 180;
            x = Math.cos(lat) * Math.cos(lon);
            y = Math.cos(lat) * Math.sin(lon);
            z = Math.sin(lat);
            X += x;
            Y += y;
            Z += z;
        }
        X = X / total;
        Y = Y / total;
        Z = Z / total;
        double Lon = Math.atan2(Y, X);
        double Hyp = Math.sqrt(X * X + Y * Y);
        double Lat = Math.atan2(Z, Hyp);
        double rsLon = Lon * 180 / Math.PI;
        double rsLat = Lat * 180 / Math.PI;
        uavResultDTO.setFlyLon(rsLon);
        uavResultDTO.setFlyLat(rsLat);
//        return rsLon+"_"+rsLat;
        return uavResultDTO;
    }
    /**
@@ -611,9 +615,7 @@
        double p_x =Double.parseDouble(X);
        double p_y =Double.parseDouble(Y);
        Point2D.Double point = new Point2D.Double(p_x, p_y);
        List<Point2D.Double> pointList= new ArrayList<Point2D.Double>();
        for (String[] strings : doubleArrayList) {
            double polygonPoint_x=Double.parseDouble(strings[0]);
            double polygonPoint_y=Double.parseDouble(strings[1]);
@@ -624,4 +626,17 @@
    }
    public boolean isInPolygon(String X,String Y,double x1,double x2,double y1,double y2){
        boolean result = false;
        double x =Double.parseDouble(X);
        double y =Double.parseDouble(Y);
        if(x >= Math.min(x1, x2) && x <= Math.max(x1, x2) ){
            if(y >= Math.min(y1, y2) && y <= Math.max(y1, y2)){
                result = true;
            }
        }
        return result;
    }
}
screen-api/src/main/java/com/moral/api/exception/consumer/CruiserDataConsumer.java
@@ -1,3 +1,4 @@
/*
package com.moral.api.exception.consumer;
import com.moral.api.utils.AdjustDataUtils;
@@ -25,9 +26,11 @@
import com.moral.api.websocket.CruiserWebSocketServer;
import com.moral.constant.KafkaConstants;
*/
/*
 * 走航车数据消费者
 * */
 * *//*
@Component
@Slf4j
public class CruiserDataConsumer implements ConsumerSeekAware {
@@ -64,8 +67,10 @@
                    continue;
                }
                Double sourceDataD = Double.valueOf(String.valueOf(data.get(code)));
                /*BigDecimal bg = new BigDecimal(sourceDataD);
                bg = bg.setScale(2, BigDecimal.ROUND_FLOOR);*/
                */
/*BigDecimal bg = new BigDecimal(sourceDataD);
                bg = bg.setScale(2, BigDecimal.ROUND_FLOOR);*//*
                String sourceData = String.valueOf(sourceDataD);
                //数据补偿
                //单位转换
@@ -112,3 +117,4 @@
    }
}
*/
screen-api/src/main/java/com/moral/api/exception/consumer/SecondDataConsumer.java
@@ -1,3 +1,4 @@
/*
package com.moral.api.exception.consumer;
import com.alibaba.fastjson.JSON;
@@ -22,13 +23,15 @@
import java.util.Map;
import java.util.concurrent.CopyOnWriteArraySet;
*/
/**
 * @ClassName SecondsDataConsumer1
 * @Description TODO
 * @Author 陈凯裕
 * @Date 2021/6/15 14:49
 * @Version TODO
 **/
 **//*
@Component
@Slf4j
public class SecondDataConsumer implements ConsumerSeekAware {
@@ -116,3 +119,4 @@
}
*/
screen-api/src/main/resources/mapper/HistorySecondUavMapper.xml
@@ -12,7 +12,7 @@
        </resultMap>
    <select id="reList" resultType="com.moral.api.entity.HistorySecondUav">
        SELECT `value`
        SELECT history_second_uav.time,`value`
        FROM history_second_uav WHERE mac = #{mac}
        AND batch = #{batch}
        HAVING abs(`value`->>'$.flyhig') <![CDATA[>=]]> #{height}