From 21bc39e477ebf9421378aed76062e2be1f1e7f9e Mon Sep 17 00:00:00 2001
From: jinpengyong <jpy123456>
Date: Fri, 19 Jun 2020 10:26:30 +0800
Subject: [PATCH] 无人机落点,污染源通道,溯源应用

---
 src/main/webapp/view/uavtracing.jsp                          |  185 ++++++++++++
 src/main/java/com/moral/service/HistoryService.java          |    2 
 src/main/java/com/moral/service/impl/HistoryServiceImpl.java |  105 ++++--
 src/main/java/com/moral/mapper/HistoryMapper.java            |    2 
 src/main/webapp/img/uav_green.png                            |    0 
 src/main/resources/mapper/HistoryMapper.xml                  |   20 +
 src/main/webapp/img/uav_red.png                              |    0 
 src/main/webapp/view/uavchannel.jsp                          |  185 ++++++++++++
 src/main/webapp/view/uavdroppoint.jsp                        |  185 ++++++++++++
 src/main/java/com/moral/controller/ScreenController.java     |  158 ++++++++++
 10 files changed, 795 insertions(+), 47 deletions(-)

diff --git a/src/main/java/com/moral/controller/ScreenController.java b/src/main/java/com/moral/controller/ScreenController.java
index 23c06ea..d8ebe59 100644
--- a/src/main/java/com/moral/controller/ScreenController.java
+++ b/src/main/java/com/moral/controller/ScreenController.java
@@ -929,12 +929,12 @@
             }
         }
 
