<%@ page contentType="text/html;charset=UTF-8" language="java" %> 
 | 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
 | 
<%@page isELIgnored="false" %> 
 | 
  
 | 
<!DOCTYPE html> 
 | 
<html> 
 | 
<head> 
 | 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
 | 
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no"/> 
 | 
    <style type="text/css"> 
 | 
        body, html, #allmap { 
 | 
            width: 100%; 
 | 
            height: 100%; 
 | 
            overflow: hidden; 
 | 
            margin: 0; 
 | 
            font-family: "微软雅黑"; 
 | 
        } 
 | 
  
 | 
        #box { 
 | 
            width: 300px; 
 | 
            height: 400px; 
 | 
            top: 30px; 
 | 
            right: 30px; 
 | 
            position: absolute; 
 | 
            z-index: 1; 
 | 
            border: 2px solid red; 
 | 
            background-color: gainsboro; 
 | 
            opacity: 0.8; 
 | 
        } 
 | 
  
 | 
        #cpm, #cpm1 { 
 | 
            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: 14px; 
 | 
            line-height: 100px; 
 | 
            text-align: center; 
 | 
        } 
 | 
    </style> 
 | 
    <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> 
 | 
    <script type="text/javascript" src="/js/utils.js"></script> 
 | 
    <script type="text/javascript"> 
 | 
        if (typeof (JSON) == 'undefined') { 
 | 
            $.getScript("js/json2.js"); 
 | 
        } 
 | 
    </script> 
 | 
    <script type="text/javascript" src="/js/paging.js"></script> 
 | 
    <title>地图展示</title> 
 | 
</head> 
 | 
<body> 
 | 
<div id="cpm">该时间存在设备无风向数据,数据不能作为参考</div> 
 | 
<div id="cpm1">该时间在线设备小于两台,数据不能作为参考</div> 
 | 
<div id="allmap" style="z-index: 0"> 
 | 
</div> 
 | 
<div id="box"> 
 | 
    <p> 
 | 
        <img src="/img/wind_dir02.png" style="width: 30px;height: 45px;margin-left: 20px;"/> <span 
 | 
            style="position: relative;top: -9px;">  :风向(尖头向上代表正北方向)</span> 
 | 
    </p> 
 | 
    <p> 
 | 
        <img src="/img/arrows01.png" style="margin-left: 20px;transform:rotate(90deg);width: 30px;height: 60px;"/> <span 
 | 
            style="position: relative;top: -25px;">  :浓度由高到低</span> 
 | 
    </p> 
 | 
    <p> 
 | 
        <img src="/img/arrows02.png" style="width: 30px;height: 60px;margin-left: 20px;transform:rotate(90deg);"/> <span 
 | 
            style="position: relative;top: -25px;">  :浓度由低到高</span> 
 | 
    </p> 
 | 
  
 | 
    <p style="text-indent: 1em;line-height: 25px;color: red" id="alarm">浓度变化:<span id="diff"></span></br></br>    
 | 
        注:浓度变化为下风向因子浓度减去上风向因子浓度</p> 
 | 
</div> 
 | 
<div id="mapParams" style="display: none;"> 
 | 
    ${requestScope.params} 
 | 
</div> 
 | 
</body> 
 | 
  
 | 
</html> 
 | 
