From 1babbf1c0b2bc8d27f2874c85369e394b545594a Mon Sep 17 00:00:00 2001 From: ZhuDongming <773644075@qq.com> Date: Mon, 11 May 2020 11:24:00 +0800 Subject: [PATCH] add轨迹信息显示按秒级显示,update轨迹数据先从history表查询,update报表单位问题 --- src/main/webapp/img/ico1.png | 0 src/main/webapp/view/trajectorydatashow.jsp | 533 ++++++++++++++++++++++++++++++++++++++++++++++++ src/main/webapp/view/uavtrajectory.jsp | 8 src/main/webapp/img/aggregation1.png | 0 src/main/webapp/img/aggregation3.png | 0 src/main/java/com/moral/mapper/HistoryMapper.java | 6 src/main/webapp/img/ico3.png | 0 src/main/webapp/img/aggregation0.png | 0 src/main/webapp/img/aggregation2.png | 0 src/main/webapp/img/ico2.png | 0 src/main/java/com/moral/service/impl/SensorServiceImpl.java | 6 src/main/webapp/img/ico0.png | 0 src/main/java/com/moral/service/impl/HistoryServiceImpl.java | 15 src/main/webapp/view/cartrajectory.jsp | 2 src/main/resources/mapper/HistoryMapper.xml | 19 + src/main/java/com/moral/controller/ScreenController.java | 48 ++++ 16 files changed, 620 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/moral/controller/ScreenController.java b/src/main/java/com/moral/controller/ScreenController.java index 63ba21f..269c6a1 100644 --- a/src/main/java/com/moral/controller/ScreenController.java +++ b/src/main/java/com/moral/controller/ScreenController.java @@ -1524,6 +1524,54 @@ } } + @GetMapping("/trajectoryDataShow") + @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 trajectoryDataShow(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 endHour = et.substring(et.lastIndexOf("-") + 1); + int endHourValue = Integer.valueOf(endHour); + int startHourValue = Integer.valueOf(startHour); + if (endHourValue <= startHourValue) { + endHourValue = startHourValue + 1; + } + String endTime = startYearAndDay + " " + endHourValue + ":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("trajectoryParams", paramsJson); + model.setViewName("trajectorydatashow"); + return model; + } else { + StringBuilder msg = new StringBuilder(); + msg.append(" param[0] mac:"); + msg.append(mac); + log.warn(msg); + model.setViewName("403"); + return model; + } + } + @GetMapping("device-excel") @ApiOperation(value = "������������������������", notes = "������������������������") @ApiImplicitParams(value = { diff --git a/src/main/java/com/moral/mapper/HistoryMapper.java b/src/main/java/com/moral/mapper/HistoryMapper.java index d51634e..f15fe72 100644 --- a/src/main/java/com/moral/mapper/HistoryMapper.java +++ b/src/main/java/com/moral/mapper/HistoryMapper.java @@ -1,10 +1,10 @@ package com.moral.mapper; -import org.apache.ibatis.annotations.Param; - import java.util.Date; import java.util.List; import java.util.Map; + +import org.apache.ibatis.annotations.Param; public interface HistoryMapper{ String selectValueByMacAndTime(@Param("mac")String mac, @Param("time")Date time); @@ -29,4 +29,6 @@ Map<String, Object> getMonitorPointAVGValueByMonitorPointIdAndTimeslot(@Param("monitor_point_id")String monitor_point_id, @Param("starttime")String starttime, @Param("endtime")String endtime); List<Map<String, Object>> getCarSensorData(Map<String, Object> parameters); + + List<Map<String, Object>> listGetSensorData(Map<String, Object> parameters); } \ No newline at end of file diff --git a/src/main/java/com/moral/service/impl/HistoryServiceImpl.java b/src/main/java/com/moral/service/impl/HistoryServiceImpl.java index 9008efe..8622a40 100644 --- a/src/main/java/com/moral/service/impl/HistoryServiceImpl.java +++ b/src/main/java/com/moral/service/impl/HistoryServiceImpl.java @@ -496,13 +496,16 @@ } parameters.put("sensorKeys", sensorKeys); List<Map<String, Object>> listMap = null; - listMap = historyMapper.getCarSensorData(parameters); + listMap = historyMapper.listGetSensorData(parameters); if (CollectionUtils.isEmpty(listMap)) { - if (year <= 2019) { - listMap = historyMinutelyMapper.getSensorData(parameters); - } else { - parameters.put("yearAndMonth", yearAndMonth); - listMap = historyMinutelyMapper.getSensorData2020(parameters); + listMap = historyMapper.getCarSensorData(parameters); + if (CollectionUtils.isEmpty(listMap)) { + if (year <= 2019) { + listMap = historyMinutelyMapper.getSensorData(parameters); + } else { + parameters.put("yearAndMonth", yearAndMonth); + listMap = historyMinutelyMapper.getSensorData2020(parameters); + } } } List<List<Map<String, Object>>> listMaps = new ArrayList<>(); diff --git a/src/main/java/com/moral/service/impl/SensorServiceImpl.java b/src/main/java/com/moral/service/impl/SensorServiceImpl.java index 21b15ac..10e414d 100644 --- a/src/main/java/com/moral/service/impl/SensorServiceImpl.java +++ b/src/main/java/com/moral/service/impl/SensorServiceImpl.java @@ -200,7 +200,11 @@ Map<String, Object> data = new LinkedHashMap<>(); for (Map.Entry<String, Object> kv : list.get(j).entrySet()) { if ("monitorPointName".equals(kv.getKey())) { - data.put("������������(������:" + sensorInfos.get(2).get(i) + ")", kv.getValue()); + if ("null".equals(sensorInfos.get(2).get(i))) { + data.put("������������(������:)", kv.getValue()); + } else { + data.put("������������(������:" + sensorInfos.get(2).get(i) + ")", kv.getValue()); + } } else if ("name".equals(kv.getKey())) { data.put("������������", kv.getValue()); } else { diff --git a/src/main/resources/mapper/HistoryMapper.xml b/src/main/resources/mapper/HistoryMapper.xml index 4bfc446..2a7dfb0 100644 --- a/src/main/resources/mapper/HistoryMapper.xml +++ b/src/main/resources/mapper/HistoryMapper.xml @@ -236,4 +236,23 @@ h.time </select> + <select id="listGetSensorData" resultType="java.util.LinkedHashMap"> + SELECT + DATE_FORMAT(h.time,'%Y-%m-%d %H:%i:%s') time, + <foreach collection="sensorKeys" item="sensorKey" separator=","> + h.value->'$.${sensorKey}' as '${sensorKey}' + </foreach> + FROM + history as h + <where> + <if test="mac!=null"> + and h.mac=#{mac} + </if> + and h.time >= #{startTime} + and h.time <![CDATA[<]]> #{endTime} + </where> + ORDER BY + h.time + </select> + </mapper> \ No newline at end of file diff --git a/src/main/webapp/img/aggregation0.png b/src/main/webapp/img/aggregation0.png new file mode 100644 index 0000000..b606395 --- /dev/null +++ b/src/main/webapp/img/aggregation0.png Binary files differ diff --git a/src/main/webapp/img/aggregation1.png b/src/main/webapp/img/aggregation1.png new file mode 100644 index 0000000..6ba44d3 --- /dev/null +++ b/src/main/webapp/img/aggregation1.png Binary files differ diff --git a/src/main/webapp/img/aggregation2.png b/src/main/webapp/img/aggregation2.png new file mode 100644 index 0000000..6786516 --- /dev/null +++ b/src/main/webapp/img/aggregation2.png Binary files differ diff --git a/src/main/webapp/img/aggregation3.png b/src/main/webapp/img/aggregation3.png new file mode 100644 index 0000000..dbacfcd --- /dev/null +++ b/src/main/webapp/img/aggregation3.png Binary files differ diff --git a/src/main/webapp/img/ico0.png b/src/main/webapp/img/ico0.png new file mode 100644 index 0000000..6df52e3 --- /dev/null +++ b/src/main/webapp/img/ico0.png Binary files differ diff --git a/src/main/webapp/img/ico1.png b/src/main/webapp/img/ico1.png new file mode 100644 index 0000000..9090929 --- /dev/null +++ b/src/main/webapp/img/ico1.png Binary files differ diff --git a/src/main/webapp/img/ico2.png b/src/main/webapp/img/ico2.png new file mode 100644 index 0000000..3dd19d7 --- /dev/null +++ b/src/main/webapp/img/ico2.png Binary files differ diff --git a/src/main/webapp/img/ico3.png b/src/main/webapp/img/ico3.png new file mode 100644 index 0000000..1b6954b --- /dev/null +++ b/src/main/webapp/img/ico3.png Binary files differ diff --git a/src/main/webapp/view/cartrajectory.jsp b/src/main/webapp/view/cartrajectory.jsp index 9c5a4d5..19395c6 100644 --- a/src/main/webapp/view/cartrajectory.jsp +++ b/src/main/webapp/view/cartrajectory.jsp @@ -303,7 +303,7 @@ } drowLine(map, trackPoints[i], trackPoints[i + 1], traceColor);//������������ i = i + 1; - }, 250); + }, 20); } //������������������ diff --git a/src/main/webapp/view/trajectorydatashow.jsp b/src/main/webapp/view/trajectorydatashow.jsp new file mode 100644 index 0000000..ebea55a --- /dev/null +++ b/src/main/webapp/view/trajectorydatashow.jsp @@ -0,0 +1,533 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<!DOCTYPE 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_top { + display: none; + } + + .BMap_center { + display: none; + } + + .BMap_bubble_title { + color: white; + padding: 0 5px 0 5px; + background-color: #2DA0EB; + } + + .BMap_bubble_content { + background-color: white; + padding: 5px; + } + + .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; + } + +</style> + +<body> +<div class="main_body"> + <div id="cpm">������������������</div> + <div id="mapCanvas"></div> <!-- ������������ --> + <!-- ���sensorInfo,regionCode,regionName,monitorPoint,device--> + <div id="trajectoryParams" style="display: none;"> + ${requestScope.trajectoryParams} + </div> +</div> +</body> +</html> + +<script type="text/javascript"> + var moralMap = {}; + 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 mapStyle = { + features: ["road", "building", "water", "land"], // ������������������poi + style: "normal" // ������������������������������ + }; + var params = $.parseJSON($("#trajectoryParams").html()); + var sensorInfo = params["sensorInfo"]; + var sensorsMap = params['sensorsMap']; + var map = new BMap.Map("mapCanvas", {enableMapClick: false}); + map.setMapStyle(mapStyle); + map.enableScrollWheelZoom(true); // ������������������������ + var navigation = new BMap.NavigationControl({ + anchor: BMAP_ANCHOR_BOTTOM_RIGHT, + type: BMAP_NAVIGATION_CONTROL_LARGE + }); + map.addControl(navigation); + map.addControl(new BMap.ScaleControl()); + if (sensorInfo.length == 0) { + showNoTrajectory(); + } + var trackPoints = []; //��������������������������������������������������������������� + var coincidentPoints = new Array(); + var flyingParameters = ['e76', 'e77', 'e78', 'e79', 'e80', 'e81']; + var monitorParameters = ['e1', 'e2', 'e10', 'e11', 'e16', 'e15', 'e17', 'e28', 'e7', 'e6', 'e82', 'e40']; + if (sensorInfo.length > 0) { + $.each(sensorInfo, function (item, value) { + if (typeof (value.e76) == "undefined") { + showNoTrajectory(); + } else { + var lon = parseFloat(value.e76.substr(0, value.e76.length - 1)); + var lat = parseFloat(value.e77.substr(0, value.e77.length - 1)); + var lon1 = GPS.gcj_encrypt(lat, lon).lon; + var lat1 = GPS.gcj_encrypt(lat, lon).lat; + var lon2 = GPS.bd_encrypt(lat1, lon1).lon; + var lat2 = GPS.bd_encrypt(lat1, lon1).lat; + trackPoints.push(new BMap.Point(lon2, lat2)); + } + }) + for (var i = 0; i < trackPoints.length; i++) { + var flyingData = []; + var monitorData = []; + var list = new Array(); + var startPoint = trackPoints[i]; + var endPoint = trackPoints[i + 1]; + var marker; + var distance = parseInt(map.getDistance(startPoint, endPoint)).toFixed(5); + var polyline = new BMap.Polyline([ + startPoint, + endPoint + ], + {strokeColor: "#5298FF", strokeWeight: 4, strokeOpacity: 1} + ); + if (i < trackPoints.length - 1 && trackPoints.length > 1) { + map.addOverlay(polyline);// ��������������� + if (i == 0) { + map.centerAndZoom(startPoint, 17); + } + map.addOverlay(polyline); + } else if (trackPoints.length == 1) { + map.centerAndZoom(trackPoints[0], 17); + } + if (coincidentPoints.indexOf(i) > -1) { + //������������������������������������������������������������������ + continue; + } + + var startIcon = new BMap.Icon("/img/start.png", new BMap.Size(48, 48)); + var endIcon = new BMap.Icon("/img/end.png", new BMap.Size(48, 48)); + var icon = {}; + icon["url"] = "/img/ico"; + icon["aggregation"] = "/img/aggregation"; + var state; + var pm2_5 = sensorInfo[i].e1.substr(0, sensorInfo[i].e1.length - 5); + if (pm2_5 <= 35) { + state = 0; + } else if (pm2_5 > 35 && pm2_5 <= 115) { + state = 1; + } else if (pm2_5 > 115 && pm2_5 <= 150) { + state = 2; + } else if (pm2_5 > 150) { + state = 3; + } + var url = icon["url"] + state + ".png"; + if (i == 0) { + marker = new BMap.Marker(startPoint, {icon: startIcon, offset: new BMap.Size(0, -20)}); + } + if (i != 0 && i != trackPoints.length - 1) { + marker = new BMap.Marker(startPoint, { + icon: new BMap.Icon(url, new BMap.Size(48, 48)), + offset: new BMap.Size(0, -20) + }); + } + if (i == trackPoints.length - 1) { + marker = new BMap.Marker(startPoint, {icon: endIcon, offset: new BMap.Size(0, -20)}); + } + var winfowText = + '<div style="min-height:20px;overflow:auto;max-height:330px;" >'; + var opts = { + width: 250, + title: '<h3>���������' + sensorInfo[i].time + '</h3>', // ������������������ + enableMessage: false //��������������������������������� + } + + var optsCoincide = { + width: 220, + title: '<h3>���������������������</h3>', // ������������������ + enableMessage: false //��������������������������������� + } + var states = []; + for (var j = i + 1; j < trackPoints.length; j++) { + distance = map.getDistance(trackPoints[i], trackPoints[j]).toFixed(5); + if (distance <= 1.9) { + if (coincidentPoints.indexOf(i) == -1) { + coincidentPoints.push(i); + states.push(state); + winfowText += '<p id="' + i + '" onclick="openInfo(this)" onmousemove="red(this.id)" onmouseout="black(this.id)">' + "���������" + sensorInfo[i].time + "</p>"; + } + var pm2_5 = sensorInfo[j].e1.substr(0, sensorInfo[j].e1.length - 5); + if (pm2_5 <= 35) { + state = 0; + } else if (pm2_5 > 35 && pm2_5 <= 115) { + state = 1; + } else if (pm2_5 > 115 && pm2_5 <= 150) { + state = 2; + } else if (pm2_5 > 150) { + state = 3; + } + states.push(state); + let aggregationState = states[0]; + for (var k = 0; k < states.length - 1; k++) { + aggregationState = aggregationState < states[k + 1] ? states[k + 1] : aggregationState + } + coincidentPoints.push(j); + var aggregationImg = icon["aggregation"] + aggregationState + ".png"; + marker = new BMap.Marker(startPoint, {icon: new BMap.Icon(aggregationImg, new BMap.Size(48, 48))}); + + winfowTextAdd = '<p id="' + j + '" onclick="openInfo(this)" onmousemove="red(this.id)" onmouseout="black(this.id)">' + "���������" + sensorInfo[j].time + "</p>"; + winfowText += winfowTextAdd; + } + } + var monitorDataResult = monitorDataSort(sensorInfo[i], monitorData, monitorParameters); + var flyingDataResult = flyingDataSort(sensorInfo[i], flyingData, flyingParameters); + if (coincidentPoints.indexOf(i) > -1) { + winfowText = winfowText + "</div>"; + } else { + winfowText += '<h3 style="background-color: #CD5C5C;color:white;margin-bottom: 1px">������������������</h3>'; + for (var prop in monitorDataResult) { + if (monitorDataResult.hasOwnProperty(prop)) { + for (var key in sensorsMap) { + if (prop == key) { + var prop1 = sensorsMap[key]; + } + } + winfowText += ("<p style='height: 22px;line-height: 22px'>" + prop1 + "���" + monitorDataResult[prop] + "</p>"); + } + } + winfowText += '<h3 style="background-color: #66CD00;color:white;margin-bottom: 1px">������������������</h3>'; + for (var prop in flyingDataResult) { + if (flyingDataResult.hasOwnProperty(prop)) { + for (var key in sensorsMap) { + if (prop == key) { + var prop1 = sensorsMap[key]; + } + } + winfowText += ("<p style='height: 22px;line-height: 22px'>" + prop1 + "���" + flyingDataResult[prop] + "</p>"); + } + } + winfowText += "</div>"; + } + + (function (x) { + if (coincidentPoints.indexOf(i) > -1) { + var infoWindow = new BMap.InfoWindow(winfowText, optsCoincide); + } else { + var infoWindow = new BMap.InfoWindow(winfowText, opts); + } + marker.addEventListener("click", function () { + this.openInfoWindow(infoWindow); + for (var i = 0; i < list.length; i++) { + $("#" + list[i]).css('color', 'blue'); + } + }); + })(i); + + function openInfo(e) { + if (list.indexOf(e.id) == -1) { + list.push(e.id); + } + var point = trackPoints[e.id]; + var monitorDataCoincide = monitorDataSort(sensorInfo[e.id], monitorData, monitorParameters); + var flyingDataCoincide = flyingDataSort(sensorInfo[e.id], flyingData, flyingParameters); + var winfowText1 = + '<div style="min-height:20px;overflow:auto;max-height:330px;" >'; + winfowText1 += '<h3 style="background-color: #CD5C5C;color:white;margin-bottom: 1px">������������������</h3>'; + for (var prop in monitorDataCoincide) { + if (monitorDataCoincide.hasOwnProperty(prop)) { + for (var key in sensorsMap) { + if (prop == key) { + var prop1 = sensorsMap[key]; + } + } + winfowText1 += ("<p style='height: 22px;line-height: 22px'>" + prop1 + "���" + monitorDataCoincide[prop] + "</p>"); + } + } + winfowText1 += '<h3 style="background-color: #66CD00;color:white;margin-bottom: 1px">������������������</h3>'; + for (var prop in flyingDataCoincide) { + if (flyingDataCoincide.hasOwnProperty(prop)) { + for (var key in sensorsMap) { + if (prop == key) { + var prop1 = sensorsMap[key]; + } + } + winfowText1 += ("<p style='height: 22px;line-height: 22px'>" + prop1 + "���" + flyingDataCoincide[prop] + "</p>"); + } + } + winfowText1 += "</div>"; + var optsCoincideChild = { + width: 250, + title: '<h3>���������' + sensorInfo[e.id].time + '</h3>', // ������������������ + enableMessage: false, //��������������������������������� + } + var infoWindow1 = new BMap.InfoWindow(winfowText1, optsCoincideChild); + //������������������ + map.openInfoWindow(infoWindow1, point); + } + + map.addOverlay(marker); + + function red(x) { + document.getElementById(x).style.color = "#FF1111"; + document.getElementById(x).style.cursor = "pointer"; + } + + function black(x) { + if (list.length > 0) { + if (list.indexOf(x) == -1) { + document.getElementById(x).style.color = "#000000"; + } else { + document.getElementById(x).style.color = "blue"; + } + } else { + document.getElementById(x).style.color = "#000000"; + } + } + + function openInfoWindow() { + map.openInfoWindow.apply(map, arguments); //������������������ + } + + function monitorDataSort(sensorMap, monitorData, monitorParameters) { + for (var j = 0; j < monitorParameters.length; j++) { + $.map(sensorMap, function (value, key) { + if (monitorParameters[j] == key) { + monitorData[key] = sensorMap[key]; + } + }); + } + return monitorData; + } + + function flyingDataSort(sensorMap, flyingData, flyingParameters) { + for (var k = 0; k < flyingParameters.length; k++) { + $.map(sensorMap, function (value, key) { + if (flyingParameters[k] == key) { + flyingData[key] = sensorMap[key]; + } + }); + } + return flyingData; + } + + function moveChangeColor(e) { + $("#" + e.id).css('backgroundColor', '#A49EF0'); + } + + function outChangeColor(e) { + $("#" + e.id).css('backgroundColor', '#7C73E9'); + } + + } + } + + function showNoTrajectory() { + var longitude = 120.987287; + var latitude = 31.391562; + var point = new BMap.Point(longitude, latitude); + map.centerAndZoom(point, 17); + setTimeout(function () { + document.getElementById("cpm").style.display = 'block'; + }, 250); + }; + +</script> diff --git a/src/main/webapp/view/uavtrajectory.jsp b/src/main/webapp/view/uavtrajectory.jsp index c25c5bb..c258a2e 100644 --- a/src/main/webapp/view/uavtrajectory.jsp +++ b/src/main/webapp/view/uavtrajectory.jsp @@ -457,13 +457,7 @@ if (list.indexOf(e.id) == -1) { list.push(e.id); } - var lona = parseFloat(sensorInfo[e.id].e76.substr(0, sensorInfo[e.id].e76.length - 1)); - var lata = parseFloat(sensorInfo[e.id].e77.substr(0, sensorInfo[e.id].e77.length - 1)); - var lona1 = GPS.gcj_encrypt(lata, lona).lon; - var lata1 = GPS.gcj_encrypt(lata, lona).lat; - var lona2 = GPS.bd_encrypt(lata1, lona1).lon; - var lata2 = GPS.bd_encrypt(lata1, lata1).lat; - var point = new BMap.Point(lona2, lata2); + var point = trackPoints[e.id]; var monitorDataCoincide = monitorDataSort(sensorInfo[e.id], monitorData, monitorParameters); var flyingDataCoincide = flyingDataSort(sensorInfo[e.id], flyingData, flyingParameters); var winfowText1 = -- Gitblit v1.8.0