From 321a114af75d62f66bd5d46f01a44c955cbde286 Mon Sep 17 00:00:00 2001
From: ZhuDongming <zdm773644075@hotmail.com>
Date: Mon, 02 Sep 2019 23:43:47 +0800
Subject: [PATCH] 更新污染传播接口

---
 src/main/webapp/view/pollutionsource.jsp                             |  187 +++++++++++++++++++------------------
 src/main/java/com/moral/controller/ScreenController.java             |   26 ++---
 src/main/java/com/moral/service/impl/HistoryHourlyServiceImpl.java   |   51 ++++------
 src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java |   10 -
 4 files changed, 132 insertions(+), 142 deletions(-)

diff --git a/src/main/java/com/moral/controller/ScreenController.java b/src/main/java/com/moral/controller/ScreenController.java
index 54cfd04..68612a4 100644
--- a/src/main/java/com/moral/controller/ScreenController.java
+++ b/src/main/java/com/moral/controller/ScreenController.java
@@ -1,16 +1,11 @@
 package com.moral.controller;
 
-import static com.moral.common.util.ResourceUtil.getValue;
-import static com.moral.common.util.WebUtils.getParametersStartingWith;
-
 import java.io.BufferedReader;
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.text.DecimalFormat;
-import java.time.LocalDate;
 import java.time.LocalDateTime;
-import java.time.Month;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -21,9 +16,6 @@
 import java.util.Map;
 import java.util.Optional;
 import java.util.stream.Collectors;
-
-import javax.annotation.Resource;
-import javax.servlet.http.HttpServletRequest;
 
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.net.ftp.FTPClient;
@@ -98,11 +90,15 @@
 import com.moral.service.WeatherService;
 import com.moral.util.AQICalculation;
 import com.moral.util.TempAllocationUtils;
-
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+
+import static com.moral.common.util.ResourceUtil.getValue;
+import static com.moral.common.util.WebUtils.getParametersStartingWith;
 
 /**
  * The Class ScreenController.������������
@@ -1225,7 +1221,7 @@
     @GetMapping("/pollutionSource")
     @ApiOperation(value = "������������������", notes = "������������������")
     @ApiImplicitParams(value = {
-            @ApiImplicitParam(name = "mac", value = "������mac������(������898607b0101730392254)", required = true, paramType = "query", dataType = "String"),
+            @ApiImplicitParam(name = "mac", value = "������mac������(������898607b0101730392251)", required = true, paramType = "query", dataType = "String"),
             @ApiImplicitParam(name = "sensorKey", value = "������������������������key(���������e1)", required = true, paramType = "query", dataType = "String"),
             @ApiImplicitParam(name = "time", value = "������������(���������2019-09-01-10)", required = true, paramType = "query", dataType = "String")})
     public ModelAndView pollutionSource(ModelAndView model, HttpServletRequest request) throws Exception {
@@ -1238,17 +1234,17 @@
         LocalDateTime timeLocalDateTime = LocalDateTime.parse(time, dateTimeFormatter);
         System.out.println(timeLocalDateTime);
         int month = timeLocalDateTime.getMonth().getValue();
-        Point dirPoint= historyHourlyService.getDirPoint(parameters);
-        Map<String,Object> getPollutionSourceData=historyHourlyService.getPollutionSourceData(parameters);
+        Point dirPoint = historyHourlyService.getDirPoint(parameters);
+        Map<String, Object> getPollutionSourceData = historyHourlyService.getPollutionSourceData(parameters);
         System.out.println(dirPoint.toString());
-        System.out.println("getPollutionSourceData:"+getPollutionSourceData);
+        System.out.println("getPollutionSourceData:" + getPollutionSourceData);
         String mac = parameters.get("mac").toString();
         Device device = deviceService.getDeviceByMac(mac, false);
         JSONObject params = new JSONObject();
         params.put("device", device);
         params.put("month", month);
-        params.put("dirPoint",dirPoint);
-        params.put("getPollutionSourceData",getPollutionSourceData);
+        params.put("dirPoint", dirPoint);
+        params.put("getPollutionSourceData", getPollutionSourceData);
         String paramsJson = params.toJSONString();
         model.addObject("pollutionSourceParams", paramsJson);
         model.setViewName("pollutionsource");
diff --git a/src/main/java/com/moral/service/impl/HistoryHourlyServiceImpl.java b/src/main/java/com/moral/service/impl/HistoryHourlyServiceImpl.java
index 6ba5929..d1235c5 100644
--- a/src/main/java/com/moral/service/impl/HistoryHourlyServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/HistoryHourlyServiceImpl.java
@@ -5,8 +5,6 @@
 import java.util.List;
 import java.util.Map;
 
-import javax.annotation.Resource;
-
 import org.apache.commons.collections.MapUtils;
 import org.springframework.stereotype.Service;
 
@@ -17,6 +15,7 @@
 import com.moral.mapper.SensorMapper;
 import com.moral.service.DeviceService;
 import com.moral.service.HistoryHourlyService;
+import javax.annotation.Resource;
 
 @Service
 public class HistoryHourlyServiceImpl implements HistoryHourlyService {
@@ -37,31 +36,23 @@
             sensorKeys.add(sensor.getSensorKey());
         }
         parameters.put("sensorKeys", sensorKeys);
-       /* if(pollutionSourceData.get("e6")!=null&&pollutionSourceData.get("e18")!=null){
-            pollutionSourceData=historyHourlyMapper.getPollutionSourceData(parameters);
-        }
-        return pollutionSourceData;*/
-        System.out.println("----"+historyHourlyMapper.getPollutionSourceData(parameters));
-       return historyHourlyMapper.getPollutionSourceData(parameters);
+        return historyHourlyMapper.getPollutionSourceData(parameters);
     }
 
     @Override