<script type="text/javascript"> 
 | 
    var hostAndPort = document.location.host; 
 | 
    // 百度地图API功能 
 | 
    var map = new BMap.Map("allmap", {minZoom: 14, maxZoom: 19});    // 创建Map实例 
 | 
    map.enableScrollWheelZoom(true);     //开启鼠标滚轮缩放 
 | 
    var params = $.parseJSON($("#mapParams").html()); 
 | 
    var longitude = params["longitudeCompany"]; 
 | 
    var latitude = params["latitudeCompany"]; 
 | 
    var point = new BMap.Point(longitude, latitude); 
 | 
    map.centerAndZoom(point, 18.5);  // 初始化地图,设置中心点坐标和地图级别 
 | 
    var devices = []; 
 | 
    var deviceList = params["deviceList"]; 
 | 
    var sensor = params["sensor"]; 
 | 
    var accountId = params["accountId"]; 
 | 
    var orgId = params["orgId"]; 
 | 
    var monitPointId = params["monitPointId"]; 
 | 
    var arrows=[]; 
 | 
    //添加地图类型控件 
 | 
    map.addControl(new BMap.MapTypeControl({ 
 | 
        mapTypes: [ 
 | 
            BMAP_HYBRID_MAP, 
 | 
            BMAP_NORMAL_MAP 
 | 
        ] 
 | 
    })); 
 | 
    map.setMapType(BMAP_HYBRID_MAP); 
 | 
    if (deviceList != null) { 
 | 
        if (deviceList.length > 1) { 
 | 
            for (var i = 0; i < deviceList.length; i++) { 
 | 
                var icon = new BMap.Icon("/img/ico00.png", new BMap.Size(48, 48)); 
 | 
                var mark = new BMap.Marker(new BMap.Point(deviceList[i].longitude, deviceList[i].latitude), {icon: icon}); 
 | 
                devices.push(new BMap.Point(deviceList[i].longitude, deviceList[i].latitude)); 
 | 
                map.addOverlay(mark); 
 | 
            } 
 | 
        } else { 
 | 
            var icon1 = new BMap.Icon("/img/ico00.png", new BMap.Size(48, 48)); 
 | 
            var mark1 = new BMap.Marker(new BMap.Point(deviceList.longitude, deviceList.latitude), {icon: icon1}); 
 | 
            devices.push(new BMap.Point(deviceList.longitude, deviceList.latitude)); 
 | 
            map.addOverlay(mark1); 
 | 
            $("#alarm").css("visibility", "hidden"); 
 | 
        } 
 | 
    } 
 | 
    var ws; 
 | 
    if (typeof (WebSocket) === "undefined") { 
 | 
        alert("您的浏览器不支持WebSocket"); 
 | 
    } else { 
 | 
        var p=0; 
 | 
        ws = new WebSocket('ws://' + hostAndPort + '/screen/webSocketNew/' + orgId + '&' + accountId + '&' + monitPointId+ '&' +p); 
 | 
        ws.onopen = function () { 
 | 
        }; 
 | 
  
 | 
        //获得消息事件 
 | 
        ws.onmessage = function (msg) { 
 | 
            // $("#searchParam").val(JSON.parse(msg.data)); 
 | 
            if(deviceList.length>=2){ 
 | 
                realTimeData(JSON.parse(JSON.parse(msg.data)), deviceList,monitPointId); 
 | 
            }else{ 
 | 
                if(deviceList.length==0){ 
 | 
                    $("#box").css("visibility","hidden"); 
 | 
                    document.getElementById("cpm").style.display = 'block'; 
 | 
                } 
 | 
                if(deviceList.length==1){ 
 | 
                    $("#box").css("visibility","hidden"); 
 | 
                    document.getElementById("cpm1").style.display = 'block'; 
 | 
                } 
 | 
  
 | 
            } 
 | 
  
 | 
            /*  if (moralMap.showSensors && typeof (moralMap.showSensors) == "function") { 
 | 
                  moralMap.showSensors(JSON.parse(JSON.parse(msg.data))); 
 | 
              }*/ 
 | 
        }; 
 | 
        window.onbeforeunload=function(e){ 
 | 
            e = window.event||e; 
 | 
  
 | 
            e.returnValue=("确定离开当前页面吗?"); 
 | 
            ws.onclose = function () { 
 | 
            }; 
 | 
            alert(1) 
 | 
        } 
 | 
        //关闭事件 
 | 
        /*ws.onclose = function () { 
 | 
        };*/ 
 | 
        //发生了错误事件 
 | 
        ws.onerror = function () { 
 | 
        }; 
 | 
    } 
 | 
  
 | 
    var marks = []; 
 | 
    function realTimeData(data, deviceList,monitPointId) { 
 | 
        for (var j = 0; j < marks.length; j++) { 
 | 
            map.removeOverlay(marks[j]); 
 | 
        } 
 | 
        var diffArr=[]; 
 | 
        for (var i = 0; i < deviceList.length; i++) { 
 | 
            var deviceInfo = data; 
 | 
            var mac = deviceInfo["mac"]; 
 | 
            if (mac == deviceList[i].mac) { 
 | 
                deviceList[i]["deviceInfo"] = deviceInfo; 
 | 
            } 
 | 
            } 
 | 
  
 | 
        for (var i = 0; i < deviceList.length; i++) { 
 | 
            for (var j = 0; j <deviceList.length ; j++) { 
 | 
                if (j != i) { 
 | 
                        var maps={}; 
 | 
                        var windNumj=deviceList[j]["deviceInfo"]["e23"]; 
 | 
                        var windNumi=deviceList[i]["deviceInfo"]["e23"]; 
 | 
                        var diff=windNumj-windNumi; 
 | 
                        if (diff > 180) { 
 | 
                            diff = 360 - diff; 
 | 
                        } 
 | 
                        maps["j"]=j; 
 | 
                        maps["i"]=i; 
 | 
                        maps["diff"]=Math.abs(diff); 
 | 
                        diffArr.push(maps); 
 | 
                } 
 | 
        } 
 | 
            var icon = new BMap.Icon("/img/wind_dir02.png", new BMap.Size(25, 25), {anchor: new BMap.Size(11, 21.5)}); 
 | 
            var mark = new BMap.Marker(new BMap.Point(deviceList[i].longitude, deviceList[i].latitude), {icon: icon}); 
 | 
            devices.push(new BMap.Point(deviceList[i].longitude, deviceList[i].latitude)); 
 | 
            var dirWind=0; 
 | 
            if (deviceList[i]["deviceInfo"]["e23"]<=180){ 
 | 
                dirWind=180+parseInt(deviceList[i]["deviceInfo"]["e23"]); 
 | 
            }else { 
 | 
                dirWind=deviceList[i]["deviceInfo"]["e23"].valueOf()-180 
 | 
            } 
 | 
            mark.setRotation(dirWind); 
 | 
            marks.push(mark); 
 | 
            map.addOverlay(mark); 
 | 
  
 | 
        } 
 | 
        var minIndex=0; 
 | 
        var minWindDir=0.0; 
 | 
        minWindDir=diffArr[0]["diff"]; 
 | 
        for (var i = 1; i <diffArr.length ; i++) { 
 | 
            if (minWindDir>diffArr[i]["diff"]){ 
 | 
                minWindDir=diffArr[i]["diff"]; 
 | 
                minIndex=i; 
 | 
            }else { 
 | 
                minIndex=minIndex; 
 | 
            } 
 | 
        } 
 | 
        var firstDevice=deviceList[diffArr[minIndex]["j"]]; 
 | 
        var secondDevice=deviceList[diffArr[minIndex]["i"]]; 
 | 
        var fNum=Number(firstDevice["deviceInfo"]["e23"]); 
 | 
        var sNum=Number(secondDevice["deviceInfo"]["e23"]); 
 | 
        var wind=0; 
 | 
        if(Math.abs(fNum-secondDevice)>180){ 
 | 
            wind=(fNum+sNum)/2+180; 
 | 
            if (wind>360){ 
 | 
                wind=wind-360; 
 | 
            } 
 | 
        }else { 
 | 
            wind=(fNum+sNum)/2 
 | 
        } 
 | 
        $.ajax({ 
 | 
            url: "/screen/chooseDevice", 
 | 
            type: "get", 
 | 
            dataType: "json", 
 | 
            data:{"wind":wind,"monitPointId":monitPointId}, 
 | 
            success: function (info) { 
 | 
                var locationList=info["locationList"]; 
 | 
                var preAngleDeviceString = info["preAngleDeviceString"]; 
 | 
  
 | 
                var preAngleDeviceList=""; 
 | 
                if (preAngleDeviceString!=0 &&preAngleDeviceString!=1){ 
 | 
                    var arrow=""; 
 | 
                    preAngleDeviceList=JSON.parse(preAngleDeviceString); 
 | 
  
 | 
                    var mac0=preAngleDeviceList[0]["mac"]; 
 | 
                    var mac1=preAngleDeviceList[1]["mac"]; 
 | 
                    for (var i = 0; i <deviceList.length ; i++) { 
 | 
                        if (mac0==deviceList[i]["mac"]){ 
 | 
                            preAngleDeviceList[0]["sensors"]=deviceList[i]["deviceInfo"]; 
 | 
                        }else if (mac1==deviceList[i]["mac"]){ 
 | 
                            preAngleDeviceList[1]["sensors"]=deviceList[i]["deviceInfo"]; 
 | 
                        }else { 
 | 
                            continue; 
 | 
                        } 
 | 
                    } 
 | 
                    var diff=preAngleDeviceList[0]["sensors"][sensor]-preAngleDeviceList[1]["sensors"][sensor]; 
 | 
                    var diffSensor=preAngleDeviceList[1]["sensors"][sensor]-preAngleDeviceList[0]["sensors"][sensor]; 
 | 
                    diffSensor=String(diffSensor).replace(/^(.*\..{4}).*$/,"$1"); 
 | 
                    connectionDoublePoint(diff,preAngleDeviceList,locationList,diffSensor); 
 | 
            }}} 
 | 
        ); 
 | 
  
 | 
    } 
 | 
