From b6b10b7d89092147ebd5ae1d3cc318205206ab8a Mon Sep 17 00:00:00 2001
From: jinpengyong <jpy123456>
Date: Fri, 18 Dec 2020 14:48:03 +0800
Subject: [PATCH] 走航车轨迹区域数据显示

---
 src/main/java/com/moral/service/impl/HistoryServiceImpl.java |   14 
 src/main/webapp/img/sensorLevel.png                          |    0 
 src/main/webapp/view/cartrajectoryNew.jsp                    |  566 +++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/moral/controller/ScreenController.java     |   44 ++++
 4 files changed, 616 insertions(+), 8 deletions(-)

diff --git a/src/main/java/com/moral/controller/ScreenController.java b/src/main/java/com/moral/controller/ScreenController.java
index 5521008..e34c786 100644
--- a/src/main/java/com/moral/controller/ScreenController.java
+++ b/src/main/java/com/moral/controller/ScreenController.java
@@ -1633,6 +1633,50 @@
         }
     }
 
+    @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();
+            msg.append(" param[0] mac:");
+            msg.append(mac);
+            log.warn(msg);
+            model.setViewName("403");
+            return model;
+        }
+    }
+
     @GetMapping("/trajectoryDataShow")
     @ApiOperation(value = "���������������", notes = "���������������")
     @ApiImplicitParams(value = {
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/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

--
Gitblit v1.8.0