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