From e745dd38c5a413eaa000c7c5434621fbcd1800d5 Mon Sep 17 00:00:00 2001
From: 于紫祥_1901 <email@yuzixiang_1910>
Date: Wed, 23 Dec 2020 13:55:07 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
src/main/resources/mapper/HistoryFiveMinutelyMapper.xml | 15
src/main/java/com/moral/controller/DeviceController.java | 4
src/main/java/com/moral/util/WindUtils.java | 58 +
src/main/webapp/view/cartrajectoryNew.jsp | 566 ++++++++++++++++++++
src/main/java/com/moral/service/HistoryFiveMinutelyService.java | 2
src/main/java/com/moral/service/impl/HistoryFiveMinutelyServiceImpl.java | 6
src/main/webapp/view/unorganizedMapV2.jsp | 209 +++++++
src/main/java/com/moral/controller/AlarmController.java | 4
src/main/java/com/moral/mapper/HistoryFiveMinutelyMapper.java | 2
src/main/java/com/moral/service/impl/HistoryServiceImpl.java | 14
src/main/java/com/moral/config/WebSocketConfig.java | 3
src/main/webapp/img/sensorLevel.png | 0
src/main/java/com/moral/controller/ScreenController.java | 615 +++++++++++++++------
src/main/java/com/moral/webSocketServer/BSAQIWebSocketServerTest.java | 173 ++++++
14 files changed, 1,452 insertions(+), 219 deletions(-)
diff --git a/src/main/java/com/moral/config/WebSocketConfig.java b/src/main/java/com/moral/config/WebSocketConfig.java
index 5ea4e3d..5bb5e61 100644
--- a/src/main/java/com/moral/config/WebSocketConfig.java
+++ b/src/main/java/com/moral/config/WebSocketConfig.java
@@ -33,6 +33,7 @@
WebSocketServerNew.deviceService=deviceService;
BSWebsocketServer.deviceService=deviceService;
BSAQIWebSocketServer.deviceService=deviceService;
+ BSAQIWebSocketServerTest.deviceService=deviceService;
}
@Autowired
public void setMessageService(AccountService accountService){
@@ -43,6 +44,8 @@
BSWebsocketServer.sensorService=sensorService;
BSAQIWebSocketServer.sensorService=sensorService;
ElectronicSWebSocketServer.sensorService=sensorService;
+ BSAQIWebSocketServerTest.sensorService=sensorService;
+ ElectronicSWebSocketServer.sensorService=sensorService;
}
@Autowired
public void setSensorUnitService( SensorUnitService sensorUnitService){
diff --git a/src/main/java/com/moral/controller/AlarmController.java b/src/main/java/com/moral/controller/AlarmController.java
index bb5a793..3f9b7d3 100644
--- a/src/main/java/com/moral/controller/AlarmController.java
+++ b/src/main/java/com/moral/controller/AlarmController.java
@@ -35,8 +35,8 @@
AlarmConfigService alarmConfigService;
@Resource
AlarmService alarmService;
- @RequestMapping(value = "/count-by-times", method = RequestMethod.GET)
+/* @RequestMapping(value = "/count-by-times", method = RequestMethod.GET)
public ResultBean<List<Map>> countByTimes(Date start, Date end,@RequestParam(value = "timeUnits")Optional<TimeUnits> timeUnits) throws ParseException {
return new ResultBean<>(alarmService.countByTimes(start,end,timeUnits.isPresent()?timeUnits.get():null));
- }
+ }*/
}
diff --git a/src/main/java/com/moral/controller/DeviceController.java b/src/main/java/com/moral/controller/DeviceController.java
index d02ddd8..9c27858 100644
--- a/src/main/java/com/moral/controller/DeviceController.java
+++ b/src/main/java/com/moral/controller/DeviceController.java
@@ -37,10 +37,10 @@
public ResultBean<Integer> countByExample(PageBean pageBean){
return new ResultBean<Integer>(deviceService.countByExample(pageBean));
}
- @GetMapping("count-by-times")
+/* @GetMapping("count-by-times")
public ResultBean<List<Map>> countByTimes(Date start, Date end){
return new ResultBean<List<Map>>(deviceService.countByTimes(start,end,"%Y-%m"));
- }
+ }*/
@GetMapping("page-list")
public PageBean pageList(PageBean pageBean) {
return deviceService.queryByPageBean(pageBean);
diff --git a/src/main/java/com/moral/controller/ScreenController.java b/src/main/java/com/moral/controller/ScreenController.java
index 34b7118..e34c786 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. ������������
*
@@ -708,7 +714,7 @@
ParameterUtils.getTimeType4Time(parameters);
String time1 = (String) parameters.get("time");
time1 = time1.replaceAll(" ", "");
- parameters.put("time",time1);
+ parameters.put("time", time1);
String mac1 = (String) parameters.get("mac");
List<Map<String, Object>> list = null;
@@ -720,32 +726,39 @@
parameters.put("sensors", Arrays.asList(sensorKey));
// monitorPointService.isCompensateCalculation(parameters);
list = historyMinutelyService.getMonitorPointOrDeviceAvgData(parameters);
-
-
/* 0���������������������11������������0���������������������1-24������������������������0������������������������������������24������������
������������������24���������������23-24���������24������������������������0���������������
*/
/*������������start-------------------------------------------------------------------------*/
- list.remove(0);
- //if (list.size() == 23) {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
- //���������������������yyyy-MM-dd HH:mm:ss
- time1 = time1 + " 00:00:00";
- Date date = sdf.parse(time1);
- date = DateUtil.rollDay(date, 1);
- //������������������������
- String time2 = sdf2.format(date);
- parameters.put("time", time2);
- /*���������������0������������������24���������������������������*/
- List<Map<String, Object>> nextDayList = historyMinutelyService.getMonitorPointOrDeviceAvgData(parameters);
- if(!ObjectUtils.isEmpty(nextDayList)){
- time1=time1.replaceAll(" 00:00:00"," 24");
- Map<String, Object> datas = nextDayList.get(0);
- datas.put("time",time1);
- list.add(datas);
+ Iterator<Map<String, Object>> iterator = list.iterator();
+ while (iterator.hasNext()) {
+ Map<String, Object> next = iterator.next();
+ String hour = next.get("time").toString().substring(11, 13);
+ if ("00".equals(hour)) {
+ iterator.remove();
}
- //}
+ }
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
+ //���������������������yyyy-MM-dd HH:mm:ss
+ time1 = time1 + " 00:00:00";
+ Date date = sdf.parse(time1);
+ date = DateUtil.rollDay(date, 1);
+ //������������������������
+ String time2 = sdf2.format(date);
+ parameters.put("time", time2);
+ /*���������������0������������������24���������������������������*/
+ List<Map<String, Object>> nextDayList = historyMinutelyService.getMonitorPointOrDeviceAvgData(parameters);
+ if (!ObjectUtils.isEmpty(nextDayList)) {
+ time1 = time1.replaceAll(" 00:00:00", " 24");
+ for (Map<String, Object> map : nextDayList) {
+ String time = map.get("time").toString().substring(11, 13);
+ if("00".equals(time)){
+ map.put("time", time1);
+ list.add(map);
+ }
+ }
+ }
/*������������end-------------------------------------------------------------------------*/
@@ -1499,7 +1512,7 @@
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime timeLocalDateTime = LocalDateTime.parse(time, dateTimeFormatter);
int month = timeLocalDateTime.getMonth().getValue();
- parameters.put("yearAndDay",yearAndDay);
+ parameters.put("yearAndDay", yearAndDay);
Point dirPoint = historyHourlyService.getDirPoint(parameters);
Map<String, Object> getPollutionSourceData = historyHourlyService.getPollutionSourceDataByHour(parameters);
if (MapUtils.isEmpty(getPollutionSourceData)) {
@@ -1609,6 +1622,50 @@
//System.out.println(paramsJson);
model.addObject("carTrajectoryParams", paramsJson);
model.setViewName("cartrajectory");
+ return model;
+ } else {
+ StringBuilder msg = new StringBuilder();
+ msg.append(" param[0] mac:");
+ msg.append(mac);
+ log.warn(msg);
+ model.setViewName("403");
+ return model;
+ }
+ }
+
+ @GetMapping("/carTrajectoryNew")
+ @ApiOperation(value = "���������������������", notes = "���������������������")
+ @ApiImplicitParams(value = {
+ @ApiImplicitParam(name = "mac", value = "������mac������������p5dnd7a0392081���", required = true, paramType = "query", dataType = "String"),
+ @ApiImplicitParam(name = "startTime", value = "������������(���������2020-03-19-14)", required = true, paramType = "query", dataType = "String"),
+ @ApiImplicitParam(name = "endTime", value = "������������(���������2020-03-19-17)", required = true, paramType = "query", dataType = "String")
+ })
+ public ModelAndView carTrajectoryNew(ModelAndView model, HttpServletRequest request) throws Exception {
+ Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
+ String st = parameters.get("startTime").toString();
+ String startYearAndDay = st.substring(0, st.lastIndexOf("-"));
+ String startHour = st.substring(st.lastIndexOf("-") + 1);
+ String startTime = startYearAndDay + " " + startHour + ":00:00";
+ String et = parameters.get("endTime").toString();
+ String endYearAndDay = et.substring(0, st.lastIndexOf("-"));
+ String endHour = et.substring(et.lastIndexOf("-") + 1);
+ String endTime = endYearAndDay + " " + endHour + ":00:00";
+ parameters.put("startTime", startTime);
+ parameters.put("endTime", endTime);
+ String mac = parameters.get("mac").toString();
+ if (mac != null && mac.length() != 0) {
+ List<List<Map<String, Object>>> sensorData = historyService.getCarSensorData(parameters);
+ Map<String, String> sensorsMap = sensorService.getSensorsMap(parameters);
+ List<Map<String, Object>> sensorList = new ArrayList<>();
+ if (sensorData.size() == 3) {
+ sensorList = sensorData.get(0);
+ }
+ JSONObject params = new JSONObject();
+ params.put("sensorInfo", sensorList);
+ params.put("sensorsMap", sensorsMap);
+ String paramsJson = params.toJSONString();
+ model.addObject("carTrajectoryParams", paramsJson);
+ model.setViewName("cartrajectoryNew");
return model;
} else {
StringBuilder msg = new StringBuilder();
@@ -2111,9 +2168,9 @@
@ApiImplicitParam(name = "time", value = "������(���������2020-03-19)", required = true, paramType = "query", dataType = "String")})
public ResultBean<List<Map<String, Object>>> getWeatherNextDayDataByRegion(HttpServletRequest request) throws Exception {
Map<String, Object> parameters = getParametersStartingWith(request, null);
- List<String> sensorKeys=new ArrayList<>();
+ List<String> sensorKeys = new ArrayList<>();
sensorKeys.add("e15");
- parameters.put("sensorKeys",sensorKeys);
+ parameters.put("sensorKeys", sensorKeys);
List<Map<String, Object>> resultList = weatherService.getForecastAndReal(parameters);
return new ResultBean<List<Map<String, Object>>>(resultList);
}
@@ -2126,10 +2183,10 @@
@ApiImplicitParam(name = "time", value = "������(���������2020-03-19)", required = true, paramType = "query", dataType = "String")})
public ResultBean<List<Map<String, Object>>> getForecastAndRealPM(HttpServletRequest request) throws Exception {
Map<String, Object> parameters = getParametersStartingWith(request, null);
- List<String> sensorKeys=new ArrayList<>();
+ List<String> sensorKeys = new ArrayList<>();
sensorKeys.add("e1");
sensorKeys.add("e2");
- parameters.put("sensorKeys",sensorKeys);
+ parameters.put("sensorKeys", sensorKeys);
List<Map<String, Object>> resultList = weatherService.getForecastAndReal(parameters);
return new ResultBean<List<Map<String, Object>>>(resultList);
}
@@ -2635,26 +2692,26 @@
}*/
@PostMapping("insertAdjustValue")
- public int insertAdjustValue(@RequestBody HashMap map){
- try{
+ public int insertAdjustValue(@RequestBody HashMap map) {
+ try {
int device_id = Integer.parseInt(map.get("id").toString());
String time = map.get("time").toString();
String[] arr = time.split(":");
- int seconds = Integer.parseInt(arr[0])*3600+Integer.parseInt(arr[1])*60+Integer.parseInt(arr[2]);
+ int seconds = Integer.parseInt(arr[0]) * 3600 + Integer.parseInt(arr[1]) * 60 + Integer.parseInt(arr[2]);
//String t = URLEncoder.encode(������,"UTF-8")
List list = (List) map.get("dataArray");
- String val="";
- for (int i = 0; i <list.size() ; i++) {
- if (i==0){
- val=val+list.get(i);
- }else {
- val=val+","+list.get(i);
+ String val = "";
+ for (int i = 0; i < list.size(); i++) {
+ if (i == 0) {
+ val = val + list.get(i);
+ } else {
+ val = val + "," + list.get(i);
}
}
- String value = "{"+val+"}";
- deviceAdjustValueTimingService.insertData(device_id,seconds,value);
+ String value = "{" + val + "}";
+ deviceAdjustValueTimingService.insertData(device_id, seconds, value);
return 1;
- }catch (Exception e){
+ } catch (Exception e) {
log.warn(e);
}
return 0;
@@ -2662,34 +2719,34 @@
@RequestMapping("/biaozhun")
@ResponseBody
- public List<Device> queryDevice(String macOrName){
+ public List<Device> queryDevice(String macOrName) {
List<Device> deviceList = new ArrayList<>();
- if (!macOrName.equals("")){
- deviceList= deviceService.getDevice(macOrName);
+ if (!macOrName.equals("")) {
+ deviceList = deviceService.getDevice(macOrName);
}
return deviceList;
}
@RequestMapping("/getBiaoZhun")
@ResponseBody
- public List<DeviceAdjustValueTiming> getBiaoZhun(String id){
+ public List<DeviceAdjustValueTiming> getBiaoZhun(String id) {
List<DeviceAdjustValueTiming> dataByDeviceid = deviceAdjustValueTimingService.getDataByDeviceid(Integer.parseInt(id));
for (DeviceAdjustValueTiming deviceAdjustValueTiming : dataByDeviceid) {
int seconds = Integer.parseInt(deviceAdjustValueTiming.getSeconds());
- String hour = String.valueOf(seconds/3600);
- int millAndSeconds = seconds%3600;
- String mill = String.valueOf(millAndSeconds/60);
- String second = String.valueOf(millAndSeconds%60);
- if (hour.length()<2){
- hour="0"+hour;
+ String hour = String.valueOf(seconds / 3600);
+ int millAndSeconds = seconds % 3600;
+ String mill = String.valueOf(millAndSeconds / 60);
+ String second = String.valueOf(millAndSeconds % 60);
+ if (hour.length() < 2) {
+ hour = "0" + hour;
}
- if (mill.length()<2){
- mill="0"+mill;
+ if (mill.length() < 2) {
+ mill = "0" + mill;
}
- if (second.length()<2){
- second="0"+second;
+ if (second.length() < 2) {
+ second = "0" + second;
}
- String time = hour+":"+mill+":"+second;
+ String time = hour + ":" + mill + ":" + second;
Map<String, String> value = deviceAdjustValueTiming.getValue();
Collection<String> values = value.values();
deviceAdjustValueTiming.setSeconds(time);
@@ -2700,15 +2757,15 @@
@RequestMapping("/getSensor")
@ResponseBody
- public List<Map<String, Object>> getSensor(String id){
+ public List<Map<String, Object>> getSensor(String id) {
List<Map<String, Object>> allSensors = sensorService.getSensorByDeviceId(id);
return allSensors;
}
@RequestMapping("/deleteBiaoZhun")
@ResponseBody
- public int deleteBiaoZhun(String id){
- int i= deviceAdjustValueTimingService.delete(id);
+ public int deleteBiaoZhun(String id) {
+ int i = deviceAdjustValueTimingService.delete(id);
return i;
}
@@ -2718,111 +2775,111 @@
@ApiImplicitParams(value = {
@ApiImplicitParam(name = "monitorPointIds", value = "������monitorid", required = true, paramType = "query", dataType = "String"),
@ApiImplicitParam(name = "time", value = "������(���������2020-03-19)", required = true, paramType = "query", dataType = "String")})
- public ResultBean<List<Map<String,Object>>> monitorAVGData(HttpServletRequest request) throws Exception {
+ public ResultBean<List<Map<String, Object>>> monitorAVGData(HttpServletRequest request) throws Exception {
Map<String, Object> parameters = getParametersStartingWith(request, null);
String monitorPointIds = (String) parameters.get("monitorPointIds");
String time = (String) parameters.get("time");
- time = time+" 00:00:00";
+ time = time + " 00:00:00";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd mm:HH:ss");//���������������MM
Date date = simpleDateFormat.parse(time);
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);
- calendar.add(calendar.DATE,+1);
- String date1= simpleDateFormat.format(date);
- String date2= simpleDateFormat.format(calendar.getTime());
+ calendar.add(calendar.DATE, +1);
+ String date1 = simpleDateFormat.format(date);
+ String date2 = simpleDateFormat.format(calendar.getTime());
String[] mIds = monitorPointIds.split(",");
- List<List<Map<String,Object>>> lists = new ArrayList<>();
- if (mIds.length==1 && mIds.length!=0){
+ List<List<Map<String, Object>>> lists = new ArrayList<>();
+ if (mIds.length == 1 && mIds.length != 0) {
String mId = mIds[0];
- List<Map<String,Object>> dataAvbByMIdAndTime = historyHourlyService.getDataAvbByMIdAndTime(mId, date1, date2);
+ List<Map<String, Object>> dataAvbByMIdAndTime = historyHourlyService.getDataAvbByMIdAndTime(mId, date1, date2);
Double maxO3 = Double.parseDouble(dataAvbByMIdAndTime.get(dataAvbByMIdAndTime.size() - 1).get("maxO3").toString());
- Map<String,Object> dailyAvgData =new HashMap<>();
- if (dataAvbByMIdAndTime.get(dataAvbByMIdAndTime.size() - 2).get("data")!=""){
+ Map<String, Object> dailyAvgData = new HashMap<>();
+ if (dataAvbByMIdAndTime.get(dataAvbByMIdAndTime.size() - 2).get("data") != "") {
dailyAvgData = (Map<String, Object>) dataAvbByMIdAndTime.get(dataAvbByMIdAndTime.size() - 2).get("data");
- dailyAvgData.put("maxO3_8h",new BigDecimal(maxO3).setScale(0,BigDecimal.ROUND_HALF_UP).doubleValue());
- }else {
- dailyAvgData= historyHourlyService.getAvgDataByMId(mId, date1, date2);
- if (dailyAvgData!=null){
- dailyAvgData.put("maxO3_8h",new BigDecimal(maxO3).setScale(0,BigDecimal.ROUND_HALF_UP).doubleValue());
- }else {
+ dailyAvgData.put("maxO3_8h", new BigDecimal(maxO3).setScale(0, BigDecimal.ROUND_HALF_UP).doubleValue());
+ } else {
+ dailyAvgData = historyHourlyService.getAvgDataByMId(mId, date1, date2);
+ if (dailyAvgData != null) {
+ dailyAvgData.put("maxO3_8h", new BigDecimal(maxO3).setScale(0, BigDecimal.ROUND_HALF_UP).doubleValue());
+ } else {
dailyAvgData = new HashMap<>();
- dailyAvgData.put("PM2_5","");
- dailyAvgData.put("NO2","");
- dailyAvgData.put("SO2","");
- dailyAvgData.put("PM10","");
- dailyAvgData.put("O3_day","");
- dailyAvgData.put("CO","");
+ dailyAvgData.put("PM2_5", "");
+ dailyAvgData.put("NO2", "");
+ dailyAvgData.put("SO2", "");
+ dailyAvgData.put("PM10", "");
+ dailyAvgData.put("O3_day", "");
+ dailyAvgData.put("CO", "");
}
}
dataAvbByMIdAndTime.remove(dataAvbByMIdAndTime.size() - 1);
dataAvbByMIdAndTime.remove(dataAvbByMIdAndTime.size() - 1);
- Map<String,Object> dayMap = new HashMap<>();
- dayMap.put("data",dailyAvgData);
- dayMap.put("time",date1.substring(0,11));
+ Map<String, Object> dayMap = new HashMap<>();
+ dayMap.put("data", dailyAvgData);
+ dayMap.put("time", date1.substring(0, 11));
dataAvbByMIdAndTime.add(dayMap);
- for (int i = 0; i <dataAvbByMIdAndTime.size() ; i++) {
- if (i!=dataAvbByMIdAndTime.size()-1){
+ for (int i = 0; i < dataAvbByMIdAndTime.size(); i++) {
+ if (i != dataAvbByMIdAndTime.size() - 1) {
Map<String, Object> map1 = AQICalculation2.hourlyAQI((Map<String, Object>) dataAvbByMIdAndTime.get(i).get("data"));
- if (Double.parseDouble(map1.get("AQI").toString())>50.0){
- ((Map<String, Object>) dataAvbByMIdAndTime.get(i).get("data")).put("primary_pollutants",map1.get("maxSensor"));
- ((Map<String, Object>) dataAvbByMIdAndTime.get(i).get("data")).put("AQI",map1.get("AQI"));
- }else {
- ((Map<String, Object>) dataAvbByMIdAndTime.get(i).get("data")).put("primary_pollutants","-");
- ((Map<String, Object>) dataAvbByMIdAndTime.get(i).get("data")).put("AQI",map1.get("AQI"));
+ if (Double.parseDouble(map1.get("AQI").toString()) > 50.0) {
+ ((Map<String, Object>) dataAvbByMIdAndTime.get(i).get("data")).put("primary_pollutants", map1.get("maxSensor"));
+ ((Map<String, Object>) dataAvbByMIdAndTime.get(i).get("data")).put("AQI", map1.get("AQI"));
+ } else {
+ ((Map<String, Object>) dataAvbByMIdAndTime.get(i).get("data")).put("primary_pollutants", "-");
+ ((Map<String, Object>) dataAvbByMIdAndTime.get(i).get("data")).put("AQI", map1.get("AQI"));
}
- }else {
+ } else {
Map<String, Object> map1 = AQICalculation2.dayAQI((Map<String, Object>) dataAvbByMIdAndTime.get(i).get("data"));
- if (map1.get("AQI").toString().equals("")){
+ if (map1.get("AQI").toString().equals("")) {
break;
}
- if (Double.parseDouble(map1.get("AQI").toString())>50.0){
- ((Map<String, Object>) dataAvbByMIdAndTime.get(i).get("data")).put("primary_pollutants",map1.get("maxSensor"));
- ((Map<String, Object>) dataAvbByMIdAndTime.get(i).get("data")).put("AQI",map1.get("AQI"));
- }else {
- ((Map<String, Object>) dataAvbByMIdAndTime.get(i).get("data")).put("primary_pollutants","-");
- ((Map<String, Object>) dataAvbByMIdAndTime.get(i).get("data")).put("AQI",map1.get("AQI"));
- }
+ if (Double.parseDouble(map1.get("AQI").toString()) > 50.0) {
+ ((Map<String, Object>) dataAvbByMIdAndTime.get(i).get("data")).put("primary_pollutants", map1.get("maxSensor"));
+ ((Map<String, Object>) dataAvbByMIdAndTime.get(i).get("data")).put("AQI", map1.get("AQI"));
+ } else {
+ ((Map<String, Object>) dataAvbByMIdAndTime.get(i).get("data")).put("primary_pollutants", "-");
+ ((Map<String, Object>) dataAvbByMIdAndTime.get(i).get("data")).put("AQI", map1.get("AQI"));
+ }
}
}
List timeList = new ArrayList();
for (int q = 0; q < dataAvbByMIdAndTime.size(); q++) {
timeList.add(dataAvbByMIdAndTime.get(q).get("time"));
}
- if (dataAvbByMIdAndTime.size()<25){
+ if (dataAvbByMIdAndTime.size() < 25) {
for (int j = 1; j < 25; j++) {
- Map<String,Object> map = null;
+ Map<String, Object> map = null;
for (int q = 0; q < dataAvbByMIdAndTime.size(); q++) {
- if (dataAvbByMIdAndTime.get(q).get("time").toString().length() > 2){
+ if (dataAvbByMIdAndTime.get(q).get("time").toString().length() > 2) {
continue;
- }else {
+ } else {
// System.out.println(Integer.parseInt(dataAvbByMIdAndTime.get(q).get("time").toString())+"==="+j);
- String sj="";
- if (j<10){
- sj="0"+j;
- }else {
- if (j==24){
- sj="00";
- }else {
- sj=""+j;
+ String sj = "";
+ if (j < 10) {
+ sj = "0" + j;
+ } else {
+ if (j == 24) {
+ sj = "00";
+ } else {
+ sj = "" + j;
}
}
- if (!timeList.contains(sj)){
+ if (!timeList.contains(sj)) {
map = new HashMap<>();
- map.put("time",sj);
+ map.put("time", sj);
Map map1 = new HashMap();
- map1.put("PM2_5","");
- map1.put("NO2","");
- map1.put("primary_pollutants","-");
- map1.put("SO2","");
- map1.put("O3","");
- map1.put("PM10","");
- map1.put("O3_8h","");
- map1.put("CO","");
- map1.put("AQI","");
- map.put("data",map1);
+ map1.put("PM2_5", "");
+ map1.put("NO2", "");
+ map1.put("primary_pollutants", "-");
+ map1.put("SO2", "");
+ map1.put("O3", "");
+ map1.put("PM10", "");
+ map1.put("O3_8h", "");
+ map1.put("CO", "");
+ map1.put("AQI", "");
+ map.put("data", map1);
dataAvbByMIdAndTime.add(map);
break;
- }else {
+ } else {
break;
}
}
@@ -2832,93 +2889,93 @@
/* for (int i1 = 0; i1 < dataAvbByMIdAndTime.size(); i1++) {
System.out.println(dataAvbByMIdAndTime.get(i1));
}*/
- Collections.sort(dataAvbByMIdAndTime, new Comparator<Map<String, Object>>(){
+ Collections.sort(dataAvbByMIdAndTime, new Comparator<Map<String, Object>>() {
public int compare(Map<String, Object> o1, Map<String, Object> o2) {
- String name1 =(String)o1.get("time");//name1���������list������������������������
- String name2= (String)o2.get("time"); //name1���������list���������������������������name
+ String name1 = (String) o1.get("time");//name1���������list������������������������
+ String name2 = (String) o2.get("time"); //name1���������list���������������������������name
return name1.compareTo(name2);
}
});
Map map1 = dataAvbByMIdAndTime.get(0);
dataAvbByMIdAndTime.remove(0);
dataAvbByMIdAndTime.add(map1);
- for (int j = 0; j <dataAvbByMIdAndTime.size() ; j++) {
- if (dataAvbByMIdAndTime.get(j).get("time").toString().length()>2){
+ for (int j = 0; j < dataAvbByMIdAndTime.size(); j++) {
+ if (dataAvbByMIdAndTime.get(j).get("time").toString().length() > 2) {
Map map2 = dataAvbByMIdAndTime.get(j);
dataAvbByMIdAndTime.remove(j);
dataAvbByMIdAndTime.add(map2);
}
}
- if (dataAvbByMIdAndTime.size()==1){
- dataAvbByMIdAndTime=null;
+ if (dataAvbByMIdAndTime.size() == 1) {
+ dataAvbByMIdAndTime = null;
}
lists.add(dataAvbByMIdAndTime);
//List<Device> devicesByMonitorPointId = deviceService.getDevicesByMonitorPointId(Integer.valueOf(mId));
- }else {
- for (int i = 0; i <mIds.length ; i++) {
- List<Map<String,Object>> dataAvbByMIdAndTime = historyHourlyService.getDataAvbByMIdAndTime(mIds[i], date1, date2);
+ } else {
+ for (int i = 0; i < mIds.length; i++) {
+ List<Map<String, Object>> dataAvbByMIdAndTime = historyHourlyService.getDataAvbByMIdAndTime(mIds[i], date1, date2);
Double maxO3 = Double.parseDouble(dataAvbByMIdAndTime.get(dataAvbByMIdAndTime.size() - 1).get("maxO3").toString());
- Map<String,Object> dailyAvgData =new HashMap<>();
- if (dataAvbByMIdAndTime.get(dataAvbByMIdAndTime.size() - 2).get("data")!=""){
+ Map<String, Object> dailyAvgData = new HashMap<>();
+ if (dataAvbByMIdAndTime.get(dataAvbByMIdAndTime.size() - 2).get("data") != "") {
dailyAvgData = (Map<String, Object>) dataAvbByMIdAndTime.get(dataAvbByMIdAndTime.size() - 2).get("data");
- dailyAvgData.put("maxO3_8h",new BigDecimal(maxO3).setScale(0,BigDecimal.ROUND_HALF_UP).doubleValue());
- }else {
- dailyAvgData= historyHourlyService.getAvgDataByMId(mIds[i], date1, date2);
- if (dailyAvgData!=null){
- dailyAvgData.put("maxO3_8h",new BigDecimal(maxO3).setScale(0,BigDecimal.ROUND_HALF_UP).doubleValue());
- }else {
+ dailyAvgData.put("maxO3_8h", new BigDecimal(maxO3).setScale(0, BigDecimal.ROUND_HALF_UP).doubleValue());
+ } else {
+ dailyAvgData = historyHourlyService.getAvgDataByMId(mIds[i], date1, date2);
+ if (dailyAvgData != null) {
+ dailyAvgData.put("maxO3_8h", new BigDecimal(maxO3).setScale(0, BigDecimal.ROUND_HALF_UP).doubleValue());
+ } else {
dailyAvgData = new HashMap<>();
- dailyAvgData.put("PM2_5","");
- dailyAvgData.put("NO2","");
- dailyAvgData.put("SO2","");
- dailyAvgData.put("PM10","");
- dailyAvgData.put("O3_day","");
- dailyAvgData.put("CO","");
+ dailyAvgData.put("PM2_5", "");
+ dailyAvgData.put("NO2", "");
+ dailyAvgData.put("SO2", "");
+ dailyAvgData.put("PM10", "");
+ dailyAvgData.put("O3_day", "");
+ dailyAvgData.put("CO", "");
}
}
dataAvbByMIdAndTime.remove(dataAvbByMIdAndTime.size() - 1);
dataAvbByMIdAndTime.remove(dataAvbByMIdAndTime.size() - 1);
- Map<String,Object> dayMap = new HashMap<>();
- dayMap.put("data",dailyAvgData);
- dayMap.put("time",date1.substring(0,11));
+ Map<String, Object> dayMap = new HashMap<>();
+ dayMap.put("data", dailyAvgData);
+ dayMap.put("time", date1.substring(0, 11));
dataAvbByMIdAndTime.add(dayMap);
List timeList = new ArrayList();
for (int q = 0; q < dataAvbByMIdAndTime.size(); q++) {
timeList.add(dataAvbByMIdAndTime.get(q).get("time"));
}
- if (dataAvbByMIdAndTime.size()<25){
+ if (dataAvbByMIdAndTime.size() < 25) {
for (int j = 1; j < 25; j++) {
- Map<String,Object> map = null;
+ Map<String, Object> map = null;
for (int q = 0; q < dataAvbByMIdAndTime.size(); q++) {
- if (dataAvbByMIdAndTime.get(q).get("time").toString().length() > 2){
+ if (dataAvbByMIdAndTime.get(q).get("time").toString().length() > 2) {
continue;
- }else {
- // System.out.println(Integer.parseInt(dataAvbByMIdAndTime.get(q).get("time").toString())+"==="+j);
- String sj="";
- if (j<10){
- sj="0"+j;
- }else {
- if (j==24){
- sj="00";
- }else {
- sj=""+j;
+ } else {
+ // System.out.println(Integer.parseInt(dataAvbByMIdAndTime.get(q).get("time").toString())+"==="+j);
+ String sj = "";
+ if (j < 10) {
+ sj = "0" + j;
+ } else {
+ if (j == 24) {
+ sj = "00";
+ } else {
+ sj = "" + j;
}
}
- if (!timeList.contains(sj)){
+ if (!timeList.contains(sj)) {
map = new HashMap<>();
- map.put("time",sj);
+ map.put("time", sj);
Map map1 = new HashMap();
- map1.put("PM2_5","");
- map1.put("NO2","");
- map1.put("SO2","");
- map1.put("O3","");
- map1.put("PM10","");
- map1.put("O3_8h","");
- map1.put("CO","");
- map.put("data",map1);
+ map1.put("PM2_5", "");
+ map1.put("NO2", "");
+ map1.put("SO2", "");
+ map1.put("O3", "");
+ map1.put("PM10", "");
+ map1.put("O3_8h", "");
+ map1.put("CO", "");
+ map.put("data", map1);
dataAvbByMIdAndTime.add(map);
break;
- }else {
+ } else {
break;
}
}
@@ -2926,18 +2983,18 @@
}
}
- Collections.sort(dataAvbByMIdAndTime, new Comparator<Map<String, Object>>(){
+ Collections.sort(dataAvbByMIdAndTime, new Comparator<Map<String, Object>>() {
public int compare(Map<String, Object> o1, Map<String, Object> o2) {
- String name1 =(String)o1.get("time");//name1���������list������������������������
- String name2= (String)o2.get("time"); //name1���������list���������������������������name
+ String name1 = (String) o1.get("time");//name1���������list������������������������
+ String name2 = (String) o2.get("time"); //name1���������list���������������������������name
return name1.compareTo(name2);
}
});
Map map1 = dataAvbByMIdAndTime.get(0);
dataAvbByMIdAndTime.remove(0);
dataAvbByMIdAndTime.add(map1);
- for (int j = 0; j <dataAvbByMIdAndTime.size() ; j++) {
- if (dataAvbByMIdAndTime.get(j).get("time").toString().length()>2){
+ for (int j = 0; j < dataAvbByMIdAndTime.size(); j++) {
+ if (dataAvbByMIdAndTime.get(j).get("time").toString().length() > 2) {
Map map2 = dataAvbByMIdAndTime.get(j);
dataAvbByMIdAndTime.remove(j);
dataAvbByMIdAndTime.add(map2);
@@ -2948,20 +3005,20 @@
List<Map<String, Object>> dataByMonitorPoints = historyHourlyService.getDataByMonitorPoints(mIds, date1, date2);
lists.add(dataByMonitorPoints);
}
- List<Map<String, Object>> rList =new ArrayList<>();
- if (lists.size()==1 && lists.get(0)!=null){
+ List<Map<String, Object>> rList = new ArrayList<>();
+ if (lists.size() == 1 && lists.get(0) != null) {
for (int i = 0; i < lists.get(0).size(); i++) {
List list = new ArrayList();
list.add(lists.get(0).get(i).get("data"));
Map map = new HashMap();
- map.put("data",list);
- map.put("time",lists.get(0).get(i).get("time"));
+ map.put("data", list);
+ map.put("time", lists.get(0).get(i).get("time"));
rList.add(map);
}
- } else if (lists.size()==1 && lists.get(0)==null){
+ } else if (lists.size() == 1 && lists.get(0) == null) {
rList.add(null);
- }else {
+ } else {
for (int j = 0; j < lists.get(0).size(); j++) {
Map<String, Object> listMap = new HashMap();
List<Map> mapList = new ArrayList<>();
@@ -2985,7 +3042,7 @@
rList.add(listMap);
}
}
- return new ResultBean<List<Map<String,Object>>>(rList);
+ return new ResultBean<List<Map<String, Object>>>(rList);
}
@PostMapping("byAccountGetDevices")
@@ -2994,4 +3051,188 @@
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 = "realTime", 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<>();
+ //���������������������������������
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ Calendar beforeTime = Calendar.getInstance();
+ Date newTime = beforeTime.getTime();
+ beforeTime.add(Calendar.MINUTE,-5);
+ Date startTime = beforeTime.getTime();
+ beforeTime.add(Calendar.MINUTE,6);
+ Date endTime = beforeTime.getTime();
+ //pa.put("sensorKey","e1");
+ pa.put("yearAndMonth",sdf.format(newTime).substring(0,7).replace("-",""));
+ pa.put("startTime",startTime);
+ pa.put("endTime",endTime);
+ 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);
+ pa.put("macNumber",macs.size());
+ List<Map<String, Object>> fiveMinuteDataList = historyFiveMinutelyService.getFiveMinutesDataByMacsAndTimeSolt(pa);
+ //������������������������������������������
+ double[] allDeviceData = new double[fiveMinuteDataList.size()];
+ int i = 0;
+ //������������
+ List<Map<String,Object>> windList = new ArrayList<>();
+ for (Map map:fiveMinuteDataList) {
+ String[] wind_speed = map.get("e18").toString().split(",");
+ if (!map.containsKey("e23")){
+ continue;
+ }
+ 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(Math.toRadians(minDisparity.get().getValue()))*distance;
+ double y = Math.sin(Math.toRadians(minDisparity.get().getValue()))*distance;
+ //���������������������
+ String[] fiveMinuteData = fiveMinuteDataMap.get(sensorKey).toString().split(",");
+ double c = Double.parseDouble(fiveMinuteData[0].substring(1,fiveMinuteData[0].length()))-deviceDataAvg;
+ //������������
+ double pollutionSourceIntensity = EmissionDataUtil.getPollutionSourceIntensity(c,x,y,res.get("wind_speed"));
+
+ //���������������������
+ 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);
+
+
+ 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/java/com/moral/mapper/HistoryFiveMinutelyMapper.java b/src/main/java/com/moral/mapper/HistoryFiveMinutelyMapper.java
index 0aadbdd..c3a01d6 100644
--- a/src/main/java/com/moral/mapper/HistoryFiveMinutelyMapper.java
+++ b/src/main/java/com/moral/mapper/HistoryFiveMinutelyMapper.java
@@ -10,4 +10,6 @@
Map<String,Object> getFiveMinutesDataByMac(Map<String,Object> parameters);
List<Map<String,Object>> getFiveMinutesSersorDataByMacsAndTime(Map<String,Object> parameters);
+
+ List<Map<String,Object>> getFiveMinutesDataByMacsAndTimeSolt(Map<String,Object> parameters);
}
diff --git a/src/main/java/com/moral/service/HistoryFiveMinutelyService.java b/src/main/java/com/moral/service/HistoryFiveMinutelyService.java
index 21972b8..78456b7 100644
--- a/src/main/java/com/moral/service/HistoryFiveMinutelyService.java
+++ b/src/main/java/com/moral/service/HistoryFiveMinutelyService.java
@@ -9,4 +9,6 @@
Map<String,Object> getFiveMinutesDataByMac(Map<String, Object> parameters);
List<Map<String, Object>> getFiveMinutesSersorDataByMacsAndTime(Map<String,Object> parameters);
+
+ List<Map<String, Object>> getFiveMinutesDataByMacsAndTimeSolt(Map<String,Object> parameters);
}
diff --git a/src/main/java/com/moral/service/impl/HistoryFiveMinutelyServiceImpl.java b/src/main/java/com/moral/service/impl/HistoryFiveMinutelyServiceImpl.java
index b2dc382..156b8ba 100644
--- a/src/main/java/com/moral/service/impl/HistoryFiveMinutelyServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/HistoryFiveMinutelyServiceImpl.java
@@ -32,5 +32,11 @@
return historyFiveMinutelyMapper.getFiveMinutesSersorDataByMacsAndTime(parameters);
}
+ @Override
+ public List<Map<String, Object>> getFiveMinutesDataByMacsAndTimeSolt(Map<String, Object> parameters) {
+ ValidateUtil.notNull(parameters,"���������������������������������");
+ return historyFiveMinutelyMapper.getFiveMinutesDataByMacsAndTimeSolt(parameters);
+ }
+
}
diff --git a/src/main/java/com/moral/service/impl/HistoryServiceImpl.java b/src/main/java/com/moral/service/impl/HistoryServiceImpl.java
index 08137c7..498bcec 100644
--- a/src/main/java/com/moral/service/impl/HistoryServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/HistoryServiceImpl.java
@@ -540,8 +540,8 @@
String startTime = parameters.get("startTime").toString();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime startTimeLocalDateTime = LocalDateTime.parse(startTime, dateTimeFormatter);
- LocalDateTime today = LocalDateTime.now().truncatedTo(ChronoUnit.DAYS);
- LocalDateTime startTimeDay = startTimeLocalDateTime.truncatedTo(ChronoUnit.DAYS);
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");
+ int format = Integer.parseInt(sdf.format(new Date()));
int year = startTimeLocalDateTime.getYear();
int month = startTimeLocalDateTime.getMonthValue();
String monthStr = month < 10 ? ("0" + month) : month + "";
@@ -553,17 +553,15 @@
}
parameters.put("sensorKeys", sensorKeys);
List<Map<String, Object>> listMap = null;
- /*if (today.compareTo(startTimeDay) == 0) {
- listMap = historyMapper.listGetSensorData(parameters);
- }*/
- //if (CollectionUtils.isEmpty(listMap)) {
listMap = historyMapper.getCarSensorData(parameters);
if (CollectionUtils.isEmpty(listMap)) {
if (year <= 2019) {
listMap = historyMinutelyMapper.getSensorData(parameters);
} else {
- parameters.put("yearAndMonth", yearAndMonth);
- listMap = historyMinutelyMapper.getSensorData2020(parameters);
+ if (Integer.parseInt(yearAndMonth) <= format) {
+ parameters.put("yearAndMonth", yearAndMonth);
+ listMap = historyMinutelyMapper.getSensorData2020(parameters);
+ }
}
}
//}
diff --git a/src/main/java/com/moral/util/WindUtils.java b/src/main/java/com/moral/util/WindUtils.java
index 01d7073..80de618 100644
--- a/src/main/java/com/moral/util/WindUtils.java
+++ b/src/main/java/com/moral/util/WindUtils.java
@@ -1,5 +1,6 @@
package com.moral.util;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -29,26 +30,26 @@
u1 = 0;
v1 = wind_speed*1;
}else if (0<wind_direction&&wind_direction<90){
- u1 = wind_speed*Math.sin(wind_direction);
- v1 = wind_speed*Math.cos(wind_direction);
+ u1 = wind_speed*Math.sin(Math.toRadians(wind_direction));
+ v1 = wind_speed*Math.cos(Math.toRadians(wind_direction));
}else if (wind_direction == 90){
u1 = wind_speed*1;
v1 = 0;
}else if (90<wind_direction&&wind_direction<180){
- u1 = wind_speed*Math.sin(180-wind_direction);
- v1 = -1*wind_speed*Math.cos(180-wind_direction);
+ u1 = wind_speed*Math.sin(Math.toRadians(180-wind_direction));
+ v1 = -1*wind_speed*Math.cos(Math.toRadians(180-wind_direction));
}else if (wind_direction == 180){
u1 = 0;
v1 = wind_speed*-1;
}else if (180<wind_direction&&wind_direction<270){
- u1 = -1*wind_speed*Math.sin(wind_direction-180);
- v1 = -1*wind_speed*Math.cos(wind_direction-180);
+ u1 = -1*wind_speed*Math.sin(Math.toRadians(wind_direction-180));
+ v1 = -1*wind_speed*Math.cos(Math.toRadians(wind_direction-180));
}else if (wind_direction == 270){
u1 = wind_speed*-1;
v1 = 0;
}else if (270<wind_direction&&wind_direction<360){
- u1 = wind_speed*Math.sin(360-wind_direction);
- v1 = -1*wind_speed*Math.cos(360-wind_direction);
+ u1 = wind_speed*Math.sin(Math.toRadians(360-wind_direction));
+ v1 = -1*wind_speed*Math.cos(Math.toRadians(360-wind_direction));
}
u = u+u1;
v = v+v1;
@@ -59,30 +60,47 @@
windDirectionSpeedMap.put("wind_speed",0.0);
}else if (u==0&&v>0){
windDirectionSpeedMap.put("wind_direction",0.0);
- windDirectionSpeedMap.put("wind_speed",v);
+ windDirectionSpeedMap.put("wind_speed",v/list.size());
}else if (u>0&&v>0){
- windDirectionSpeedMap.put("wind_direction",Math.atan2(u,v));
- windDirectionSpeedMap.put("wind_speed",Math.sqrt(u*u+v*v));
+ windDirectionSpeedMap.put("wind_direction",Math.toDegrees(Math.atan2(u,v)));
+ windDirectionSpeedMap.put("wind_speed",Math.sqrt(u*u+v*v)/list.size());
}else if (u>0&&v==0){
windDirectionSpeedMap.put("wind_direction",90.0);
- windDirectionSpeedMap.put("wind_speed",u);
+ windDirectionSpeedMap.put("wind_speed",u/list.size());
}else if (u>0&&v<0){
- windDirectionSpeedMap.put("wind_direction",Math.atan2(-v,u)+90);
- windDirectionSpeedMap.put("wind_speed",Math.sqrt(u*u+v*v));
+ windDirectionSpeedMap.put("wind_direction",Math.toDegrees(Math.atan2(-v,u))+90);
+ windDirectionSpeedMap.put("wind_speed",Math.sqrt(u*u+v*v)/list.size());
}else if (u==0&&v<0){
windDirectionSpeedMap.put("wind_direction",180.0);
- windDirectionSpeedMap.put("wind_speed",-v);
+ windDirectionSpeedMap.put("wind_speed",Math.abs(v)/list.size());
}else if (u<0&&v<0){
- windDirectionSpeedMap.put("wind_direction",Math.atan2(-u,-v)+180);
- windDirectionSpeedMap.put("wind_speed",Math.sqrt(u*u+v*v));
+ windDirectionSpeedMap.put("wind_direction",Math.toDegrees(Math.atan2(-u,-v))+180);
+ windDirectionSpeedMap.put("wind_speed",Math.sqrt(u*u+v*v)/list.size());
}else if (u<0&&v==0){
windDirectionSpeedMap.put("wind_direction",270.0);
- windDirectionSpeedMap.put("wind_speed",-u);
+ windDirectionSpeedMap.put("wind_speed",Math.abs(u)/list.size());
}else if (u<0&&v>0){
- windDirectionSpeedMap.put("wind_direction",Math.atan2(v,-u)+270);
- windDirectionSpeedMap.put("wind_speed",Math.sqrt(u*u+v*v));
+ windDirectionSpeedMap.put("wind_direction",Math.toDegrees(Math.atan2(v,-u))+270);
+ windDirectionSpeedMap.put("wind_speed",Math.sqrt(u*u+v*v)/list.size());
}
return windDirectionSpeedMap;
}
+ /*public static void main(String[] args) {
+ List list = new ArrayList();
+ Map map = new HashMap();
+ Map map2 = new HashMap();
+ map.put("wind_direction",45);
+ map.put("wind_speed",1);
+ map2.put("wind_direction",45);
+ map2.put("wind_speed",1);
+ list.add(map);
+ list.add(map2);
+ Map<String, Double> re = getWind_direction_speed(list);
+ System.out.println(re);
+ System.out.println(Math.toRadians(45));
+ System.out.println(Math.sin(Math.toRadians(45)));
+ System.out.println(Math.cos(Math.toRadians(45)));
+ }*/
+
}
diff --git a/src/main/java/com/moral/webSocketServer/BSAQIWebSocketServerTest.java b/src/main/java/com/moral/webSocketServer/BSAQIWebSocketServerTest.java
new file mode 100644
index 0000000..2341912
--- /dev/null
+++ b/src/main/java/com/moral/webSocketServer/BSAQIWebSocketServerTest.java
@@ -0,0 +1,173 @@
+package com.moral.webSocketServer;
+
+import com.alibaba.fastjson.JSON;
+import com.moral.entity.Device;
+import com.moral.entity.Sensor;
+import com.moral.service.DeviceService;
+import com.moral.service.SensorService;
+import com.moral.util.RabbitMQUtils;
+import com.rabbitmq.client.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+
+import javax.annotation.PostConstruct;
+import javax.websocket.*;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+@Slf4j
+@ServerEndpoint("/web/AQIWebSocketTest/{param}")
+@Component
+public class BSAQIWebSocketServerTest {
+
+ public static SensorService sensorService;
+
+ public static DeviceService deviceService;
+
+ /**
+ * concurrent������������������Set���������������������������������������WebSocket���������
+ */
+ private static ConcurrentHashMap<String, BSAQIWebSocketServerTest> webSocketMap = new ConcurrentHashMap<>();
+ /**
+ * ������������������������������������������������������������������������������
+ */
+ private Session session;
+
+ private String orgId;
+
+ private String accountId;
+
+ private String mac;
+
+ private final String exchange = "screens_data";
+
+ private static Map<String, Sensor> sensors;
+
+ @PostConstruct
+ public void init() {
+ sensors = new HashMap<>();
+ List<Sensor> allSensors = sensorService.getAllSensors();
+ for (Sensor sensor : allSensors) {
+ sensors.put(sensor.getSensorKey(), sensor);
+ }
+ }
+
+ @OnOpen
+ public void onOpen(Session session, @PathParam("param") String param) {
+ this.session = session;
+ String[] params = param.split("&");
+ this.accountId = params[0];
+ this.orgId = params[1];
+ this.mac = params[2];
+
+ if (webSocketMap.containsKey(accountId)) {
+ webSocketMap.remove(accountId);
+ webSocketMap.put(accountId, this);
+ } else {
+ webSocketMap.put(accountId, this);
+ }
+
+
+ try {
+ Connection connection = RabbitMQUtils.getConnection();
+ final Channel channel = connection.createChannel();
+ //������������������
+ String queue = channel.queueDeclare().getQueue();
+ //������������������������routingKey������������
+ String routingKey = "";
+ routingKey = this.orgId + "." + this.mac;
+ channel.queueBind(queue, exchange, routingKey);
+
+
+ //������������,���������������������
+ channel.basicQos(30);//���������������
+ channel.basicConsume(queue, false, new DefaultConsumer(channel) {
+ @Override
+ public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
+ try{
+ //������MQ������������������������������������������������������������
+ Map message = (Map) JSON.parse((String) JSON.parse(new String(body)));
+ Device device = deviceService.getDeviceByMac(mac,false);
+ sendDeviceInfo(message, device);
+ //������������
+ channel.basicAck(envelope.getDeliveryTag(), true);
+ //������socket������������������
+ if (!webSocketMap.containsKey(accountId)) {
+ RabbitMQUtils.closeConnectionChannel(connection, channel);
+ }
+ }catch (Exception e){
+ log.error(e.getMessage());
+ RabbitMQUtils.closeConnectionChannel(connection, channel);
+ }
+ }
+ });
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @OnClose
+ public void onClose() {
+ if (webSocketMap.containsKey(accountId)) {
+ webSocketMap.remove(accountId);
+ }
+ }
+
+ //������������������������������
+ @OnMessage
+ public void onMessage(String message, Session session) {
+
+ }
+
+ @OnError
+ public void onError(Session session, Throwable error) {
+ log.error(error.getMessage());
+ }
+
+ public void sendMessage(String message) throws IOException {
+ try {
+ if (session.isOpen()) {
+ this.session.getBasicRemote().sendText(message);
+ }
+ } catch (IOException e) {
+
+ //log.error(e.getMessage());
+ }
+ }
+
+ /**
+ * @Description: ������������mac������accountid���������������������mac������������������
+ * @Param: [param]
+ * @return: void
+ * @Author: ���������
+ * @Date: 2020/9/30
+ */
+ private void sendDeviceInfo(Map<String, Object> param, Device device) {
+
+ try {
+ Map<String, Object> sortMap = new LinkedHashMap<>();
+ //���������������������������������
+ sortMap.put("name", device.getName());
+ sortMap.put("address", device.getAddress());
+ //������������
+ param.forEach((key, value) -> {
+ Sensor sensor = sensors.get(key);
+ if (!ObjectUtils.isEmpty(sensor)) {
+ String unit = ObjectUtils.isEmpty(sensor.getUnit()) ? "" : (String) sensor.getUnit();
+ sortMap.put(sensor.getSensorKey(), value + unit);
+ }
+ });
+ sendMessage(JSON.toJSONString(sortMap));
+ } catch (IOException e) {
+ log.error("������mac������������������������");
+ }
+ }
+
+}
diff --git a/src/main/resources/mapper/HistoryFiveMinutelyMapper.xml b/src/main/resources/mapper/HistoryFiveMinutelyMapper.xml
index 642d314..1c6c1fb 100644
--- a/src/main/resources/mapper/HistoryFiveMinutelyMapper.xml
+++ b/src/main/resources/mapper/HistoryFiveMinutelyMapper.xml
@@ -32,4 +32,19 @@
#{mac}
</foreach>
</select>
+
+ <select id="getFiveMinutesDataByMacsAndTimeSolt" resultType="map">
+ select h.mac,h.time,
+ <foreach collection="sensorKeys" separator="," item="sensorKey">
+ json->'$.${sensorKey}' AS '${sensorKey}'
+ </foreach>
+ FROM history_five_minutely_${yearAndMonth} h
+ WHERE mac IN
+ <foreach collection="macs" separator="," open="(" close=")" item="mac">
+ #{mac}
+ </foreach>
+ AND time BETWEEN #{startTime} AND #{endTime}
+ ORDER BY h.time DESC
+ LIMIT #{macNumber}
+ </select>
</mapper>
\ No newline at end of file
diff --git a/src/main/webapp/img/sensorLevel.png b/src/main/webapp/img/sensorLevel.png
new file mode 100644
index 0000000..aedd8c9
--- /dev/null
+++ b/src/main/webapp/img/sensorLevel.png
Binary files differ
diff --git a/src/main/webapp/view/cartrajectoryNew.jsp b/src/main/webapp/view/cartrajectoryNew.jsp
new file mode 100644
index 0000000..32798c1
--- /dev/null
+++ b/src/main/webapp/view/cartrajectoryNew.jsp
@@ -0,0 +1,566 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8"/>
+ <title></title>
+ <script type="text/javascript"
+ src="http://api.map.baidu.com/api?v=2.0&ak=rER1sgBIcQxkfNSlm2wmBGZGgEERrooM"></script>
+ <script type="text/javascript" src="/js/jquery.min.js"></script>
+</head>
+<style type="text/css">
+ body,
+ html,
+ #mapCanvas {
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
+ margin: 0;
+ z-index: 0;
+ font-size: 14px;
+ font-family: "������������";
+ }
+
+ .main_body {
+ border: 0;
+ margin: 0;
+ width: 100%;
+ height: 100%;
+ position: relative;
+ }
+
+ * {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+ }
+
+ #cpm {
+ width: 300px;
+ height: 100px;
+ position: absolute;
+ background-color: #ffffff;
+ display: none;
+ left: 50%;
+ top: 50%;
+ margin-left: -150px;
+ margin-top: -50px;
+ z-index: 11;
+ color: #000000;
+ border: 2px solid #FF7F50;
+ font-size: 28px;
+ line-height: 100px;
+ text-align: center;
+ }
+
+ .BMap_pop > img {
+ top: 42px !important;
+ margin-left: -10px;
+ }
+
+ .BMap_pop div:nth-child(1) div {
+ display: none;
+ }
+
+ .BMap_pop div:nth-child(3) {
+ display: none;
+ }
+
+ .BMap_pop div:nth-child(5) {
+ display: none;
+ }
+
+ .BMap_pop div:nth-child(7) {
+ display: none;
+ }
+
+ .BMap_pop div:nth-child(9) {
+ top: 35px !important;
+ border-radius: 5px;
+ }
+
+ #selectSenor {
+ position: absolute;
+ z-index: 1;
+ left: 30px;
+ top: 20px;
+ font-size: 20px;
+ background: lightgrey;
+ }
+
+ button {
+ font-size: 15px;
+ }
+
+ .sensorLevel {
+ position: absolute;
+ z-index: 1;
+ bottom: 20px;
+ right: 10px;
+ width: 100px;
+ height: 200px;
+ }
+
+</style>
+
+<body>
+<div class="main_body">
+ <div id="selectSenor">
+ <input type="radio" value="e1" name="sensor" checked>PM2.5
+ <input type="radio" value="e2" name="sensor">PM10
+ <input type="radio" value="e17" name="sensor">TVOC
+ </div>
+
+ <img src="/img/sensorLevel.png" class="sensorLevel">
+ <div id="cpm">���������������������</div>
+ <div id="mapCanvas"></div> <!-- ������������ -->
+</div>
+</body>
+</html>
+
+<script type="text/javascript">
+ var GPS = {
+ PI: 3.14159265358979324,
+ x_pi: 3.14159265358979324 * 3000.0 / 180.0,
+ delta: function (lat, lon) {
+ var a = 6378245.0; // a: ������������������������������������������������������������������
+ var ee = 0.00669342162296594323; // ee: ���������������������
+ var dLat = this.transformLat(lon - 105.0, lat - 35.0);
+ var dLon = this.transformLon(lon - 105.0, lat - 35.0);
+ var radLat = lat / 180.0 * this.PI;
+ var magic = Math.sin(radLat);
+ magic = 1 - ee * magic * magic;
+ var sqrtMagic = Math.sqrt(magic);
+ dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * this.PI);
+ dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * this.PI);
+ return {'lat': dLat, 'lon': dLon};
+ },
+
+ //WGS-84 to GCJ-02
+ gcj_encrypt: function (wgsLat, wgsLon) {
+ if (this.outOfChina(wgsLat, wgsLon))
+ return {'lat': wgsLat, 'lon': wgsLon};
+
+ var d = this.delta(wgsLat, wgsLon);
+ return {'lat': wgsLat + d.lat, 'lon': wgsLon + d.lon};
+ },
+ //GCJ-02 to WGS-84
+ gcj_decrypt: function (gcjLat, gcjLon) {
+ if (this.outOfChina(gcjLat, gcjLon))
+ return {'lat': gcjLat, 'lon': gcjLon};
+
+ var d = this.delta(gcjLat, gcjLon);
+ return {'lat': gcjLat - d.lat, 'lon': gcjLon - d.lon};
+ },
+ //GCJ-02 to WGS-84 exactly
+ gcj_decrypt_exact: function (gcjLat, gcjLon) {
+ var initDelta = 0.01;
+ var threshold = 0.000000001;
+ var dLat = initDelta, dLon = initDelta;
+ var mLat = gcjLat - dLat, mLon = gcjLon - dLon;
+ var pLat = gcjLat + dLat, pLon = gcjLon + dLon;
+ var wgsLat, wgsLon, i = 0;
+ while (1) {
+ wgsLat = (mLat + pLat) / 2;
+ wgsLon = (mLon + pLon) / 2;
+ var tmp = this.gcj_encrypt(wgsLat, wgsLon)
+ dLat = tmp.lat - gcjLat;
+ dLon = tmp.lon - gcjLon;
+ if ((Math.abs(dLat) < threshold) && (Math.abs(dLon) < threshold))
+ break;
+
+ if (dLat > 0) pLat = wgsLat; else mLat = wgsLat;
+ if (dLon > 0) pLon = wgsLon; else mLon = wgsLon;
+
+ if (++i > 10000) break;
+ }
+ return {'lat': wgsLat, 'lon': wgsLon};
+ },
+ //GCJ-02 to BD-09
+ bd_encrypt: function (gcjLat, gcjLon) {
+ var x = gcjLon, y = gcjLat;
+ var z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * this.x_pi);
+ var theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * this.x_pi);
+ bdLon = z * Math.cos(theta) + 0.0065;
+ bdLat = z * Math.sin(theta) + 0.006;
+ return {'lat': bdLat, 'lon': bdLon};
+ },
+ //BD-09 to GCJ-02
+ bd_decrypt: function (bdLat, bdLon) {
+ var x = bdLon - 0.0065, y = bdLat - 0.006;
+ var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * this.x_pi);
+ var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * this.x_pi);
+ var gcjLon = z * Math.cos(theta);
+ var gcjLat = z * Math.sin(theta);
+ return {'lat': gcjLat, 'lon': gcjLon};
+ },
+ //WGS-84 to Web mercator
+ //mercatorLat -> y mercatorLon -> x
+ mercator_encrypt: function (wgsLat, wgsLon) {
+ var x = wgsLon * 20037508.34 / 180.;
+ var y = Math.log(Math.tan((90. + wgsLat) * this.PI / 360.)) / (this.PI / 180.);
+ y = y * 20037508.34 / 180.;
+ return {'lat': y, 'lon': x};
+ },
+ // Web mercator to WGS-84
+ // mercatorLat -> y mercatorLon -> x
+ mercator_decrypt: function (mercatorLat, mercatorLon) {
+ var x = mercatorLon / 20037508.34 * 180.;
+ var y = mercatorLat / 20037508.34 * 180.;
+ y = 180 / this.PI * (2 * Math.atan(Math.exp(y * this.PI / 180.)) - this.PI / 2);
+ return {'lat': y, 'lon': x};
+ },
+ // two point's distance
+ distance: function (latA, lonA, latB, lonB) {
+ var earthR = 6371000.;
+ var x = Math.cos(latA * this.PI / 180.) * Math.cos(latB * this.PI / 180.) * Math.cos((lonA - lonB) * this.PI / 180);
+ var y = Math.sin(latA * this.PI / 180.) * Math.sin(latB * this.PI / 180.);
+ var s = x + y;
+ if (s > 1) s = 1;
+ if (s < -1) s = -1;
+ var alpha = Math.acos(s);
+ var distance = alpha * earthR;
+ return distance;
+ },
+ outOfChina: function (lat, lon) {
+ if (lon < 72.004 || lon > 137.8347)
+ return true;
+ if (lat < 0.8293 || lat > 55.8271)
+ return true;
+ return false;
+ },
+ transformLat: function (x, y) {
+ var ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x));
+ ret += (20.0 * Math.sin(6.0 * x * this.PI) + 20.0 * Math.sin(2.0 * x * this.PI)) * 2.0 / 3.0;
+ ret += (20.0 * Math.sin(y * this.PI) + 40.0 * Math.sin(y / 3.0 * this.PI)) * 2.0 / 3.0;
+ ret += (160.0 * Math.sin(y / 12.0 * this.PI) + 320 * Math.sin(y * this.PI / 30.0)) * 2.0 / 3.0;
+ return ret;
+ },
+ transformLon: function (x, y) {
+ var ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x));
+ ret += (20.0 * Math.sin(6.0 * x * this.PI) + 20.0 * Math.sin(2.0 * x * this.PI)) * 2.0 / 3.0;
+ ret += (20.0 * Math.sin(x * this.PI) + 40.0 * Math.sin(x / 3.0 * this.PI)) * 2.0 / 3.0;
+ ret += (150.0 * Math.sin(x / 12.0 * this.PI) + 300.0 * Math.sin(x / 30.0 * this.PI)) * 2.0 / 3.0;
+ return ret;
+ }
+ };
+
+ var params = ${requestScope.carTrajectoryParams};
+ var sensorInfo = params["sensorInfo"];
+ var map = new BMap.Map("mapCanvas", {enableMapClick: false});
+ var mapStyle = {
+ features: ["road", "building", "water", "land"], // ������������������poi
+ style: "normal" // ������������������������������
+ };
+ map.setMapStyle(mapStyle);
+
+ //������������
+ var mapType = new BMap.MapTypeControl(
+ {
+ mapTypes: [BMAP_NORMAL_MAP, BMAP_SATELLITE_MAP],
+ anchor: BMAP_ANCHOR_TOP_RIGHT
+ }
+ );
+ map.addControl(mapType);
+ map.setMapType(BMAP_SATELLITE_MAP);//������������������������������������������
+ var navigation = new BMap.NavigationControl({
+ anchor: BMAP_ANCHOR_BOTTOM_LEFT,
+ type: BMAP_NAVIGATION_CONTROL_LARGE
+ });
+ map.addControl(navigation);//������������
+ map.enableScrollWheelZoom(true); // ������������������������
+ map.addControl(new BMap.ScaleControl());
+ if (sensorInfo.length === 0) {
+ showNoFlightTrajectory();
+ }
+ var trackPoints = [];//���������������������������������������������������������
+ var points = [];
+ //������������
+ var size = 50;
+ var distance = size / 2 / Math.sin(1 * Math.PI / 4);
+ //������������������
+ var sensor = $("input[type='radio']:checked").val();
+ for (var i = 0; i < sensorInfo.length; i++) {
+ if (typeof (sensorInfo[i]["e76"]) == "undefined") {
+ sensorInfo.splice(i, 1);
+ i--;
+ } else {
+ var lon = parseFloat(sensorInfo[i].e76.substr(0, sensorInfo[i].e76.length - 1));
+ var lat = parseFloat(sensorInfo[i].e77.substr(0, sensorInfo[i].e77.length - 1));
+ if (lon > 150 || lon < 70 || lat <= 20 || lat > 60) {
+ sensorInfo.splice(i, 1);
+ i--;
+ }
+ if (i > 1) {
+ if (sensorInfo[i]["e76"] === sensorInfo[i - 1]["e76"] && sensorInfo[i]["e77"] === sensorInfo[i - 1]["e77"]) {
+ sensorInfo.splice(i, 1);
+ i--;
+ }
+ }
+ }
+ }
+
+ points = getShowPoints();
+
+ map.centerAndZoom(points, 13);// ������������������������������������
+ map.setViewport(points);// ������������������������������������������������������
+ drawPolygon(sensor);//���������
+ drawLine();//������������
+ drawStartAndEnd();//���������������������
+
+ //������������������
+ function showNoFlightTrajectory() {
+ var point = new BMap.Point(120.987287, 31.391562);
+ map.centerAndZoom(point, 17);
+ setTimeout(function () {
+ document.getElementById("cpm").style.display = 'block';
+ }, 250);
+ }
+
+ //���������������������������������������������distance������
+ function getPoint(angle, lng, lat, distance) {
+ var EARTH_RADIUS = 6378137;
+ //���������������������������������������
+ var ra = distance / EARTH_RADIUS;
+ // ���������radian���������������������������
+ angle = angle / 180 * Math.PI;
+ lng = lng / 180 * Math.PI;
+ lat = lat / 180 * Math.PI;
+ lng = lng + Math.atan2(Math.sin(angle) * Math.sin(ra) * Math.cos(lat), Math.cos(ra) - Math.sin(lat) * Math.sin(lat));
+ lat = Math.asin(Math.sin(lat) * Math.cos(ra) + Math.cos(lat) * Math.sin(ra) * Math.cos(angle));
+ // ���������������10���������������
+ lng = lng * 180 / Math.PI;
+ lat = lat * 180 / Math.PI;
+ return new BMap.Point(lng, lat);
+ }
+
+ //���������������������
+ function getColor(senosor, data) {
+ var color;
+ switch (sensor) {
+ case 'e1':
+ if (data < 35) {
+ color = '#0FB820';
+ } else if (data < 75) {
+ color = '#B8B002';
+ } else if (data < 115) {
+ color = '#E55F03';
+ } else if (data < 150) {
+ color = '#C9031B';
+ } else if (data < 250) {
+ color = '#C00160';
+ } else {
+ color = '#BC0238';
+ }
+ break;
+ case 'e2':
+ if (data < 50) {
+ color = '#0FB820';
+ } else if (data < 150) {
+ color = '#B8B002';
+ } else if (data < 250) {
+ color = '#E55F03';
+ } else if (data < 350) {
+ color = '#C9031B';
+ } else if (data < 420) {
+ color = '#C00160';
+ } else {
+ color = '#BC0238';
+ }
+ break;
+ case 'e17':
+ if (data < 1.5) {
+ color = '#0FB820';
+ } else if (data < 3) {
+ color = '#B8B002';
+ } else if (data < 5) {
+ color = '#E55F03';
+ } else {
+ color = '#BC0238';
+ }
+ break;
+ default:
+ color = '#0FB820';
+ break;
+ }
+ return color;
+ }
+
+ //���������������������������������
+ function drawPolygon(sensor) {
+ $.each(points, function (item, point) {
+ var sw = getPoint(225, point.lng, point.lat, distance);
+ var ne = getPoint(45, point.lng, point.lat, distance);
+ var data = point[sensor];
+ //������������������������������������
+ color = getColor(sensor, data);
+ var polygon = new BMap.Polygon([
+ new BMap.Point(sw.lng, sw.lat),//���������
+ new BMap.Point(ne.lng, sw.lat),//���������
+ new BMap.Point(ne.lng, ne.lat),//���������
+ new BMap.Point(sw.lng, ne.lat)//���������
+ ], {strokeWeight: 0.5, strokeOpacity: 0.5, fillColor: color});
+ map.addOverlay(polygon);
+ //���������������label������
+ setLabelStyle(data, point);
+ });
+ }
+
+ //���������������������
+ function drawLine() {
+ //������������������������
+ var sy = new BMap.Symbol(BMap_Symbol_SHAPE_BACKWARD_OPEN_ARROW, {
+ scale: 0.6,//������������������
+ strokeColor: 'white',//������������������������������������
+ strokeWeight: 3,//������������
+ });
+ var icons = new BMap.IconSequence(sy, '100%', '4%', false);//���������true������������������������������
+ //������������������������
+ var trackLine = new BMap.Polyline(points, {
+ strokeColor: "red",//������������
+ strokeWeight: 4,//������
+ strokeOpacity: 0.3,//���������������������������������0 - 1
+ enableEditing: false,//���������������������������������false
+ enableClicking: false,//������������������������������������true
+ icons: [icons],
+ });
+ map.addOverlay(trackLine);
+ }
+
+ //���������������������
+ function drawStartAndEnd() {
+ var startIcon = new BMap.Icon("/img/start.png", new BMap.Size(48, 48));
+ var startMark = new BMap.Marker(points[0], {icon: startIcon, offset: new BMap.Size(0, -20)});
+ map.addOverlay(startMark);
+ var endIcon = new BMap.Icon("/img/end.png", new BMap.Size(48, 48));
+ var endMark = new BMap.Marker(points[points.length - 1], {icon: endIcon, offset: new BMap.Size(0, -20)});
+ map.addOverlay(endMark);
+ }
+
+ //������������>=50m���������points
+ function getShowPoints() {
+ points.push(convertPoint(0));
+ for (var i = 1; i < sensorInfo.length; i++) {
+ var flag = true;
+ var point1 = convertPoint(i);
+ var sw1 = getPoint(225, point1.lng, point1.lat, distance);
+ var ne1 = getPoint(45, point1.lng, point1.lat, distance);
+ for (var j = 0; j < points.length; j++) {
+ var point2 = points[j];
+ var dis = parseInt(map.getDistance(point1, point2));
+ if (dis < size) {
+ flag = false;
+ }
+ }
+ if (flag) {
+ points.push(point1);
+ }
+ }
+ return points;
+ }
+
+ //point���������label������
+ function setLabelStyle(content, point) {
+ var label = new BMap.Label("<span class='my-maptip'>" + content + "<br /><span>",//���lable������������
+ {
+ offset: new BMap.Size(-8, -10),//label������������������������label������������������������
+ position: point
+ }
+ );//label���������
+
+ var offsetSize = new BMap.Size(0, 0);
+ var size = "10px";
+ if (map.getZoom() <= 16) {
+ size = "0px";
+ }
+ var labelStyle = {
+ border: "0",
+ fontSize: size,
+ height: "20px",
+ lineHeight: "20px",
+ fontFamily: "������������",
+ backgroundColor: "0.05",
+ fontWeight: "bold"
+ };
+ label.setStyle(labelStyle);
+ map.addOverlay(label);
+ }
+
+ //������������������������
+ map.addEventListener("zoomend", function () {
+ //���������������������������������������
+ var zoom = this.getZoom();
+ $('span.my-maptip').parent()[zoom <= 16 ? 'hide' : 'show']();
+ $('span.my-maptip').parent().css("font-size", 30 - zoom);
+ });
+
+ $("#selectSenor").change(function () {
+ map.clearOverlays()
+ sensor = $("input[type='radio']:checked").val();
+ drawPolygon(sensor);
+ drawLine();
+ drawStartAndEnd();
+ })
+
+ //������������������
+ function convertPoint(index) {
+ var value = sensorInfo[index];
+ if (typeof (value.e76) == "undefined") {
+ showNoFlightTrajectory();
+ }
+ var lon = parseFloat(value.e76.substr(0, value.e76.length - 1));
+ var lat = parseFloat(value.e77.substr(0, value.e77.length - 1));
+ var m = GPS.gcj_encrypt(lat, lon).lon;
+ var n = GPS.gcj_encrypt(lat, lon).lat;
+ lon = GPS.bd_encrypt(n, m).lon;
+ lat = GPS.bd_encrypt(n, m).lat;
+ var point = new BMap.Point(lon, lat);
+ point['e1'] = parseInt(sensorInfo[index]['e1']);
+ point['e2'] = parseInt(sensorInfo[index]['e2']);
+ point['e17'] = parseFloat(sensorInfo[index]['e17']).toFixed(2);
+ return point;
+ }
+
+ //���������������������
+ function getAngle(n, next) {
+ var ret
+ var w1 = n.lat / 180 * Math.PI
+ var j1 = n.lng / 180 * Math.PI
+
+ var w2 = next.lat / 180 * Math.PI
+ var j2 = next.lng / 180 * Math.PI
+
+ ret = 4 * Math.pow(Math.sin((w1 - w2) / 2), 2) - Math.pow(Math.sin((j1 - j2) / 2) * (Math.cos(w1) - Math.cos(w2)), 2);
+ ret = Math.sqrt(ret);
+
+ // var temp = Math.sin(Math.abs(j1 - j2) / 2) * (Math.cos(w1) + Math.cos(w2));
+ var temp = Math.sin((j1 - j2) / 2) * (Math.cos(w1) + Math.cos(w2));
+ ret = ret / temp;
+
+ ret = Math.atan(ret) / Math.PI * 180;
+ ret += 90;
+
+ // ������������������������if..else���������������������������������������������,������������ret������
+ if (j1 - j2 < 0) {
+ // console.log('j1<j2')
+ if (w1 - w2 < 0) {
+ // console.log('w1<w2')
+ ret;
+ } else {
+ // console.log('w1>w2')
+ ret = -ret + 180;
+ }
+ } else {
+ // console.log('j1>j2')
+ if (w1 - w2 < 0) {
+ // console.log('w1<w2')
+ ret = 180 + ret;
+ } else {
+ // console.log('w1>w2')
+ ret = -ret;
+ }
+ }
+ return ret;
+ }
+</script>
\ No newline at end of file
diff --git a/src/main/webapp/view/unorganizedMapV2.jsp b/src/main/webapp/view/unorganizedMapV2.jsp
new file mode 100644
index 0000000..319ab1f
--- /dev/null
+++ b/src/main/webapp/view/unorganizedMapV2.jsp
@@ -0,0 +1,209 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@page isELIgnored="false" %>
+
+<!DOCTYPE html>
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
+ <script type="text/javascript" src="/js/jquery.min.js"></script>
+ <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=rER1sgBIcQxkfNSlm2wmBGZGgEERrooM"></script>
+ <script type="text/javascript" src="http://api.map.baidu.com/library/Heatmap/2.0/src/Heatmap_min.js"></script>
+ <title>���������������������</title>
+ <style type="text/css">
+ ul,li{list-style: none;margin:0;padding:0;float:left;}
+ html{height:100%}
+ body{height:100%;margin:0px;padding:0px;font-family:"������������";}
+ #container{height:100%;width:100%;}
+ #r-result{width:100%;}
+ </style>
+</head>
+<body>
+<div id="container"></div>
+<div id="r-result" style="display:none">
+ <input type="button" ��nclick="openHeatmap();" value="���������������"/><input type="button" ��nclick="closeHeatmap();" value="���������������"/>
+</div>
+<div id="mapParams" style="display: none;">
+ ${requestScope.params}
+</div>
+</body>
+</html>
+<script type="text/javascript">
+ var map = new BMap.Map("container", {minZoom: 14, maxZoom: 19});
+ //var map = new BMap.Map("container"); // ������������������
+
+ 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 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 =[
+ {"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"},
+ {"lng":"120.998628","lat":"31.452027","count":"0.025"},
+ {"lng":"121.000383","lat":"31.451469","count":"0.05"},
+ {"lng":"120.999908","lat":"31.449389","count":"0.04"},
+ {"lng":"120.998519","lat":"31.450588","count":"0.10"},
+ ];
+ alert(points[1]);*/
+
+ var points1 =[
+
+ {"lng":"114.363979","lat":"36.03773","count":"52"},
+ {"lng":"114.295894","lat":"36.231772","count":"7"},
+ {"lng":"114.504007","lat":"36.093311","count":"6"},
+ {"lng":"114.395983","lat":"36.201385","count":"19"},
+ {"lng":"114.718751","lat":"36.091966","count":"2"},
+ {"lng":"114.48261","lat":"36.146032","count":"4"},
+ {"lng":"114.037656","lat":"36.276956","count":"1"},
+ {"lng":"114.425989","lat":"36.157907","count":"5"},
+ {"lng":"114.309662","lat":"36.19489","count":"8"},
+ {"lng":"114.008762","lat":"36.162515","count":"11"},
+ {"lng":"114.149597","lat":"36.25203","count":"11"},
+ {"lng":"114.634489","lat":"36.09711","count":"3"},
+ {"lng":"114.035667","lat":"36.042826","count":"105"},
+ {"lng":"114.220135","lat":"36.116061","count":"38"},
+ {"lng":"114.137829","lat":"36.054525","count":"7"},
+ {"lng":"114.137348","lat":"36.136101","count":"55"},
+ {"lng":"114.078537","lat":"36.235848","count":"28"},
+ {"lng":"114.648979","lat":"36.043749","count":"111"},
+ {"lng":"114.104776","lat":"36.124067","count":"12"},
+ {"lng":"114.578275","lat":"36.095941","count":"3"},
+ {"lng":"114.578275","lat":"36.095941","count":"22"},
+ {"lng":"114.578275","lat":"36.095941","count":"4"},
+ {"lng":"113.913152","lat":"36.000907","count":"5"},
+ {"lng":"113.831853","lat":"35.836377","count":"4"},
+ {"lng":"113.825641","lat":"36.072186","count":"16"},
+ {"lng":"113.931695","lat":"36.262638","count":"9"},
+ {"lng":"113.965077","lat":"35.919748","count":"6"},
+ {"lng":"113.830067","lat":"35.932444","count":"1"},
+ {"lng":"113.830067","lat":"35.932444","count":"7"},
+ {"lng":"113.750022","lat":"35.976316","count":"10"},
+ {"lng":"113.934346","lat":"36.166723","count":"6"},
+ {"lng":"113.928979","lat":"36.059528","count":"14"},
+ {"lng":"113.898287","lat":"35.777936","count":"6"},
+ {"lng":"113.867283","lat":"36.134905","count":"29"},
+ {"lng":"113.81997","lat":"36.280506","count":"6"},
+ {"lng":"113.936795","lat":"35.768474","count":"3"},
+ {"lng":"113.818245","lat":"36.183143","count":"107"},
+ {"lng":"113.762547","lat":"35.916163","count":"12"},
+ {"lng":"113.762547","lat":"35.916163","count":"17"},
+ {"lng":"114.309528","lat":"36.098035","count":"12"},
+ {"lng":"114.184941","lat":"36.066066","count":"10"},
+ {"lng":"114.265651","lat":"36.016851","count":"10"},
+ {"lng":"114.794527","lat":"35.889239","count":"4"},
+ {"lng":"114.916588","lat":"35.953233","count":"33"},
+ {"lng":"114.862802","lat":"36.082315","count":"5"},
+ {"lng":"114.821994","lat":"35.940167","count":"7"},
+ {"lng":"114.732801","lat":"36.010095","count":"1"},
+ {"lng":"114.665014","lat":"35.827956","count":"5"},
+ {"lng":"114.687001","lat":"35.926633","count":"4"},
+ {"lng":"114.886604","lat":"35.823869","count":"17"},
+ {"lng":"114.714493","lat":"35.824384","count":"9"},
+ {"lng":"114.838951","lat":"35.714762","count":"8"},
+ {"lng":"114.768614","lat":"35.820543","count":"3"},
+ {"lng":"114.945903","lat":"36.001222","count":"10"},
+ {"lng":"114.814282","lat":"36.05379","count":"1"},
+ {"lng":"114.89458","lat":"36.128534","count":"2"},
+ {"lng":"114.768884","lat":"36.09376","count":"3"},
+ {"lng":"114.891728","lat":"35.996425","count":"9"},
+ {"lng":"114.899498","lat":"35.683682","count":"2"},
+ {"lng":"114.436397","lat":"35.942211","count":"13"},
+ {"lng":"114.537118","lat":"35.959195","count":"5"},
+ {"lng":"114.374189","lat":"35.92115","count":"21"},
+ {"lng":"114.435536","lat":"35.884432","count":"1"},
+ {"lng":"114.434839","lat":"35.885617","count":"23"},
+ {"lng":"114.468909","lat":"35.952258","count":"17"},
+ {"lng":"114.358104","lat":"35.944822","count":"27"},
+ {"lng":"114.647021","lat":"35.968271","count":"6"},
+ {"lng":"114.483172","lat":"35.862866","count":"3"},
+ {"lng":"114.589631","lat":"35.856694","count":"4"},
+ {"lng":"114.37365","lat":"35.930392","count":"1"},
+ {"lng":"114.322755","lat":"35.82315","count":"26"},
+ {"lng":"114.322755","lat":"35.82315","count":"6"},
+ {"lng":"114.376392","lat":"36.013433","count":"3"},
+ {"lng":"114.447681","lat":"36.052479","count":"6"},
+ {"lng":"114.447681","lat":"36.052479","count":"13"},
+ {"lng":"114.31517","lat":"36.117569","count":"5"}
+
+
+ ];//������������������������
+
+
+ if(!isSupportCanvas()){
+ alert('���������������������������canvas������������������,���������������������������������������������������~')
+ }
+ //���������������,������������heatmap.js��������� https://github.com/pa7/heatmap.js/blob/master/README.md
+ //������������������:
+ /* visible ���������������������,���������true
+ * opacity ������������������,1-100
+ * radius ������������������������������������
+ * gradient {JSON} ������������������������ . gradient������������
+ * {
+ .2:'rgb(0, 255, 255)',
+ .5:'rgb(0, 110, 255)',
+ .8:'rgb(100, 0, 255)'
+ }
+ ������ key ���������������������, 0~1.
+ value ������������.
+ */
+ heatmapOverlay = new BMapLib.HeatmapOverlay({"radius":100,"visible":true});
+ map.addOverlay(heatmapOverlay);
+ heatmapOverlay.setDataSet({data:points,max:0.13});
+
+ //closeHeatmap();
+
+
+
+ //���������������������������canvas
+ function isSupportCanvas(){
+ var elem = document.createElement('canvas');
+ return !!(elem.getContext && elem.getContext('2d'));
+ }
+
+ function setGradient(){
+ /*������������������:
+ {
+ 0:'rgb(102, 255, 0)',
+ .5:'rgb(255, 170, 0)',
+ 1:'rgb(255, 0, 0)'
+ }*/
+ var gradient = {};
+ var colors = document.querySelectorAll("input[type='color']");
+ colors = [].slice.call(colors,0);
+ colors.forEach(function(ele){
+ gradient[ele.getAttribute("data-key")] = ele.value;
+ });
+ heatmapOverlay.setOptions({"gradient":gradient});
+ }
+
+ function openHeatmap(){
+ heatmapOverlay.show();
+ }
+
+ function closeHeatmap(){
+ heatmapOverlay.hide();
+ }
+</script>
+
--
Gitblit v1.8.0