From 6bc5d130aa5b30aa6ea32f6c53bebe6fb9dc05f7 Mon Sep 17 00:00:00 2001
From: lizijie <lzjiiie@163.com>
Date: Wed, 16 Dec 2020 09:21:32 +0800
Subject: [PATCH] 热力图

---
 src/main/webapp/view/unorganizedMapV2.jsp                |   28 +++++-
 src/main/java/com/moral/controller/ScreenController.java |  180 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 202 insertions(+), 6 deletions(-)

diff --git a/src/main/java/com/moral/controller/ScreenController.java b/src/main/java/com/moral/controller/ScreenController.java
index 34b7118..18d1dfb 100644
--- a/src/main/java/com/moral/controller/ScreenController.java
+++ b/src/main/java/com/moral/controller/ScreenController.java
@@ -180,6 +180,12 @@
     @Resource
     private DeviceAdjustValueTimingService deviceAdjustValueTimingService;
 
+    @Resource
+    private PollutioSourcePointService pollutioSourcePointService;
+
+    @Resource
+    private HistoryFiveMinutelyService historyFiveMinutelyService;
+
     /**
      * Screen login. ������������
      *
@@ -2994,4 +3000,178 @@
         List<Device> devicesList = deviceService.getDevicesByAccountId(id);
         return devicesList;
     }
+
+    @GetMapping("/unorganizedEmissionsFiveMinute")
+    @ApiOperation(value = "������������������������", notes = "������������������������")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "monitorPointId", value = "������Id", required = true, paramType = "query", dataType = "String"),
+            @ApiImplicitParam(name = "sensorKey", value = "������", required = true, paramType = "query", dataType = "String"),
+            @ApiImplicitParam(name = "accountId", value = "������id", required = false, paramType = "query", dataType = "String")})
+    public ModelAndView unorganizedEmissionsBackupsV2(HttpServletRequest request, ModelAndView model) {
+        Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
+        String sensorKey = parameters.get("sensorKey").toString();
+        //������������������������������
+        PollutionSourcePoint pollutionSourcePoint = pollutioSourcePointService.selectByMonitorPointId(539);
+        //���������������������������
+        List<Device> deviceList = deviceService.getDevicesByMonitorPointId(539);
+        //���������������������
+        Map<String,Object> pa = new HashMap<>();
+        //pa.put("sensorKey","e1");
+        pa.put("yearAndMonth","202012");
+        pa.put("time","2020-12-03 10:10:00");
+        List<String> macs = new ArrayList<>();
+        List<String> sensorKeys = new ArrayList<>();
+        for (Device device:deviceList) {
+            macs.add(device.getMac());
+        }
+        sensorKeys.add(sensorKey);
+        sensorKeys.add("e18");
+        sensorKeys.add("e23");
+        pa.put("macs",macs);
+        pa.put("sensorKeys",sensorKeys);
+        List<Map<String, Object>> fiveMinuteDataList = historyFiveMinutelyService.getFiveMinutesSersorDataByMacsAndTime(pa);
+        //������������������������������������������
+        double[] allDeviceData = new double[fiveMinuteDataList.size()];
+        System.out.println(fiveMinuteDataList);
+        int i = 0;
+        //������������
+        List<Map<String,Object>> windList = new ArrayList<>();
+        for (Map map:fiveMinuteDataList) {
+            String[] wind_speed = map.get("e18").toString().split(",");
+            String[] wind_direction = map.get("e23").toString().split(",");
+            Map<String,Object> windMap = new HashMap<>();
+            windMap.put("wind_speed",wind_speed[0].substring(1,wind_speed[0].length()));
+            windMap.put("wind_direction",wind_direction[0].substring(1,wind_direction[0].length()));
+            windList.add(windMap);
+            String[] sensorArr = map.get(sensorKey).toString().split(",");
+            double sensorData = Double.parseDouble(sensorArr[0].substring(1,sensorArr[0].length()));
+            allDeviceData[i] = sensorData;
+            i = i+1;
+        }
+        //���������������������������
+        Map<String,Double> res = WindUtils.getWind_direction_speed(windList);
+        //���������������������������������������������
+        Map<String,Double> angleMap = new HashMap();
+        MyLatLng pollutionSourcePoint_log_lat = new MyLatLng(pollutionSourcePoint.getLongitude(),pollutionSourcePoint.getLatitude());
+        for (Device device:deviceList) {
+            MyLatLng device_log_lat = new MyLatLng(device.getLongitude(),device.getLatitude());
+            //������������������������������������������������������
+            double angle = mapUtils.getAngle(device_log_lat,pollutionSourcePoint_log_lat);
+            angleMap.put(device.getMac(),angle);
+        }
+        Map<String,Double> disparityMap = new HashMap<>();
+        for (String key:angleMap.keySet()) {
+            double angleDisparity = Math.abs(angleMap.get(key)-res.get("wind_direction"));
+            if (angleDisparity>180){
+                angleDisparity = 360-angleDisparity;
+            }
+            disparityMap.put(key,angleDisparity);
+        }
+        Optional<Map.Entry<String, Double>> minDisparity = disparityMap.entrySet()
+                .stream()
+                .min(Map.Entry.comparingByValue());
+        //������������������������disparityMap������������minDisparity���������������key������������������������������������������
+        List<String> minAngleDisparityMacList = new ArrayList<>();
+        for (String key:disparityMap.keySet()) {
+            if (disparityMap.get(key) == minDisparity.get().getValue()){
+                minAngleDisparityMacList.add(minDisparity.get().getKey());
+            }
+        }
+        //������������map������������������
+        Map<String,Object> fiveMinuteDataMap = new HashMap();
+        if (minAngleDisparityMacList.size()<2){//���������������
+            for (Map fiveMinuteData:fiveMinuteDataList) {
+                if (fiveMinuteData.get("mac").toString().equals(minAngleDisparityMacList.get(0))){
+                    fiveMinuteDataMap.putAll(fiveMinuteData);
+                    break;
+                }
+            }
+        }else {
+
+        }
+        Device referenceDevice = new Device();
+        for (Device device:deviceList) {
+            if (device.getMac().equals(fiveMinuteDataMap.get("mac"))){
+                referenceDevice = device;
+            }
+        }
+        //���������������������
+        double sum = 0;
+        for (int j=0;j<allDeviceData.length;j++) {
+            sum = sum+allDeviceData[j];
+        }
+        double deviceDataAvg = sum/allDeviceData.length;
+        //���������������������������������������������
+        double distance = mapUtils.getDistance(pollutionSourcePoint.getLongitude(),pollutionSourcePoint.getLatitude(),referenceDevice.getLongitude(),referenceDevice.getLatitude());
+        //���������������������������x,y
+        double x = Math.cos(minDisparity.get().getValue())*distance;
+        double y = Math.sin(minDisparity.get().getValue())*distance;
+        //���������������������
+        String[] fiveMinuteData = fiveMinuteDataMap.get("e21").toString().split(",");
+        double c = Double.parseDouble(fiveMinuteData[0].substring(1,fiveMinuteData[0].length()))-deviceDataAvg;
+        System.out.println(c);
+        //������������
+        double pollutionSourceIntensity = EmissionDataUtil.getPollutionSourceIntensity(c,x,y,res.get("wind_speed"));
+        System.out.println(pollutionSourceIntensity);
+
+        //���������������������
+        Map<String,Object> center = new HashMap<>();
+        center.put("lng",120.997119);
+        center.put("lat",31.451714);
+
+        //������������������������������������
+        List<Map<String,Double>> numericalValueList = new ArrayList<>();
+        Map<String,Double> numericalValueMap = new HashMap<>();
+        numericalValueMap.put("lng",120.997119);
+        numericalValueMap.put("lat",31.451714);
+        numericalValueMap.put("count",0.027);
+        numericalValueList.add(numericalValueMap);
+        Map<String,Double> numericalValueMap2 = new HashMap<>();
+        numericalValueMap2.put("lng",120.99516);
+        numericalValueMap2.put("lat",31.448664);
+        numericalValueMap2.put("count",0.029);
+        numericalValueList.add(numericalValueMap2);
+        Map<String,Double> numericalValueMap3 = new HashMap<>();
+        numericalValueMap3.put("lng",120.998538);
+        numericalValueMap3.put("lat",31.449289);
+        numericalValueMap3.put("count",0.033);
+        numericalValueList.add(numericalValueMap3);
+        Map<String,Double> numericalValueMap4 = new HashMap<>();
+        numericalValueMap4.put("lng",120.998628);
+        numericalValueMap4.put("lat",31.452027);
+        numericalValueMap4.put("count",0.025);
+        numericalValueList.add(numericalValueMap4);
+        Map<String,Double> numericalValueMap5 = new HashMap<>();
+        numericalValueMap5.put("lng",121.000383);
+        numericalValueMap5.put("lat",31.451469);
+        numericalValueMap5.put("count",0.05);
+        numericalValueList.add(numericalValueMap5);
+        Map<String,Double> numericalValueMap6 = new HashMap<>();
+        numericalValueMap6.put("lng",120.999908);
+        numericalValueMap6.put("lat",31.449389);
+        numericalValueMap6.put("count",0.04);
+        numericalValueList.add(numericalValueMap6);
+        Map<String,Double> numericalValueMap7 = new HashMap<>();
+        numericalValueMap7.put("lng",120.998519);
+        numericalValueMap7.put("lat",31.450588);
+        numericalValueMap7.put("count",0.10);
+        numericalValueList.add(numericalValueMap7);
+        System.out.println(numericalValueList.toString());
+
+
+        JSONObject params = new JSONObject();
+        params.put("accountId",190);
+        params.put("level",17);
+        params.put("center",center);
+        params.put("points",numericalValueList);
+
+
+
+        //������������������
+        //JSONObject params=monitorPointService.getMonitorPointById(monitPointId,Time,3,sensor);
+        // model.addObject("params",params);
+        model.addObject("params", params);
+        model.setViewName("unorganizedMapV2");
+        return model;
+    }
 }
\ No newline at end of file
diff --git a/src/main/webapp/view/unorganizedMapV2.jsp b/src/main/webapp/view/unorganizedMapV2.jsp
index 9aeeec1..319ab1f 100644
--- a/src/main/webapp/view/unorganizedMapV2.jsp
+++ b/src/main/webapp/view/unorganizedMapV2.jsp
@@ -33,16 +33,31 @@
     var map = new BMap.Map("container", {minZoom: 14, maxZoom: 19});
     //var map = new BMap.Map("container");          // ������������������
 
-    var point = new BMap.Point(120.997119,31.451714);
-    map.centerAndZoom(point, 17);    // ������������������������������������������������������
+    var params = $.parseJSON($("#mapParams").html());
+    var accountId = params["accountId"];
+    var level = params["level"];
+    var center = params["center"];
+    var points2 = params["points"];
+
+    var point = new BMap.Point(center['lng'],center['lat']);
+    map.centerAndZoom(point, level);    // ������������������������������������������������������
     //map.setCurrentCity("������");		//������������������������
     map.enableScrollWheelZoom(); // ������������������
 
-    var params = $.parseJSON($("#mapParams").html());
-    var accountId = params["accountId"];
-    alert(accountId);
+    var points = [];
+    for (var i =0;i<points2.length;i++) {
+        var json;
+        var a = points2[i];
+        var b = a[''];
+        json = {
+            lng : a['lng'],
+            lat : a['lat'],
+            count : a['count']
+        };
+        points[i] = json;
+    };
 
-    var points =[
+    /*var points =[
         {"lng":"120.997119","lat":"31.451714","count":"0.027"},
         {"lng":"120.99516","lat":"31.448664","count":"0.029"},
         {"lng":"120.998538","lat":"31.449289","count":"0.033"},
@@ -51,6 +66,7 @@
         {"lng":"120.999908","lat":"31.449389","count":"0.04"},
         {"lng":"120.998519","lat":"31.450588","count":"0.10"},
     ];
+    alert(points[1]);*/
 
     var points1 =[
 

--
Gitblit v1.8.0