jinpengyong
2023-07-25 b4d7f801b594946e3b8f42403883f1e88fba44fe
screen-api/src/main/java/com/moral/api/controller/UAVController.java
@@ -3,6 +3,7 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.moral.api.entity.HistorySecondUav;
@@ -22,7 +23,10 @@
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -30,6 +34,7 @@
import java.awt.geom.Point2D;
import java.text.DecimalFormat;
import java.util.*;
import java.util.stream.Collectors;
/**
 * @ClassName UAVController
@@ -69,25 +74,37 @@
        return new ResultMessage(ResponseCodeEnum.SUCCESS.getCode(), ResponseCodeEnum.SUCCESS.getMsg(),vo);
    }
    @RequestMapping("test")
    public ResultMessage test(){
    @PostMapping("test")
    public ResultMessage test(@RequestBody Map<String, Object> params){
        //判断是否缺少参数
        if (!params.containsKey("mac") || !params.containsKey("batch") || !params.containsKey("height")|| !params.containsKey("uvasize")) {
            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
        }
        String uvasize = params.get("uvasize").toString();
        int size = Integer.parseInt(uvasize);
        //纬度
        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);
//        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);
//        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");
        }
        for (HistorySecondUav historySecondUav : historySecondUavs) {
            String value = historySecondUav.getValue();
            Map map1 = JSON.parseObject(value, Map.class);
@@ -123,7 +140,7 @@
        //左下2
        String[] zuoxia = calLocationByDistanceAndLocationAndDirection(180, minLon, maxLat, 50);
        for (int i = 0; i <distance2 ; i+=50) {
        for (int i = 0; i <distance2 ; i+=size) {
            UAVGteForDTO dto1 = new UAVGteForDTO();
            String[] strings2 = calLocationByDistanceAndLocationAndDirection(90, minLon, maxLat, i);
            String[] strings3 = calLocationByDistanceAndLocationAndDirection(90, Double.parseDouble(youshang[0].toString()), Double.parseDouble(youshang[1].toString()), i);
@@ -134,7 +151,7 @@
            dto1.setRightBottom(strings4);
            dto1.setLeftBottom(strings5);
            list.add(dto1);
            for (int j = 0; j < distance1; j+=50) {
            for (int j = 0; j < distance1; j+=size) {
                UAVGteForDTO dto2 = new UAVGteForDTO();
                String[] strings6 = calLocationByDistanceAndLocationAndDirection(180, Double.parseDouble(strings2[0].toString()), Double.parseDouble(strings2[1].toString()), j);
                String[] strings7 = calLocationByDistanceAndLocationAndDirection(180, Double.parseDouble(strings3[0].toString()), Double.parseDouble(strings3[1].toString()), j);
@@ -188,11 +205,12 @@
                }
            }
//            lists.add(list1);
            //获取中心点坐标
            String result = getResult(doubleArrayList);
            rsMap.put(result,list1);
        }
        //计算区域类所有因子的平均数
        ArrayList<UAVResultDTO> uavResultDTOS = new ArrayList<>();
        Set<String> strings = rsMap.keySet();
        for (String string : strings) {
@@ -214,22 +232,42 @@
            for (String s : list1) {
                JSONObject jsonObject = JSON.parseObject(s);
                //tvoc
                String a99054 = jsonObject.get("a99054").toString();
                Object a99054 = jsonObject.get("a99054");
                if (!Objects.isNull(a99054)){
                    TVOCArrayList.add(Double.parseDouble(a99054.toString()));
                }
                //pm2.5
                String a34004 = jsonObject.get("a34004").toString();
                Object a34004 = jsonObject.get("a34004");
                if (!Objects.isNull(a34004)){
                    PM25ArrayList.add(Double.parseDouble(a34004.toString()));
                }
                //二氧化硫
                String a21026 = jsonObject.get("a21026").toString();
                ///二氧化氮
                String a21004 = jsonObject.get("a21004").toString();
//                //气压
                Object a21026 = jsonObject.get("a21026");
                if (!Objects.isNull(a21026)){
                    SOArrayList.add(Double.parseDouble(a21026.toString()));
                }
                //二氧化氮
                Object a21004 = jsonObject.get("a21004");
                if (!Objects.isNull(a21004)){
                    NOArrayList.add(Double.parseDouble(a21004.toString()));
                }
                //气压
                Object a01006 = jsonObject.get("a01006");
                if (!Objects.isNull(a01006)){
                    QYArrayList.add(Double.parseDouble(a01006.toString()));
                }
                //pm10
                String a34002 = jsonObject.get("a34002").toString();
                Object a34002 = jsonObject.get("a34002");
                if (!Objects.isNull(a34002)){
                    PM10ArrayList.add(Double.parseDouble(a34002.toString()));
                }
                //co
                String a21005 = jsonObject.get("a21005").toString();
                Object a21005 = jsonObject.get("a21005");
                if (!Objects.isNull(a21005)){
                    COArrayList.add(Double.parseDouble(a21005.toString()));
                }
                //湿度
                Object a01002 = jsonObject.get("a01002");
                if (!Objects.isNull(a01002)){
@@ -240,14 +278,11 @@
                if (!Objects.isNull(a01001)){
                    QYArrayList.add(Double.parseDouble(a01001.toString()));
                }
                String a05024 = jsonObject.get("a05024").toString();
                TVOCArrayList.add(Double.parseDouble(a99054));
                PM10ArrayList.add(Double.parseDouble(a34002));
                PM25ArrayList.add(Double.parseDouble(a34004));
                SOArrayList.add(Double.parseDouble(a21026));
                NOArrayList.add(Double.parseDouble(a21004));
                COArrayList.add(Double.parseDouble(a21005));
                O3ArrayList.add(Double.parseDouble(a05024));
                //臭氧
                Object a05024 = jsonObject.get("a05024");
                if (!Objects.isNull(a05024)){
                    O3ArrayList.add(Double.parseDouble(a05024.toString()));
                }
            }
            double WDDouble =0.0;
@@ -291,16 +326,26 @@
                O3Double = O3ArrayList.stream().mapToDouble(Double::doubleValue).average().getAsDouble();
            }
            dto.setCoAvg(CODouble);
            dto.setNO2Avg(NODouble);
            dto.setO3Avg(O3Double);
            dto.setTVOCAvg(TVODouble);
            dto.setPM10Avg(PM10Double);
            dto.setPM25Avg(PM25Double);
            dto.setSO2Avg(SODouble);
            dto.setWDAvg(WDDouble);
            dto.setSHAvg(SHDouble);
            dto.setQYAvg(QYDouble);
//            dto.setCoAvg(CODouble);
//            dto.setNO2Avg(NODouble);
//            dto.setO3Avg(O3Double);
//            dto.setTVOCAvg(TVODouble);
//            dto.setPM10Avg(PM10Double);
//            dto.setPM25Avg(PM25Double);
//            dto.setSO2Avg(SODouble);
//            dto.setWDAvg(WDDouble);
//            dto.setSHAvg(SHDouble);
//            dto.setQYAvg(QYDouble);
            dto.setA21005(CODouble);
            dto.setA21004(NODouble);
            dto.setA05024(O3Double);
            dto.setA99054(TVODouble);
            dto.setA34002(PM10Double);
            dto.setA34004(PM25Double);
            dto.setA21026(SODouble);
            dto.setA01001(WDDouble);
            dto.setA01002(SHDouble);
            dto.setA01006(QYDouble);
            String[] s = string.split("_");
            dto.setFlyLat(Double.parseDouble(s[1]));
            dto.setFlyLon(Double.parseDouble(s[0]));
@@ -411,7 +456,7 @@
        return s;
    }
    //获取中心点
    public static String getResult(ArrayList<String[]> doubleArrayList){
//        UAVResultDTO uavResultDTO = new UAVResultDTO();
            int total = doubleArrayList.size();
@@ -562,29 +607,6 @@
        }
        return IsPtInPoly(point,pointList);
    }
    public final static double x_pi = 3.14159265358979324 * 3000.0 / 180.0;
    /**
     * 高德坐标转百度坐标
     *
     * @param gd_lon 经度
     * @param gd_lat 纬度
     * @return
     */
    public static Map<String, String> gd2bd(String gd_lon, String gd_lat) {
        double longitude = Double.parseDouble(gd_lon);
        double latitude = Double.parseDouble(gd_lat);
        Map<String, String> data = new HashMap<>();
        double x = longitude, y = latitude;
        double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);
        double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);
        double bd_lon = z * Math.cos(theta) + 0.0065;
        double bd_lat = z * Math.sin(theta) + 0.006;
        data.put("lon", String.valueOf(bd_lon));
        data.put("lat", String.valueOf(bd_lat));
        return data;
    }
}