-    public Point getDirPoint(Map<String, Object> parameters) throws Exception{
-        Map<String,Object> pollutionSourceData=getPollutionSourceData(parameters);
+    public Point getDirPoint(Map<String, Object> parameters) throws Exception {
+        Map<String, Object> pollutionSourceData = getPollutionSourceData(parameters);
         String mac = parameters.get("mac").toString();
         Device device = deviceService.getDeviceByMac(mac, false);
-        Point pointEnd=new Point();
-        if(MapUtils.isNotEmpty(pollutionSourceData)){
-            System.out.println("pollutionSourceData"+pollutionSourceData);
-            if(pollutionSourceData.get("e18")!=null&&pollutionSourceData.get("e23")!=null&&pollutionSourceData.get("e6")!=null){
-                double windSpeed=Double.valueOf(pollutionSourceData.get("e18").toString());
-                double winDir=Double.valueOf(pollutionSourceData.get("e23").toString());
-                double distance=windSpeed*3600;
-                double long1=device.getLongitude();
-                double lat1=device.getLatitude();
-                System.out.println("windSpeed:"+windSpeed+"---winDir:"+winDir+"---distance:"+distance+"--long1:"+long1+"--lat1:"+lat1);
-                String[] result=calLocationByDistanceAndLocationAndDirection(winDir,long1,lat1,distance);
-                System.out.println("result1���"+Double.valueOf(result[0])+"result2���"+Double.valueOf(result[1]));
+        Point pointEnd = new Point();
+        if (MapUtils.isNotEmpty(pollutionSourceData)) {
+            if (pollutionSourceData.get("e18") != null && pollutionSourceData.get("e23") != null && pollutionSourceData.get("e6") != null) {
+                double windSpeed = Double.valueOf(pollutionSourceData.get("e18").toString());
+                double winDir = Double.valueOf(pollutionSourceData.get("e23").toString());
+                double distance = windSpeed * 3600;
+                double long1 = device.getLongitude();
+                double lat1 = device.getLatitude();
+                String[] result = calLocationByDistanceAndLocationAndDirection(winDir, long1, lat1, distance);
                 pointEnd.setLng(Double.valueOf(result[0]));
                 pointEnd.setLat(Double.valueOf(result[1]));
             }
@@ -70,29 +61,29 @@
     }
 
 
-
     /**
      * ���������������������������������������������������������������������������
-     * @param angle ���������������������������������������������
+     *
+     * @param angle     ���������������������������������������������
      * @param startLong ���������������
-     * @param startLat ���������������
-     * @param distance ���������������m
+     * @param startLat  ���������������
+     * @param distance  ���������������m
      * @return
      */
-    private String[] calLocationByDistanceAndLocationAndDirection(double angle, double startLong,double startLat, double distance){
+    private String[] calLocationByDistanceAndLocationAndDirection(double angle, double startLong, double startLat, double distance) {
         /** ������������ **/
         final double R = 6371e3;
         /** 180�� **/
         final DecimalFormat df = new DecimalFormat("0.000000");
         String[] result = new String[2];
         //���������������������������������������
-        double �� = distance/R;
+        double �� = distance / R;
         // ���������radian���������������������������
         angle = Math.toRadians(angle);
         startLong = Math.toRadians(startLong);
         startLat = Math.toRadians(startLat);
-        double lat = Math.asin(Math.sin(startLat)*Math.cos(��)+Math.cos(startLat)*Math.sin(��)*Math.cos(angle));
-        double lng = startLong + Math.atan2(Math.sin(angle)*Math.sin(��)*Math.cos(startLat),Math.cos(��)-Math.sin(startLat)*Math.sin(lat));
+        double lat = Math.asin(Math.sin(startLat) * Math.cos(��) + Math.cos(startLat) * Math.sin(��) * Math.cos(angle));
+        double lng = startLong + Math.atan2(Math.sin(angle) * Math.sin(��) * Math.cos(startLat), Math.cos(��) - Math.sin(startLat) * Math.sin(lat));
         // ���������������10���������������
         lng = Math.toDegrees(lng);
         lat = Math.toDegrees(lat);
diff --git a/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java b/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java
index ba6fc1a..20f9137 100644
--- a/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java
@@ -1,11 +1,7 @@
 package com.moral.service.impl;
 
-import static com.moral.common.bean.Constants.NULL_VALUE;
-import static org.springframework.util.ObjectUtils.isEmpty;
-
 import java.math.BigDecimal;
 import java.text.ParseException;
-import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
@@ -31,8 +27,6 @@
 import java.util.concurrent.Executors;
 import java.util.stream.Collectors;
 
-import javax.annotation.Resource;
-
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.time.DateUtils;
 import org.springframework.stereotype.Service;
@@ -55,6 +49,10 @@
 import com.moral.mapper.HistoryMinutelyMapper;
 import com.moral.mapper.SensorMapper;
 import com.moral.service.HistoryMinutelyService;
+import javax.annotation.Resource;
+
+import static com.moral.common.bean.Constants.NULL_VALUE;
+import static org.springframework.util.ObjectUtils.isEmpty;
 
 @Service
 @SuppressWarnings({"unchecked", "unused", "rawtypes"})
diff --git a/src/main/webapp/view/pollutionsource.jsp b/src/main/webapp/view/pollutionsource.jsp
index c47f7ba..645061f 100644
--- a/src/main/webapp/view/pollutionsource.jsp
+++ b/src/main/webapp/view/pollutionsource.jsp
@@ -120,10 +120,9 @@
     var params = $.parseJSON($("#pollutionSourceParams").html());
     var month = params["month"];
     var device = params["device"];
-    var dirPoint=params["dirPoint"];
-    console.log(dirPoint.lng);
-    console.log(dirPoint.lat);
-    var getPollutionSourceData=params["getPollutionSourceData"];
+    var dirPoint = new BMap.Point(params["dirPoint"].lng, params["dirPoint"].lat);
+    var getPollutionSourceData = params["getPollutionSourceData"];
+    var windSpeed = parseFloat(getPollutionSourceData["e18"]);
     var map = new BMap.Map("mapCanvas", {enableMapClick: false});
     map.setMapStyle(mapStyle);
     map.enableScrollWheelZoom(true); // ������������������������
@@ -133,74 +132,86 @@
     });
     map.addControl(navigation);
     map.addControl(new BMap.ScaleControl());
-    if ($.isEmptyObject(dirPoint)||$.isEmptyObject(getPollutionSourceData)||getPollutionSourceData["e18"]==0) {
+    if ($.isEmptyObject(dirPoint) || $.isEmptyObject(getPollutionSourceData) || getPollutionSourceData["e6"] == 0 || getPollutionSourceData["e18"] == 0 || getPollutionSourceData["e23"] == 0 || windSpeed <= 0.03) {
         showNoData();
-    }else{
-        var humidity=getPollutionSourceData["e6"];
-        var windSpeed=getPollutionSourceData["e18"];
+    } else {
+        var humidity = parseFloat(getPollutionSourceData["e6"]);
+        var windDir = parseFloat(getPollutionSourceData["e23"]);
         var longitude = params["device"]["longitude"];
         var latitude = params["device"]["latitude"];
         var point = new BMap.Point(longitude, latitude);
         var icon = new BMap.Icon("/img/ico00.png", new BMap.Size(50, 50));
         var marker = new BMap.Marker(point, {icon: icon, offset: new BMap.Size(0, -20)});
         map.addOverlay(marker);
-        map.centerAndZoom(point, 17);
-        var polyline1 = new BMap.Polyline([
-                dirPoint,
-                new BMap.Point(point.lng+0.01, point.lat+0.01)
-            ],
-            {strokeColor: "#5298FF", strokeWeight: 4, strokeOpacity: 1}
-        );
-        var polyline2 = new BMap.Polyline([
-                dirPoint,
-                new BMap.Point( point.lng-0.02,  point.lat-0.01)
-            ],
-            {strokeColor: "#5298FF", strokeWeight: 4, strokeOpacity: 1}
-        );
-        var distance=windSpeed*3600;
-        console.log(distance);
-        var arrowLength;//���������������������
-        if (distance <= 5) {
-            arrowLength = 0;
-        } else if (distance > 5 && distance <= 20) {
-            arrowLength = 2;
-        } else if (distance > 20 && distance <= 50) {
-            arrowLength = 3;
-        } else if (distance > 50 && distance <= 100) {
-            arrowLength = 5;
-        } else if (distance > 100 && distance <= 200) {
-            arrowLength = 10;
-        } else if (distance > 200 && distance <= 500) {
-            arrowLength = 20;
-        } else if (distance > 500 && distance <= 1000) {
-            arrowLength = 40;
-        } else if (distance > 1000 && distance <= 2000) {
-            arrowLength = 80;
-        } else if (distance > 2000 && distance <= 3000) {
-            arrowLength = 120;
-        } else if (distance > 3000 && distance <= 10000) {
-            arrowLength = 500;
-        } else if (distance > 10000 && distance <= 20000) {
-            arrowLength = 1000;
-        } else if (distance > 20000 && distance <= 50000) {
-            arrowLength = 2500;
-        } else if (distance > 50000 && distance <= 100000) {
-            arrowLength = 5000;
-        } else if (distance > 100000 && distance <= 200000) {
-            arrowLength = 10000;
-        } else if (distance > 200000 && distance <= 500000) {
-            arrowLength = 25000;
-        } else if (distance > 500000 && distance <= 1000000) {
-            arrowLength = 50000;
-        } else if (distance > 1000000 && distance <= 2000000) {
-            arrowLength = 100000;
-        } else {
-            arrowLength = 150000;
+        map.centerAndZoom(point, 16);
+
+        //centre:���������������,X:������������,Y:������������
+        function add_oval(centre, x, y) {
+            var assemble = new Array();
+            var angle;
+            var dot;
+            var tangent = x / y;
+            for (i = 0; i < 36; i++) {
+                angle = (2 * Math.PI / 36) * i;
+                dot = new BMap.Point(centre.lng + Math.sin(angle) * y * tangent, centre.lat + Math.cos(angle) * y);
+                assemble.push(dot);
+            }
+            return assemble;
         }
-        map.addOverlay(polyline1);// ���������������
-        addArrow(polyline1, arrowLength, Math.PI / 7,windSpeed);
-        map.addOverlay(polyline2);// ���������������
-        addArrow(polyline2, arrowLength, Math.PI / 7,windSpeed);
+
+        //��������������������������������������������� ���������point������������������������radius������������sDegree���eDegree���������
+        function Sector(point, radius, sDegree, eDegree) {
+            var points = []; //���������������������������������
+            var step = ((eDegree - sDegree) / 10) || 10; //������������������������������������������������������������10
+            points.push(point);
+            for (var i = sDegree; i < eDegree + 0.001; i += step) { //������������������������������������������������������������
+                points.push(EOffsetBearing(point, radius, i));
+            }
+            points.push(point);
+            return points;
+        }
+
+        //������������������������������������������������������������������
+        function EOffsetBearing(point, dist, bearing) {
+            var lngConv = map.getDistance(point, new BMap.Point(point.lng + 0.1, point.lat)) * 10; //������������������������������
+            var latConv = map.getDistance(point, new BMap.Point(point.lng, point.lat + 0.1)) * 10; //������������������������������
+            var lat = dist * Math.sin(bearing * Math.PI / 180) / latConv; //������������������������������������������������������
+            var lng = dist * Math.cos(bearing * Math.PI / 180) / lngConv; //������������������������������������������������������
+            return new BMap.Point(point.lng + lng, point.lat + lat);
+        }
+
+        var distance = windSpeed * 3600;
+        var winDirStart = 240 - windDir;
+        var winDirEnd = 300 - windDir;
+        var oval = new BMap.Polygon(Sector(dirPoint, distance, winDirStart, winDirEnd), {
+            strokeColor: "grey",
+            strokeWeight: 1,
+            strokeOpacity: 0.8,
+            fillColor: "grey"
+        });
+        map.addOverlay(oval);
+        var oval = new BMap.Polygon(Sector(dirPoint, distance * 0.66, winDirStart, winDirEnd), {
+            strokeColor: "grey",
+            strokeWeight: 1,
+            strokeOpacity: 0.6,
+            fillColor: "grey"
+        });
+        map.addOverlay(oval);
+        var oval = new BMap.Polygon(Sector(dirPoint, distance * 0.33, winDirStart, winDirEnd), {
+            strokeColor: "grey",
+            strokeWeight: 1,
+            strokeOpacity: 0.4,
+            fillColor: "grey"
+        });
+        map.addOverlay(oval);
+
+        var polyline = new BMap.Polyline([
+                dirPoint,
+                point
+            ],
+            {strokeColor: "#5298FF", strokeWeight: 4, strokeOpacity: 1}
+        );
+        addArrow(polyline, 0, Math.PI / 7, windSpeed, humidity);
         var winfowTextCause = "<p style='height: 44px;line-height: 22px'>���������������������������������������������������������������������������������������������������������������������</p>";
         var winfowTextSource;
         var supplement;
@@ -208,40 +219,40 @@
             if (windSpeed >= 3.4) {
                 supplement = "���������������������������������������������������������������������������";
             }
-            if (humidity>=90.0) {
+            if (humidity >= 90.0) {
                 supplement = "������������������������������������������������������������������������";
-            }else{
-                supplement ="";
+            } else {
+                supplement = "";
             }
             winfowTextSource = "<p style='height: 22px;line-height: 22px'>���������������������������������������������������������������������������������" + supplement + "</p>";
         } else if (month == 3 || month == 4 || month == 5) {
             if (windSpeed >= 3.4) {
                 supplement = "���������������������������������������������������������������������������";
             }
-            if (humidity>=90.0) {
+            if (humidity >= 90.0) {
                 supplement = "������������������������������������������������������������������������";
-            }else{
-                supplement ="";
+            } else {
+                supplement = "";
             }
             winfowTextSource = "<p style='height: 22px;line-height: 22px'>���������������������������������������������������������������" + supplement + "</p>";
         } else if (month == 6 || month == 7) {
             if (windSpeed >= 3.4) {
                 supplement = "������������������������������������";
             }
-            if (humidity>=90.0) {
+            if (humidity >= 90.0) {
                 supplement = "���������������������������������������������������������������������������";
-            }else{
-                supplement ="";
+            } else {
+                supplement = "";
             }
             winfowTextSource = "<p style='height: 22px;line-height: 22px'>���������������������������������������,���������������������" + supplement + "</p>";
         } else if (month == 8 || month == 9 || month == 10 || month == 11) {
             if (windSpeed >= 3.4) {
                 supplement = "������������������������������������������";
             }
-            if (humidity>=90.0) {
+            if (humidity >= 90.0) {
                 supplement = "������������������������������������������������������������������������";
-            }else{
-                supplement ="";
+            } else {
+                supplement = "";
             }
             winfowTextSource = "<p style='height: 22px;line-height: 22px'>������������������������������������������������������������������������������������������������������" + supplement + "</p>";
         }
@@ -263,9 +274,7 @@
         });
     }
 
-
-
-    function addArrow(polyline, length, angleValue,windSpeed) {
+    function addArrow(polyline, length, angleValue, windSpeed, humidity) {
         var linePoint = polyline.getPath();// ���������������
         var arrowCount = linePoint.length;
         for (var i = 1; i < arrowCount; i++) { // ������������������������
@@ -276,7 +285,7 @@
             var delta = 0; // ���������������������������������
             var param = 0; // ������������������
             var pixelTemX, pixelTemY, poMiddleX, poMiddleY;// ���������������
-            var pixelX, pixelY, pixelX1, pixelY1;// ���������������
+            var pixelX, pixelY;// ���������������
             poMiddleX = (pixelEnd.x + pixelStart.x) / 2;
             poMiddleY = (pixelEnd.y + pixelStart.y) / 2;
             if (poMiddleX - pixelStart.x == 0) { // ������������������
@@ -288,8 +297,7 @@
                 }
                 // ���������������������������������������������������������������������������������������
                 pixelX = pixelTemX - r * Math.tan(angle);
-                pixelX1 = pixelTemX + r * Math.tan(angle);
-                pixelY = pixelY1 = pixelTemY;
+                pixelY = pixelTemY;
             } else { // ���������������
                 delta = (poMiddleY - pixelStart.y) / (poMiddleX - pixelStart.x);
                 param = Math.sqrt(delta * delta + 1);
@@ -303,24 +311,20 @@
                 // ���������������������������������������������������������������������������������������
                 pixelX = pixelTemX + Math.tan(angle) * r * delta / param;
                 pixelY = pixelTemY - Math.tan(angle) * r / param;
-                pixelX1 = pixelTemX - Math.tan(angle) * r * delta / param;
-                pixelY1 = pixelTemY + Math.tan(angle) * r / param;
             }
-            var pointArrow = map.pixelToPoint(new BMap.Pixel(pixelX, pixelY));
-            var pointArrow1 = map.pixelToPoint(new BMap.Pixel(pixelX1, pixelY1));
             var pointMiddle = map.pixelToPoint(new BMap.Pixel(poMiddleX, poMiddleY));
-            lab = new BMap.Label("���������"+windSpeed+"m/s", {position: pointMiddle, offset: new BMap.Size(0, -30)});
+            lab = new BMap.Label("<P>������:" + windSpeed + "m/s</p><P>������:" + humidity + "��</p>", {
+                position: pointMiddle,
+                offset: new BMap.Size(-50, -20)
+            });
             lab.setStyle({
-                color: "red",
+                color: "#FFFFFF",
                 fontSize: "16px",
                 backgroundColor: "1",
                 border: "0",
                 fontWeight: "bold"
             });
             map.addOverlay(lab);
-            var Arrow = new BMap.Polyline([pointArrow, pointMiddle, pointArrow1],
-                {strokeColor: "#5298FF", strokeWeight: 4, strokeOpacity: 1});
-            map.addOverlay(Arrow);
         }
     };
 
@@ -333,4 +337,5 @@
             document.getElementById("cpm").style.display = 'block';
         }, 250);
     };
+
 </script>

--
Gitblit v1.8.0