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