function connectionDoublePoint(diff,preAngleDeviceList,locationList,diffSensor) { 
 | 
    for (var i = 0; i <arrows.length ; i++) { 
 | 
        map.removeOverlay(arrows[i]); 
 | 
    } 
 | 
    var info=""; 
 | 
    if (diff>0){ 
 | 
        info="厂区内无排放"; 
 | 
        var polyline = new BMap.Polyline([ 
 | 
            new BMap.Point(preAngleDeviceList[0].longitude, preAngleDeviceList[0].latitude), 
 | 
            new BMap.Point(locationList[0][0],locationList[0][1]) 
 | 
        ], {strokeColor:"red", strokeWeight:8, strokeOpacity:0.5});   //创建折线 
 | 
        map.addOverlay(polyline);   //增加折线 
 | 
        var polyline1 = new BMap.Polyline([ 
 | 
            new BMap.Point(locationList[0][0],locationList[0][1]), 
 | 
            new BMap.Point(locationList[1][0],locationList[1][1]) 
 | 
        ], {strokeColor:"Tomato", strokeWeight:8, strokeOpacity:0.5});   //创建折线 
 | 
        map.addOverlay(polyline1);   //增加折线 
 | 
        var polyline2 = new BMap.Polyline([ 
 | 
            new BMap.Point(locationList[1][0],locationList[1][1]), 
 | 
            new BMap.Point(locationList[2][0],locationList[2 ][1]) 
 | 
        ], {strokeColor:"Coral", strokeWeight:8, strokeOpacity:0.5});   //创建折线 
 | 
        map.addOverlay(polyline2);   //增加折线 
 | 
        var polyline3 = new BMap.Polyline([ 
 | 
            new BMap.Point(locationList[2][0],locationList[2][1]), 
 | 
            new BMap.Point(locationList[3][0],locationList[3][1]) 
 | 
        ], {strokeColor:"Orange", strokeWeight:8, strokeOpacity:0.5});   //创建折线 
 | 
        map.addOverlay(polyline3);   //增加折线 
 | 
        var polyline4 = new BMap.Polyline([ 
 | 
            new BMap.Point(locationList[3][0],locationList[3][1]), 
 | 
            new BMap.Point(locationList[4][0],locationList[4][1]) 
 | 
        ], {strokeColor:"Gold", strokeWeight:8, strokeOpacity:0.5});   //创建折线 
 | 
        map.addOverlay(polyline4);   //增加折线 
 | 
        var arrowLineList = new Array();//记录绘制的箭头线 
 | 
        arrows.push(polyline); 
 | 
        arrows.push(polyline1); 
 | 
        arrows.push(polyline2); 
 | 
        arrows.push(polyline3); 
 | 
        arrows.push(polyline4); 
 | 
        color="Gold"; 
 | 
        arrowLineList[arrowLineList.length] = addArrow(polyline4,30,Math.PI/7,color);//记录绘制的箭头线 
 | 
    } else { 
 | 
        info="厂区内有排放"; 
 | 
        var polyline = new BMap.Polyline([ 
 | 
            new BMap.Point(preAngleDeviceList[0].longitude, preAngleDeviceList[0].latitude), 
 | 
            new BMap.Point(locationList[0][0],locationList[0][1]) 
 | 
        ], {strokeColor:"Gold", strokeWeight:8, strokeOpacity:0.5});   //创建折线 
 | 
        map.addOverlay(polyline);   //增加折线 
 | 
        var polyline1 = new BMap.Polyline([ 
 | 
            new BMap.Point(locationList[0][0],locationList[0][1]), 
 | 
            new BMap.Point(locationList[1][0],locationList[1][1]) 
 | 
        ], {strokeColor:"Orange", strokeWeight:8, strokeOpacity:0.5});   //创建折线 
 | 
        map.addOverlay(polyline1);   //增加折线 
 | 
        var polyline2 = new BMap.Polyline([ 
 | 
            new BMap.Point(locationList[1][0],locationList[1][1]), 
 | 
            new BMap.Point(locationList[2][0],locationList[2 ][1]) 
 | 
        ], {strokeColor:"Coral", strokeWeight:8, strokeOpacity:0.5});   //创建折线 
 | 
        map.addOverlay(polyline2);   //增加折线 
 | 
        var polyline3 = new BMap.Polyline([ 
 | 
            new BMap.Point(locationList[2][0],locationList[2][1]), 
 | 
            new BMap.Point(locationList[3][0],locationList[3][1]) 
 | 
        ], {strokeColor:"Tomato", strokeWeight:8, strokeOpacity:0.5});   //创建折线 
 | 
        map.addOverlay(polyline3);   //增加折线 
 | 
        var polyline4 = new BMap.Polyline([ 
 | 
            new BMap.Point(locationList[3][0],locationList[3][1]), 
 | 
            new BMap.Point(locationList[4][0],locationList[4][1]) 
 | 
        ], {strokeColor:"red", strokeWeight:8, strokeOpacity:0.5});   //创建折线 
 | 
        map.addOverlay(polyline4);   //增加折线 
 | 
        arrows.push(polyline); 
 | 
        arrows.push(polyline1); 
 | 
        arrows.push(polyline2); 
 | 
        arrows.push(polyline3); 
 | 
        arrows.push(polyline4); 
 | 
        var arrowLineList = new Array();//记录绘制的箭头线 
 | 
        color="red"; 
 | 
        arrowLineList[arrowLineList.length] = addArrow(polyline4,28,Math.PI/7,color);//记录绘制的箭头线 
 | 
    } 
 | 
    $("#diff").html(diffSensor+" ("+info+")"); 
 | 
} 
 | 
    function addArrow(polyline, length, angleValue, color) { //绘制箭头的函数 
 | 
        var linePoint = polyline.getPath();//线的坐标串 
 | 
        var arrowCount = linePoint.length; 
 | 
        for (var i = 1; i < arrowCount; i++) { //在拐点处绘制箭头 
 | 
            var pixelStart = map.pointToPixel(linePoint[i - 1]); 
 | 
            var pixelEnd = map.pointToPixel(linePoint[i]); 
 | 
            var angle = angleValue;//箭头和主线的夹角 
 | 
            var r = length; // r/Math.sin(angle)代表箭头长度 
 | 
            var delta = 0; //主线斜率,垂直时无斜率 
 | 
            var param = 0; //代码简洁考虑 
 | 
            var pixelTemX, pixelTemY;//临时点坐标 
 | 
            var pixelX, pixelY, pixelX1, pixelY1;//箭头两个点 
 | 
            if (pixelEnd.x - pixelStart.x == 0) { //斜率不存在是时 
 | 
                pixelTemX = pixelEnd.x; 
 | 
                if (pixelEnd.y > pixelStart.y) { 
 | 
                    pixelTemY = pixelEnd.y - r; 
 | 
                } else { 
 | 
                    pixelTemY = pixelEnd.y + r; 
 | 
                } 
 | 
                //已知直角三角形两个点坐标及其中一个角,求另外一个点坐标算法 
 | 
                pixelX = pixelTemX - r * Math.tan(angle); 
 | 
                pixelX1 = pixelTemX + r * Math.tan(angle); 
 | 
                pixelY = pixelY1 = pixelTemY; 
 | 
            } else  //斜率存在时 
 | 
            { 
 | 
                delta = (pixelEnd.y - pixelStart.y) / (pixelEnd.x - pixelStart.x); 
 | 
                param = Math.sqrt(delta * delta + 1); 
 | 
  
 | 
                if ((pixelEnd.x - pixelStart.x) < 0) //第二、三象限 
 | 
                { 
 | 
                    pixelTemX = pixelEnd.x + r / param; 
 | 
                    pixelTemY = pixelEnd.y + delta * r / param; 
 | 
                } else//第一、四象限 
 | 
                { 
 | 
                    pixelTemX = pixelEnd.x - r / param; 
 | 
                    pixelTemY = pixelEnd.y - delta * r / param; 
 | 
                } 
 | 
                //已知直角三角形两个点坐标及其中一个角,求另外一个点坐标算法 
 | 
                pixelX = pixelTemX + Math.tan(angle) * r * delta / param; 
 | 
                pixelY = pixelTemY - Math.tan(angle) * r / param; 
 | 
  
 | 
                pixelX1 = pixelTemX - Math.tan(angle) * r * delta / param; 
 | 
                pixelY1 = pixelTemY + Math.tan(angle) * r / param; 
 | 
            } 
 | 
  
 | 
            var pointArrow = map.pixelToPoint(new BMap.Pixel(pixelX, pixelY)); 
 | 
            var pointArrow1 = map.pixelToPoint(new BMap.Pixel(pixelX1, pixelY1)); 
 | 
            arrow = new BMap.Polyline([ 
 | 
                pointArrow, 
 | 
                linePoint[i], 
 | 
                pointArrow1 
 | 
            ], {strokeColor: color, strokeWeight: 6, strokeOpacity: 0.5}); 
 | 
  
 | 
            arrows.push(arrow); 
 | 
            map.addOverlay(arrow); 
 | 
            return arrow; 
 | 
        } 
 | 
    } 
 | 
</script> 
 |