add轨迹信息显示按秒级显示,update轨迹数据先从history表查询,update报表单位问题
9 files added
7 files modified
623 ■■■■■ changed files
src/main/java/com/moral/controller/ScreenController.java 48 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/mapper/HistoryMapper.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/impl/HistoryServiceImpl.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/impl/SensorServiceImpl.java 4 ●●●● patch | view | raw | blame | history
src/main/resources/mapper/HistoryMapper.xml 19 ●●●●● patch | view | raw | blame | history
src/main/webapp/img/aggregation0.png patch | view | raw | blame | history
src/main/webapp/img/aggregation1.png patch | view | raw | blame | history
src/main/webapp/img/aggregation2.png patch | view | raw | blame | history
src/main/webapp/img/aggregation3.png patch | view | raw | blame | history
src/main/webapp/img/ico0.png patch | view | raw | blame | history
src/main/webapp/img/ico1.png patch | view | raw | blame | history
src/main/webapp/img/ico2.png patch | view | raw | blame | history
src/main/webapp/img/ico3.png patch | view | raw | blame | history
src/main/webapp/view/cartrajectory.jsp 2 ●●● patch | view | raw | blame | history
src/main/webapp/view/trajectorydatashow.jsp 533 ●●●●● patch | view | raw | blame | history
src/main/webapp/view/uavtrajectory.jsp 8 ●●●● patch | view | raw | blame | history
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 = {
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);
}
src/main/java/com/moral/service/impl/HistoryServiceImpl.java
@@ -496,6 +496,8 @@
        }
        parameters.put("sensorKeys", sensorKeys);
        List<Map<String, Object>> listMap = null;
        listMap = historyMapper.listGetSensorData(parameters);
        if (CollectionUtils.isEmpty(listMap)) {
        listMap = historyMapper.getCarSensorData(parameters);
        if (CollectionUtils.isEmpty(listMap)) {
            if (year <= 2019) {
@@ -505,6 +507,7 @@
                listMap = historyMinutelyMapper.getSensorData2020(parameters);
            }
        }
        }
        List<List<Map<String, Object>>> listMaps = new ArrayList<>();
        List<Map<String, Object>> listMapAvg = new ArrayList<>();
        List<Map<String, Object>> listMapMin = new ArrayList<>();
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())) {
                        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 {
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>
src/main/webapp/img/aggregation0.png
src/main/webapp/img/aggregation1.png
src/main/webapp/img/aggregation2.png
src/main/webapp/img/aggregation3.png
src/main/webapp/img/ico0.png
src/main/webapp/img/ico1.png
src/main/webapp/img/ico2.png
src/main/webapp/img/ico3.png
src/main/webapp/view/cartrajectory.jsp
@@ -303,7 +303,7 @@
            }
            drowLine(map, trackPoints[i], trackPoints[i + 1], traceColor);//画线调用
            i = i + 1;
        }, 250);
        }, 20);
    }
    //添加起始图标
src/main/webapp/view/trajectorydatashow.jsp
New file
@@ -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>
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 =