-        for (int i = 0; i <resultList.size() ; i++) {
+        for (int i = 0; i < resultList.size(); i++) {
             if (resultList.get(i) == null) {
                 Map<String, Object> hashMap = new HashMap<>();
-                if(type.equals("day")){
+                if (type.equals("day")) {
                     hashMap.put("time", i);
-                }else {
+                } else {
                     hashMap.put("time", i + 1);
                 }
                 hashMap.put(s, "");
@@ -961,15 +961,15 @@
                 ArrayList<String> values = new ArrayList<>();
                 values.add(map.remove(s).toString());
                 values.add("");
-                map.put("values",values);
+                map.put("values", values);
             }
         }
 
         Iterator<Map<String, Object>> it = resultList.iterator();
-        while(it.hasNext()){
+        while (it.hasNext()) {
             Map<String, Object> next = it.next();
-            ArrayList<String> values = (ArrayList<String>)next.get("values");
-            if(values.get(0).equals("")&&values.get(1).equals("")){
+            ArrayList<String> values = (ArrayList<String>) next.get("values");
+            if (values.get(0).equals("") && values.get(1).equals("")) {
                 it.remove();
             }
         }
@@ -1635,4 +1635,148 @@
             return model;
         }
     }
+
+    @GetMapping("/uavDroppoint")
+    @ApiOperation(value = "���������������������", notes = "���������������������")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "mac", value = "������mac������������p5dnd7a0392068���", required = true, paramType = "query", dataType = "String"),
+            @ApiImplicitParam(name = "sensorKey", value = "���������key", required = true, paramType = "query", dataType = "String"),
+            @ApiImplicitParam(name = "startTime", value = "������������(���������2019-07-17-17)", required = true, paramType = "query", dataType = "String"),
+            @ApiImplicitParam(name = "endTime", value = "������������(���������2019-07-17-18)", required = true, paramType = "query", dataType = "String")
+    })
+    public ModelAndView uavDroppoint(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<Map<String, Object>> sensorData = historyService.getUavSensorData(parameters);
+            Map<String, String> sensorsMap = sensorService.getSensorsMap(parameters);
+            JSONObject params = new JSONObject();
+            params.put("sensorInfo", sensorData);
+            params.put("sensorsMap", sensorsMap);
+            params.put("sensorKey",parameters.get("sensorKey"));
+            params.put("unit",parameters.get("unit"));
+            params.put("description",parameters.get("description"));
+            String paramsJson = params.toJSONString();
+            model.addObject("uavDroppointParams", paramsJson);
+            model.setViewName("uavdroppoint");
+            return model;
+        } else {
+            StringBuilder msg = new StringBuilder();
+            msg.append(" param[0] mac:");
+            msg.append(mac);
+            log.warn(msg);
+            model.setViewName("403");
+            return model;
+        }
+    }
+
+    @GetMapping("/uavChannel")
+    @ApiOperation(value = "������������������������������", notes = "������������������������������")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "mac", value = "������mac������������p5dnd7a0392068���", required = true, paramType = "query", dataType = "String"),
+            @ApiImplicitParam(name = "sensorKey", value = "���������key", required = true, paramType = "query", dataType = "String"),
+            @ApiImplicitParam(name = "startTime", value = "������������(���������2019-07-17-17)", required = true, paramType = "query", dataType = "String"),
+            @ApiImplicitParam(name = "endTime", value = "������������(���������2019-07-17-18)", required = true, paramType = "query", dataType = "String")
+    })
+    public ModelAndView uavChannel(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<Map<String, Object>> sensorData = historyService.getUavSensorData(parameters);
+            Map<String, String> sensorsMap = sensorService.getSensorsMap(parameters);
+            JSONObject params = new JSONObject();
+            params.put("sensorInfo", sensorData);
+            params.put("sensorsMap", sensorsMap);
+            params.put("sensorKey",parameters.get("sensorKey"));
+            params.put("unit",parameters.get("unit"));
+            params.put("description",parameters.get("description"));
+            String paramsJson = params.toJSONString();
+            model.addObject("uavDroppointParams", paramsJson);
+            model.setViewName("uavchannel");
+            return model;
+        } else {
+            StringBuilder msg = new StringBuilder();
+            msg.append(" param[0] mac:");
+            msg.append(mac);
+            log.warn(msg);
+            model.setViewName("403");
+            return model;
+        }
+    }
+
+    @GetMapping("/uavTracing")
+    @ApiOperation(value = "���������������������", notes = "���������������������")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "mac", value = "������mac������������p5dnd7a0392068���", required = true, paramType = "query", dataType = "String"),
+            @ApiImplicitParam(name = "sensorKey", value = "���������key", required = true, paramType = "query", dataType = "String"),
+            @ApiImplicitParam(name = "startTime", value = "������������(���������2019-07-17-17)", required = true, paramType = "query", dataType = "String"),
+            @ApiImplicitParam(name = "endTime", value = "������������(���������2019-07-17-18)", required = true, paramType = "query", dataType = "String")
+    })
+    public ModelAndView uavTracing(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<Map<String, Object>> sensorData = historyService.getUavSensorData(parameters);
+            Map<String, String> sensorsMap = sensorService.getSensorsMap(parameters);
+            JSONObject params = new JSONObject();
+            params.put("sensorInfo", sensorData);
+            params.put("sensorsMap", sensorsMap);
+            params.put("sensorKey",parameters.get("sensorKey"));
+            params.put("unit",parameters.get("unit"));
+            params.put("description",parameters.get("description"));
+            String paramsJson = params.toJSONString();
+            model.addObject("uavDroppointParams", paramsJson);
+            model.setViewName("uavtracing");
+            return model;
+        } else {
+            StringBuilder msg = new StringBuilder();
+            msg.append(" param[0] mac:");
+            msg.append(mac);
+            log.warn(msg);
+            model.setViewName("403");
+            return model;
+        }
+    }
 }
diff --git a/src/main/java/com/moral/mapper/HistoryMapper.java b/src/main/java/com/moral/mapper/HistoryMapper.java
index 404b31f..fdfc45b 100644
--- a/src/main/java/com/moral/mapper/HistoryMapper.java
+++ b/src/main/java/com/moral/mapper/HistoryMapper.java
@@ -30,6 +30,8 @@
 
     List<Map<String, Object>> getCarSensorData(Map<String, Object> parameters);
 
+	List<Map<String, Object>> getUavSensorData(Map<String, Object> parameters);
+
     List<Map<String, Object>> listGetSensorData(Map<String, Object> parameters);
 
 	//���������������������������
diff --git a/src/main/java/com/moral/service/HistoryService.java b/src/main/java/com/moral/service/HistoryService.java
index ea12763..2ab5e0e 100644
--- a/src/main/java/com/moral/service/HistoryService.java
+++ b/src/main/java/com/moral/service/HistoryService.java
@@ -31,6 +31,8 @@
 
     List<List<Map<String, Object>>> getCarSensorData(Map<String, Object> parameters) throws Exception;
 
+	List<Map<String, Object>> getUavSensorData(Map<String, Object> parameters);
+
     //������������������������������
 	List<Map<String, Object>> getO3AVG(Map<String, Object> parameters);
 
diff --git a/src/main/java/com/moral/service/impl/HistoryServiceImpl.java b/src/main/java/com/moral/service/impl/HistoryServiceImpl.java
index 53fa49d..39a6e46 100644
--- a/src/main/java/com/moral/service/impl/HistoryServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/HistoryServiceImpl.java
@@ -34,8 +34,8 @@
 import com.moral.service.HistoryService;
 import com.moral.service.ProfessionService;
 import com.moral.util.AQICalculation;
-
 import com.moral.util.DatesUtil;
+
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
@@ -543,10 +543,34 @@
     }
 
     @Override
-    public List<Map<String,Object>> getO3AVG(Map<String, Object> parameters) {
-        String mac= (String) parameters.get("mac");
-        String stime= (String) parameters.get("time");
-        SimpleDateFormat format=new SimpleDateFormat("yyyy-MM");
+    public List<Map<String, Object>> getUavSensorData(Map<String, Object> parameters) {
+        List<Sensor> sensors = sensorMapper.getSensorsByMac(parameters);
+        List<String> sensorKeys = new ArrayList<>();
+        for (Sensor sensor : sensors) {
+            sensorKeys.add(sensor.getSensorKey());
+        }
+        parameters.put("sensorKeys", sensorKeys);
+        List<Map<String, Object>> uavSensorData = historyMapper.getUavSensorData(parameters);
+        for (Map<String, Object> dataMap : uavSensorData) {
+            for (Map.Entry<String, Object> entry : dataMap.entrySet()) {
+                for (Sensor sensor : sensors) {
+                    if (sensor.getSensorKey().equals(entry.getKey())) {
+                        dataMap.put(entry.getKey(), new BigDecimal(entry.getValue().toString().replace("\"", "")).stripTrailingZeros().toPlainString() + sensor.getUnit());
+                    }
+                }
+            }
+        }
+        Map<String, Object> map = sensorMapper.getSensorBySensorKey(parameters.get("sensorKey").toString());
+        parameters.put("unit",map.get("unit"));
+        parameters.put("description",map.get("description"));
+        return uavSensorData;
+    }
+
+    @Override
+    public List<Map<String, Object>> getO3AVG(Map<String, Object> parameters) {
+        String mac = (String) parameters.get("mac");
+        String stime = (String) parameters.get("time");
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
         Date time = null;
         try {
             time = format.parse(stime);
@@ -554,7 +578,7 @@
             e.printStackTrace();
         }
         List<String> stringListDate = DatesUtil.getAllTheDateOftheMonth(time);
-        List<Map<String,Object>> maxList=new ArrayList<Map<String,Object>>();
+        List<Map<String, Object>> maxList = new ArrayList<Map<String, Object>>();
         for (String date : stringListDate) {
             Map<String, Object> parm = new HashMap<String, Object>();
             DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
@@ -566,53 +590,54 @@
             parm.put("nextDate", nextDate);
             parm.put("mac", mac);
             List<Map<String, Object>> listMap = historyMapper.getO3AVG(parm);
-            List list=new ArrayList();
-            DatesUtil.getList(listMap,list);
-            List list1=new ArrayList();
-            String maxO3="";
-            for (int i = 0; i <list.size() ; i++) {
-                List elist=new ArrayList();
-                Double sum=0.0;
-                Double avg=0.0;
-                for (Object o : (List)list.get(i)) {
-                    Iterator<Map.Entry> iterator= ((Map)o).entrySet().iterator();
-                    while(iterator.hasNext()) {
+            List list = new ArrayList();
+            DatesUtil.getList(listMap, list);
+            List list1 = new ArrayList();
+            String maxO3 = "";
+            for (int i = 0; i < list.size(); i++) {
+                List elist = new ArrayList();
+                Double sum = 0.0;
+                Double avg = 0.0;
+                for (Object o : (List) list.get(i)) {
+                    Iterator<Map.Entry> iterator = ((Map) o).entrySet().iterator();
+                    while (iterator.hasNext()) {
                         Map.Entry entry = iterator.next();
-                        if (entry.getKey().equals("e15")){
+                        if (entry.getKey().equals("e15")) {
                             elist.add(entry.getValue());
                         }
                     }
                 }
-                for (int j = 0; j <elist.size(); j++) {
-                    sum+=Double.parseDouble((String) elist.get(j));
-                    if (listMap.size()<=8 && listMap.size()>0){
-                        avg=sum/listMap.size();
-                    }else {
-                        avg=sum/8;
+                for (int j = 0; j < elist.size(); j++) {
+                    sum += Double.parseDouble((String) elist.get(j));
+                    if (listMap.size() <= 8 && listMap.size() > 0) {
+                        avg = sum / listMap.size();
+                    } else {
+                        avg = sum / 8;
                     }
                 }
-                if (avg==0.0){
+                if (avg == 0.0) {
                     list1.add("");
-                }else {
+                } else {
                     BigDecimal b = new BigDecimal(avg);
-                    double avg1 = b.setScale(4,BigDecimal.ROUND_HALF_UP).doubleValue();
+                    double avg1 = b.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue();
                     list1.add(avg1);
                 }
             }
-            String timef=date+" 00:00:00";
-            String timea=date+" 23:59:59";
-            int num=historyMapper.getNum(timef,timea);
-            if (num==0) {
+            String timef = date + " 00:00:00";
+            String timea = date + " 23:59:59";
+            int num = historyMapper.getNum(timef, timea);
+            if (num == 0) {
                 maxO3 = "";
-            }else {
-            if (list1.size()!=0){
-                maxO3= ""+ Collections.max(list1);
-            }else {
-                maxO3="";
-            }}
-            Map<String,Object>  avgMap=new HashMap<String,Object>();
-            avgMap.put("time",date);
-            avgMap.put("e15",maxO3);
+            } else {
+                if (list1.size() != 0) {
+                    maxO3 = "" + Collections.max(list1);
+                } else {
+                    maxO3 = "";
+                }
+            }
+            Map<String, Object> avgMap = new HashMap<String, Object>();
+            avgMap.put("time", date);
+            avgMap.put("e15", maxO3);
             maxList.add(avgMap);
         }
         return maxList;
diff --git a/src/main/resources/mapper/HistoryMapper.xml b/src/main/resources/mapper/HistoryMapper.xml
index 0ab705d..05c8a4c 100644
--- a/src/main/resources/mapper/HistoryMapper.xml
+++ b/src/main/resources/mapper/HistoryMapper.xml
@@ -236,6 +236,26 @@
         h.time
     </select>
 
+    <!-- ��������������� -->
+    <select id="getUavSensorData" 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_special 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>
+
     <select id="listGetSensorData" resultType="java.util.LinkedHashMap">
         SELECT
         DATE_FORMAT(h.time,'%Y-%m-%d %H:%i:%s') time,
diff --git a/src/main/webapp/img/uav_green.png b/src/main/webapp/img/uav_green.png
new file mode 100644
index 0000000..1deaba4
--- /dev/null
+++ b/src/main/webapp/img/uav_green.png
Binary files differ
diff --git a/src/main/webapp/img/uav_red.png b/src/main/webapp/img/uav_red.png
new file mode 100644
index 0000000..8f4a2fb
--- /dev/null
+++ b/src/main/webapp/img/uav_red.png
Binary files differ
diff --git a/src/main/webapp/view/uavchannel.jsp b/src/main/webapp/view/uavchannel.jsp
new file mode 100644
index 0000000..fe7a19f
--- /dev/null
+++ b/src/main/webapp/view/uavchannel.jsp
@@ -0,0 +1,185 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
+<!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"/>
+    <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;
+        }
+
+        #data {
+            overflow: scroll;
+            width: 300px;
+            height: 400px;
+            top: 20px;
+            right: 5px;
+            position: absolute;
+            z-index: 1;
+            background-color: gainsboro;
+            opacity: 0.8;
+            border: 2px solid red;
+        }
+
+        .trr {
+            border-collapse: collapse;
+        }
+
+        .trr th, td {
+            border: 1px solid black;
+            text-align: center;
+        }
+
+        table {
+            border-collapse: collapse;
+            font-size: 12px;
+        }
+    </style>
+    <script type="text/javascript"
+            src="http://api.map.baidu.com/api?v=2.0&ak=dmzBXk6VTBG1SKUvqSSEgGBU8HcuoajQ"></script>
+    <script type="text/javascript" src="../js/jquery.min.js"></script>
+</head>
+<body>
+
+<div id="data">
+    <%--������������������--%>
+    <table id="tab" style="border:1px solid black;width: 280px">
+    </table>
+</div>
+<div class="main_body">
+    <div id="cpm">������������</div>
+    <div id="mapCanvas"></div> <!-- ������������������-->
+    <!-- ���sensorInfo,regionCode,regionName,monitorPoint,device-->
+    <div id="uavDroppointParams" style="display: none;">
+        ${requestScope.uavDroppointParams}
+    </div>
+</div>
+</body>
+</html>
+<script type="text/javascript">
+    var mapStyle = {
+        features: ["road", "building", "water", "land"], // ������������������poi
+        style: "normal" // ������������������������������
+    };
+    var params = $.parseJSON($("#uavDroppointParams").html());
+    var sensorInfo = params["sensorInfo"];
+    var sensorKey = params['sensorKey'];
+    var unit = params['unit'];
+    var description=params['description'];
+    var backgroundValue=32;
+    $("#tab").append("<tr><td>������(��)</td><td>������(��)</td><td>������(m)</td><td>"+description+"(" + unit + ")</td></tr>");//���������������������������
+    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) {
+        showNoDroppoint();
+    }
+    var trackPoints = []; //���������������������������������������������������������������
+    if (sensorInfo.length > 0) {
+        $.each(sensorInfo, function (item, value) {
+                if (typeof (value.e76) == "undefined" || typeof (value.e78) == "undefined") {
+                    showNoDroppoint();
+                } else {
+                    var lon = parseFloat(value.e76.substr(0, value.e76.length - 1)).toFixed(4);
+                    var lat = parseFloat(value.e77.substr(0, value.e77.length - 1)).toFixed(4);
+                    if (lon <= 0 || lat <= 0 || lon > 180 || lat > 180) {
+                        return true;
+                    }
+                    var heigh = parseFloat(value.e78.substr(0, value.e78.length - 1));
+                    var concentration = "";
+                    $.each(value, function (key, data) {
+                        if (key == sensorKey) {
+                            concentration = data == "undefined" ? "" : parseFloat(data.substr(0, data.length - 1));
+                        }
+                    });
+                    var point = new BMap.Point(lon, lat);
+                    var myIcon = "";
+                     if (concentration > backgroundValue) {
+                         myIcon = new BMap.Icon('/img/uav_red.png', new BMap.Size(20, 20));
+                     } else if (concentration == backgroundValue) {
+                         myIcon = new BMap.Icon('/img/uav_green.png', new BMap.Size(20, 20));
+                     } else {
+                         return true;
+                     }
+                    //var myIcon = new BMap.Icon('/img/uav_red.png', new BMap.Size(20, 20));
+                    var marker = new BMap.Marker(point, {icon: myIcon});
+                    map.addOverlay(marker);
+                    trackPoints.push(point);
+                    $("#tab").append("<tr><td>" + lon + "</td><td>" + lat + "</td><td>" + heigh + "</td><td>" + concentration + "</td></tr>");//���������������������������
+                    var opts = {
+                        width: 80,     // ������������������
+                        height: 80,     // ������������������
+                    }
+                    var msg = "��������� " + value.e76 + "<br>��������� " + value.e77 + "<br>��������� " + value.e78 + "<br>" +description+":  "+concentration+unit;
+                    if (concentration == "") {
+                        msg = "��������� " + value.e76 + "<br>��������� " + value.e77 + "<br>��������� " + value.e78;
+                    }
+                    var infoWindow = new BMap.InfoWindow(msg, opts);  // ������������������������
+                    marker.addEventListener("click", function () {
+                        map.openInfoWindow(infoWindow, point); //������������������
+                    });
+                }
+            }
+        )
+        map.centerAndZoom(trackPoints, 17);// ������������������������������������
+        map.setViewport(trackPoints);// ������������������������������������������������������
+    }
+
+    function showNoDroppoint() {
+        var point = new BMap.Point(120.987287, 31.391562);
+        map.centerAndZoom(point, 17);
+        setTimeout(function () {
+            document.getElementById("cpm").style.display = 'block';
+            document.getElementById("data").style.display = 'none';
+        }, 250);
+    }
+</script>
diff --git a/src/main/webapp/view/uavdroppoint.jsp b/src/main/webapp/view/uavdroppoint.jsp
new file mode 100644
index 0000000..fe7a19f
--- /dev/null
+++ b/src/main/webapp/view/uavdroppoint.jsp
@@ -0,0 +1,185 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
+<!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"/>
+    <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;
+        }
+
+        #data {
+            overflow: scroll;
+            width: 300px;
+            height: 400px;
+            top: 20px;
+            right: 5px;
+            position: absolute;
+            z-index: 1;
+            background-color: gainsboro;
+            opacity: 0.8;
+            border: 2px solid red;
+        }
+
+        .trr {
+            border-collapse: collapse;
+        }
+
+        .trr th, td {
+            border: 1px solid black;
+            text-align: center;
+        }
+
+        table {
+            border-collapse: collapse;
+            font-size: 12px;
+        }
+    </style>
+    <script type="text/javascript"
+            src="http://api.map.baidu.com/api?v=2.0&ak=dmzBXk6VTBG1SKUvqSSEgGBU8HcuoajQ"></script>
+    <script type="text/javascript" src="../js/jquery.min.js"></script>
+</head>
+<body>
+
+<div id="data">
+    <%--������������������--%>
+    <table id="tab" style="border:1px solid black;width: 280px">
+    </table>
+</div>
+<div class="main_body">
+    <div id="cpm">������������</div>
+    <div id="mapCanvas"></div> <!-- ������������������-->
+    <!-- ���sensorInfo,regionCode,regionName,monitorPoint,device-->
+    <div id="uavDroppointParams" style="display: none;">
+        ${requestScope.uavDroppointParams}
+    </div>
+</div>
+</body>
+</html>
+<script type="text/javascript">
+    var mapStyle = {
+        features: ["road", "building", "water", "land"], // ������������������poi
+        style: "normal" // ������������������������������
+    };
+    var params = $.parseJSON($("#uavDroppointParams").html());
+    var sensorInfo = params["sensorInfo"];
+    var sensorKey = params['sensorKey'];
+    var unit = params['unit'];
+    var description=params['description'];
+    var backgroundValue=32;
+    $("#tab").append("<tr><td>������(��)</td><td>������(��)</td><td>������(m)</td><td>"+description+"(" + unit + ")</td></tr>");//���������������������������
+    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) {
+        showNoDroppoint();
+    }
+    var trackPoints = []; //���������������������������������������������������������������
+    if (sensorInfo.length > 0) {
+        $.each(sensorInfo, function (item, value) {
+                if (typeof (value.e76) == "undefined" || typeof (value.e78) == "undefined") {
+                    showNoDroppoint();
+                } else {
+                    var lon = parseFloat(value.e76.substr(0, value.e76.length - 1)).toFixed(4);
+                    var lat = parseFloat(value.e77.substr(0, value.e77.length - 1)).toFixed(4);
+                    if (lon <= 0 || lat <= 0 || lon > 180 || lat > 180) {
+                        return true;
+                    }
+                    var heigh = parseFloat(value.e78.substr(0, value.e78.length - 1));
+                    var concentration = "";
+                    $.each(value, function (key, data) {
+                        if (key == sensorKey) {
+                            concentration = data == "undefined" ? "" : parseFloat(data.substr(0, data.length - 1));
+                        }
+                    });
+                    var point = new BMap.Point(lon, lat);
+                    var myIcon = "";
+                     if (concentration > backgroundValue) {
+                         myIcon = new BMap.Icon('/img/uav_red.png', new BMap.Size(20, 20));
+                     } else if (concentration == backgroundValue) {
+                         myIcon = new BMap.Icon('/img/uav_green.png', new BMap.Size(20, 20));
+                     } else {
+                         return true;
+                     }
+                    //var myIcon = new BMap.Icon('/img/uav_red.png', new BMap.Size(20, 20));
+                    var marker = new BMap.Marker(point, {icon: myIcon});
+                    map.addOverlay(marker);
+                    trackPoints.push(point);
+                    $("#tab").append("<tr><td>" + lon + "</td><td>" + lat + "</td><td>" + heigh + "</td><td>" + concentration + "</td></tr>");//���������������������������
+                    var opts = {
+                        width: 80,     // ������������������
+                        height: 80,     // ������������������
+                    }
+                    var msg = "��������� " + value.e76 + "<br>��������� " + value.e77 + "<br>��������� " + value.e78 + "<br>" +description+":  "+concentration+unit;
+                    if (concentration == "") {
+                        msg = "��������� " + value.e76 + "<br>��������� " + value.e77 + "<br>��������� " + value.e78;
+                    }
+                    var infoWindow = new BMap.InfoWindow(msg, opts);  // ������������������������
+                    marker.addEventListener("click", function () {
+                        map.openInfoWindow(infoWindow, point); //������������������
+                    });
+                }
+            }
+        )
+        map.centerAndZoom(trackPoints, 17);// ������������������������������������
+        map.setViewport(trackPoints);// ������������������������������������������������������
+    }
+
+    function showNoDroppoint() {
+        var point = new BMap.Point(120.987287, 31.391562);
+        map.centerAndZoom(point, 17);
+        setTimeout(function () {
+            document.getElementById("cpm").style.display = 'block';
+            document.getElementById("data").style.display = 'none';
+        }, 250);
+    }
+</script>
diff --git a/src/main/webapp/view/uavtracing.jsp b/src/main/webapp/view/uavtracing.jsp
new file mode 100644
index 0000000..fe7a19f
--- /dev/null
+++ b/src/main/webapp/view/uavtracing.jsp
@@ -0,0 +1,185 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
+<!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"/>
+    <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;
+        }
+
+        #data {
+            overflow: scroll;
+            width: 300px;
+            height: 400px;
+            top: 20px;
+            right: 5px;
+            position: absolute;
+            z-index: 1;
+            background-color: gainsboro;
+            opacity: 0.8;
+            border: 2px solid red;
+        }
+
+        .trr {
+            border-collapse: collapse;
+        }
+
+        .trr th, td {
+            border: 1px solid black;
+            text-align: center;
+        }
+
+        table {
+            border-collapse: collapse;
+            font-size: 12px;
+        }
+    </style>
+    <script type="text/javascript"
+            src="http://api.map.baidu.com/api?v=2.0&ak=dmzBXk6VTBG1SKUvqSSEgGBU8HcuoajQ"></script>
+    <script type="text/javascript" src="../js/jquery.min.js"></script>
+</head>
+<body>
+
+<div id="data">
+    <%--������������������--%>
+    <table id="tab" style="border:1px solid black;width: 280px">
+    </table>
+</div>
+<div class="main_body">
+    <div id="cpm">������������</div>
+    <div id="mapCanvas"></div> <!-- ������������������-->
+    <!-- ���sensorInfo,regionCode,regionName,monitorPoint,device-->
+    <div id="uavDroppointParams" style="display: none;">
+        ${requestScope.uavDroppointParams}
+    </div>
+</div>
+</body>
+</html>
+<script type="text/javascript">
+    var mapStyle = {
+        features: ["road", "building", "water", "land"], // ������������������poi
+        style: "normal" // ������������������������������
+    };
+    var params = $.parseJSON($("#uavDroppointParams").html());
+    var sensorInfo = params["sensorInfo"];
+    var sensorKey = params['sensorKey'];
+    var unit = params['unit'];
+    var description=params['description'];
+    var backgroundValue=32;
+    $("#tab").append("<tr><td>������(��)</td><td>������(��)</td><td>������(m)</td><td>"+description+"(" + unit + ")</td></tr>");//���������������������������
+    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) {
+        showNoDroppoint();
+    }
+    var trackPoints = []; //���������������������������������������������������������������
+    if (sensorInfo.length > 0) {
+        $.each(sensorInfo, function (item, value) {
+                if (typeof (value.e76) == "undefined" || typeof (value.e78) == "undefined") {
+                    showNoDroppoint();
+                } else {
+                    var lon = parseFloat(value.e76.substr(0, value.e76.length - 1)).toFixed(4);
+                    var lat = parseFloat(value.e77.substr(0, value.e77.length - 1)).toFixed(4);
+                    if (lon <= 0 || lat <= 0 || lon > 180 || lat > 180) {
+                        return true;
+                    }
+                    var heigh = parseFloat(value.e78.substr(0, value.e78.length - 1));
+                    var concentration = "";
+                    $.each(value, function (key, data) {
+                        if (key == sensorKey) {
+                            concentration = data == "undefined" ? "" : parseFloat(data.substr(0, data.length - 1));
+                        }
+                    });
+                    var point = new BMap.Point(lon, lat);
+                    var myIcon = "";
+                     if (concentration > backgroundValue) {
+                         myIcon = new BMap.Icon('/img/uav_red.png', new BMap.Size(20, 20));
+                     } else if (concentration == backgroundValue) {
+                         myIcon = new BMap.Icon('/img/uav_green.png', new BMap.Size(20, 20));
+                     } else {
+                         return true;
+                     }
+                    //var myIcon = new BMap.Icon('/img/uav_red.png', new BMap.Size(20, 20));
+                    var marker = new BMap.Marker(point, {icon: myIcon});
+                    map.addOverlay(marker);
+                    trackPoints.push(point);
+                    $("#tab").append("<tr><td>" + lon + "</td><td>" + lat + "</td><td>" + heigh + "</td><td>" + concentration + "</td></tr>");//���������������������������
+                    var opts = {
+                        width: 80,     // ������������������
+                        height: 80,     // ������������������
+                    }
+                    var msg = "��������� " + value.e76 + "<br>��������� " + value.e77 + "<br>��������� " + value.e78 + "<br>" +description+":  "+concentration+unit;
+                    if (concentration == "") {
+                        msg = "��������� " + value.e76 + "<br>��������� " + value.e77 + "<br>��������� " + value.e78;
+                    }
+                    var infoWindow = new BMap.InfoWindow(msg, opts);  // ������������������������
+                    marker.addEventListener("click", function () {
+                        map.openInfoWindow(infoWindow, point); //������������������
+                    });
+                }
+            }
+        )
+        map.centerAndZoom(trackPoints, 17);// ������������������������������������
+        map.setViewport(trackPoints);// ������������������������������������������������������
+    }
+
+    function showNoDroppoint() {
+        var point = new BMap.Point(120.987287, 31.391562);
+        map.centerAndZoom(point, 17);
+        setTimeout(function () {
+            document.getElementById("cpm").style.display = 'block';
+            document.getElementById("data").style.display = 'none';
+        }, 250);
+    }
+</script>

--
Gitblit v1.8.0