ZhuDongming
2019-11-20 f32e22e52376cabe49e8c7d1f52adb4b1aebffd3
src/main/webapp/view/pollutionsource.jsp
@@ -79,10 +79,51 @@
        top: 35px !important;
        border-radius: 5px;
    }
    #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;
    }
    #show {
        position: absolute;
        z-index: 1;
        top: 30px;
        right: 50px;
        display: inline-block;
        width: 100px;
        height: 40px;
        border-width: 0px;
        border-radius: 3px;
        background: #6495ED;
        cursor: pointer;
        outline: none;
        color: white;
        font-size: 20px;
    }
    #show:hover {
        background: #5CACEE;
    }
</style>
<body>
<div class="main_body">
    <input type="button" id="show" value="溯源运算"/>
    <div id="cpm"></div>
    <div id="mapCanvas"></div> <!-- 百度地图 -->
    <!-- 传sensorInfo,regionCode,regionName,monitorPoint,device-->
    <div id="pollutionSourceParams" style="display: none;">
@@ -99,14 +140,11 @@
        style: "normal" // 设置地图风格为高端黑
    };
    var params = $.parseJSON($("#pollutionSourceParams").html());
    var weatherInfoToday = params["weatherInfoToday"];
    var weatherInfoForecast = params["weatherInfoForecast"];
    var isToday = params["isToday"];
    var month = params["month"];
    var device = params["device"];
    var cityName = params["weatherInfoToday"]["cityName"];
    var dirPoint = new BMap.Point(params["dirPoint"].lng, params["dirPoint"].lat);
    var getPollutionSourceData = params["getPollutionSourceData"];
    var map = new BMap.Map("mapCanvas", {enableMapClick: false});
    map.setCurrentCity("昆山");
    map.setMapStyle(mapStyle);
    map.enableScrollWheelZoom(true); // 开启鼠标滚轮缩放
    var navigation = new BMap.NavigationControl({
@@ -119,115 +157,274 @@
    var latitude = params["device"]["latitude"];
    var point = new BMap.Point(longitude, latitude);
    var icon = new BMap.Icon("/img/ico00.png", new BMap.Size(50, 50));
    var icon1 = new BMap.Icon("/img/ico01.png", new BMap.Size(50, 50));
    var icon2 = new BMap.Icon("/img/ico02.png", new BMap.Size(50, 50));
    var marker = new BMap.Marker(point, {icon: icon, offset: new BMap.Size(0, -20)});
    map.addOverlay(marker);
    map.setCurrentCity(cityName);
    map.centerAndZoom(point, 19);
    var bounds = map.getBounds(); //获取地图可视区域
    var sw = bounds.getSouthWest(); //获取西南角的经纬度(左下端点)
    var ne = bounds.getNorthEast(); //获取东北角的经纬度(右上端点)
    var wn = new BMap.Point(sw.lng, ne.lat); //获取西北角的经纬度(左上端点)
    var es = new BMap.Point(ne.lng, sw.lat); //获取东南角的经纬度(右下端点)
    var n = new BMap.Point(longitude, ne.lat);
    var s = new BMap.Point(longitude, sw.lat);
    var w = new BMap.Point(sw.lng, latitude);
    var e = new BMap.Point(ne.lng, latitude);
    var dirPoint;
    var humidity;
    var windLevel;
    if (Object.keys(weatherInfoForecast).length === 0) {
        var windDir = weatherInfoToday["windDir"];
        dirPoint = getWindDir(windDir, dirPoint);
        humidity = weatherInfoToday["humidity"];
        windLevel = weatherInfoToday["windLevel"];
    } else {
        if (isToday) {
            var windDir = weatherInfoToday["windDir"];
            dirPoint = getWindDir(windDir, dirPoint);
            humidity = weatherInfoToday["humidity"];
            windLevel = weatherInfoToday["windLevel"];
        } else {
            var windDir = weatherInfoForecast["windDirDay"];
            dirPoint = getWindDir(windDir, dirPoint);
            humidity = weatherInfoForecast["humidity"];
            windLevel = weatherInfoForecast["windLevelDay"];
        }
    }
    var polyline = new BMap.Polyline([
            dirPoint,
            point
        ],
        {strokeColor: "#5298FF", strokeWeight: 4, strokeOpacity: 1}
    );
    map.addOverlay(polyline);// 画两点间线
    addArrow(polyline, 50, Math.PI / 7);
    var winfowTextCause = "<p style='height: 44px;line-height: 22px'>汽车尾气,工厂废气,以及周边地区农田秸秆焚烧,污染传播途径是根据风向来做出调整</p>";
    var winfowTextSource;
    var supplement;
    if (month == 12 || month == 1 || month == 2) {
        if (humidity > 60 && windLevel < 2) {
            supplement = ",同时相对湿度超过60%,平均风速小于2m/s,高温、湿度较大,大气扩散条件较不利";
        } else if (humidity > 80 && windLevel < 2) {
            supplement = ",同时相对湿度超过80%,平均风速降低,在高湿、小风条件下,污染物易于累积和吸湿增长,促使污染二次生成";
        } else if (windLevel > 2) {
            supplement = ",但风速较大,大气扩散条件较有利,空气质量相对提升";
        } else {
            supplement = ",但湿度较低,大气扩散条件较有利";
        }
        winfowTextSource = "<p style='height: 22px;line-height: 22px'>压强升高气温降低,也会因冷空气带来的颗粒物,导致污染上升" + supplement + "</p>";
    } else if (month == 3 || month == 4 || month == 5) {
        if (humidity > 60 && windLevel < 2) {
            supplement = ",同时相对湿度超过60%,平均风速小于2m/s,高温、湿度较大,大气扩散条件较不利";
        } else if (humidity > 80 && windLevel < 2) {
            supplement = ",同时相对湿度超过80%,平均风速降低,在高湿、小风条件下,污染物易于累积和吸湿增长,促使污染二次生成";
        } else if (windLevel >= 2) {
            supplement = ",同时风速较大,大气扩散条件较有利,空气质量相对提升";
        } else {
            supplement = ",同时湿度较低,大气扩散条件较有利";
        }
        winfowTextSource = "<p style='height: 22px;line-height: 22px'>地面逆温频率的增加使污染物在近地层不断积累" + supplement + "</p>";
    } else if (month == 6 || month == 7) {
        if (humidity > 60 && windLevel < 2) {
            supplement = ",同时相对湿度超过60%,平均风速小于2m/s,高温、湿度较大,大气扩散条件较不利";
        } else if (humidity > 80 && windLevel < 2) {
            supplement = ",同时相对湿度超过80%,平均风速降低,在高湿、小风条件下,污染物易于累积和吸湿增长,促使污染二次生成";
        } else if (windLevel > 2) {
            supplement = ",同时风速较大,大气扩散条件较有利,空气质量相对提升";
        } else {
            supplement = ",同时湿度较低,大气扩散条件较有利";
        }
        winfowTextSource = "<p style='height: 22px;line-height: 22px'>夏季的气温条件不易发生逆温" + supplement + "</p>";
    } else if (month == 8 || month == 9 || month == 10 || month == 11) {
        if (humidity > 60 && windLevel < 2) {
            supplement = ",同时相对湿度超过60%,平均风速小于2m/s,高温、湿度较大,大气扩散条件较不利";
        } else if (humidity > 80 && windLevel < 2) {
            supplement = ",同时相对湿度超过80%,平均风速降低,在高湿、小风条件下,污染物易于累积和吸湿增长,促使污染二次生成";
        } else if (windLevel > 2) {
            supplement = ",同时风速较大,大气扩散条件较有利,空气质量相对提升";
        } else {
            supplement = ",同时湿度较低,大气扩散条件较有利";
        }
        winfowTextSource = "<p style='height: 22px;line-height: 22px'>太阳辐射强,大气氧化性增强,常发生光化学烟雾" + supplement + "</p>";
    map.centerAndZoom(point, 16);
    var humidity = 0;
    var temperature = 0;
    if (!$.isEmptyObject(dirPoint) && !$.isEmptyObject(getPollutionSourceData) && typeof (getPollutionSourceData["e18"]) != "undefined" && typeof (getPollutionSourceData["e23"]) != "undefined" && getPollutionSourceData["e18"] != 0) {
        var windSpeed = parseFloat(getPollutionSourceData["e18"]);
        var windDir = parseFloat(getPollutionSourceData["e23"]);
        var distance = windSpeed * 3600;
        var winDirStart = 255 - windDir;
        var winDirEnd = 285 - windDir;
        var marker1 = new BMap.Marker(EOffsetBearing(dirPoint, distance * 0.15, winDirStart), {
            icon: icon2,
            offset: new BMap.Size(0, -20)
        });
        var marker2 = new BMap.Marker(EOffsetBearing(dirPoint, distance * 0.31, winDirEnd), {
            icon: icon2,
            offset: new BMap.Size(0, -20)
        });
        var marker3 = new BMap.Marker(EOffsetBearing(dirPoint, distance * 0.61, winDirStart), {
            icon: icon1,
            offset: new BMap.Size(0, -20)
        });
        var marker4 = new BMap.Marker(EOffsetBearing(dirPoint, distance * 0.78, winDirEnd), {
            icon: icon1,
            offset: new BMap.Size(0, -20)
        });
        map.addOverlay(marker1);
        map.addOverlay(marker2);
        map.addOverlay(marker3);
        map.addOverlay(marker4);
    }
    var winfowText = '<div style="height:150px;" >';
    var opts = {
        width: 380,
        title: '<h3>污染分析</h3>',
        enableMessage: false //设置允许信息窗发送短息
    }
    winfowText += '<h3 style="background-color: #CD5C5C;color:white;margin-bottom: 1px">污染来源</h3>';
    winfowText += winfowTextCause;
    winfowText += '<h3 style="background-color: #66CD00;color:white;margin-bottom: 1px">污染成因</h3>';
    winfowText += winfowTextSource;
    winfowText += "</div>";
    marker.addEventListener("click", function () {
        var infoWindow = new BMap.InfoWindow(winfowText, opts);
        this.openInfoWindow(infoWindow);
    $("#show").one('click', function () {
        setTimeout(function () {
            if ($.isEmptyObject(dirPoint) || $.isEmptyObject(getPollutionSourceData) || typeof (getPollutionSourceData["e18"]) == "undefined" || typeof (getPollutionSourceData["e23"]) == "undefined" || getPollutionSourceData["e18"] === 0) {
                showNoData();
            } else {
                if (typeof (getPollutionSourceData["e6"]) != "undefined") {
                    humidity = parseFloat(getPollutionSourceData["e6"]);
                }
                if (typeof (getPollutionSourceData["e7"]) != "undefined") {
                    temperature = parseFloat(getPollutionSourceData["e7"]);
                }
                var windSpeed = parseFloat(getPollutionSourceData["e18"]);
                var windDir = parseFloat(getPollutionSourceData["e23"]);
                var selectSensorKey = getPollutionSourceData["selectSensorKey"];
                var markerDir = new BMap.Marker(dirPoint);
                lab = new BMap.Label("经过溯源运算,确认该点为污染源</br>" + selectSensorKey + "超标", {
                    position: dirPoint,
                    offset: new BMap.Size(20, -40)
                });
                lab.setStyle({
                    color: "#EE3B3B",
                    fontSize: "16px",
                    backgroundColor: "1",
                    fontWeight: "bold"
                });
                map.addOverlay(lab);
                var distance = windSpeed * 3600;
                var winDirStartLeft = 240 - windDir;
                var winDirEndLeft = 250 - windDir;
                var winDirStartMiddle = 250 - windDir;
                var winDirEndMiddle = 290 - windDir;
                var winDirStartRight = 290 - windDir;
                var winDirEndRight = 300 - windDir;
                var winDirStart = 255 - windDir;
                var winDirEnd = 285 - windDir;
                var polyline1 = new BMap.Polyline([
                        dirPoint,
                        EOffsetBearing(dirPoint, distance, winDirStart)
                    ],
                    {strokeColor: "red", strokeWeight: 4, strokeOpacity: 1}
                );
                var polyline2 = new BMap.Polyline([
                        dirPoint,
                        EOffsetBearing(dirPoint, distance, winDirEnd)
                    ],
                    {strokeColor: "red", strokeWeight: 4, strokeOpacity: 1}
                );
                map.addOverlay(polyline1);// 画两点间线
                map.addOverlay(polyline2);// 画两点间线
                map.addOverlay(markerDir);
                setTimeout(function () {
                    var ovalLeft = new BMap.Polygon(Sector(dirPoint, distance, winDirStartLeft, winDirEndLeft), {
                        strokeColor: "#ADADAD",
                        strokeWeight: 0.1,
                        strokeOpacity: 0.7,
                        fillColor: "#ADADAD"
                    });
                    map.addOverlay(ovalLeft);
                    var oval = new BMap.Polygon(Sector(dirPoint, distance, winDirStartMiddle, winDirEndMiddle), {
                        strokeColor: "#A6A6A6",
                        strokeWeight: 0.1,
                        strokeOpacity: 0.95,
                        fillColor: "#A6A6A6"
                    });
                    map.addOverlay(oval);
                    var ovalRight = new BMap.Polygon(Sector(dirPoint, distance, winDirStartRight, winDirEndRight), {
                        strokeColor: "#ADADAD",
                        strokeWeight: 0.1,
                        strokeOpacity: 0.7,
                        fillColor: "#ADADAD"
                    });
                    map.addOverlay(ovalRight);
                }, 1500);
                setTimeout(function () {
                    var ovalLeft = new BMap.Polygon(Sector(dirPoint, distance * 0.66, winDirStartLeft, winDirEndLeft), {
                        strokeColor: "#ADADAD",
                        strokeWeight: 0.1,
                        strokeOpacity: 0.5,
                        fillColor: "#ADADAD"
                    });
                    map.addOverlay(ovalLeft);
                    var oval = new BMap.Polygon(Sector(dirPoint, distance * 0.66, winDirStartMiddle, winDirEndMiddle), {
                        strokeColor: "#A6A6A6",
                        strokeWeight: 0.1,
                        strokeOpacity: 0.75,
                        fillColor: "#A6A6A6"
                    });
                    map.addOverlay(oval);
                    var ovalRight = new BMap.Polygon(Sector(dirPoint, distance * 0.66, winDirStartRight, winDirEndRight), {
                        strokeColor: "#ADADAD",
                        strokeWeight: 0.1,
                        strokeOpacity: 0.7,
                        fillColor: "#ADADAD"
                    });
                    map.addOverlay(ovalRight);
                    var polyline = new BMap.Polyline([
                            dirPoint,
                            point
                        ],
                        {strokeColor: "#5298FF", strokeWeight: 4, strokeOpacity: 1}
                    );
                    addArrow(polyline, 0, Math.PI / 7, temperature, humidity, windSpeed, windDir);
                }, 1000);
                setTimeout(function () {
                    var ovalLeft = new BMap.Polygon(Sector(dirPoint, distance * 0.33, winDirStartLeft, winDirEndLeft), {
                        strokeColor: "#ADADAD",
                        strokeWeight: 0.1,
                        strokeOpacity: 0.3,
                        fillColor: "#ADADAD"
                    });
                    map.addOverlay(ovalLeft);
                    var oval = new BMap.Polygon(Sector(dirPoint, distance * 0.33, winDirStartMiddle, winDirEndMiddle), {
                        strokeColor: "#A6A6A6",
                        strokeWeight: 0.1,
                        strokeOpacity: 0.55,
                        fillColor: "#A6A6A6"
                    });
                    var ovalRight = new BMap.Polygon(Sector(dirPoint, distance * 0.33, winDirStartRight, winDirEndRight), {
                        strokeColor: "#ADADAD",
                        strokeWeight: 0.1,
                        strokeOpacity: 0.7,
                        fillColor: "#ADADAD"
                    });
                    map.addOverlay(ovalRight);
                    map.addOverlay(oval);
                }, 500);
                var winfowTextCause = "<p style='height: 22px;line-height: 22px'>汽车尾气,工厂废气,以及周边地区农田秸秆焚烧</p>";
                var winfowTextSource;
                var supplement;
                if (selectSensorKey == "臭氧") {
                    winfowTextCause = "<p style='height: 44px;line-height: 22px'>主要来源机动车尾气、燃煤排放氮氧化物,油漆油气挥发有机物在高温,阳光充足的照射下发生光化学烟雾</p>";
                    winfowTextSource = "<p style='height: 22px;line-height: 22px'>NOx以及VOCs总量超标</p>";
                } else {
                    if (month == 12 || month == 1 || month == 2) {
                        if (windSpeed >= 3.4) {
                            supplement = ",但风速较大,大气扩散条件较有利,空气质量相对提升";
                        }
                        if (humidity >= 90.0) {
                            supplement = ",但降雨有利于对颗粒物的沉降、冲刷,改善污染状况";
                        } else {
                            supplement = "";
                        }
                        winfowTextSource = "<p style='height: 22px;line-height: 22px'>压强升高气温降低,会因冷空气带来的颗粒物,导致污染上升" + supplement + "</p>";
                    } else if (month == 3 || month == 4 || month == 5) {
                        if (windSpeed >= 3.4) {
                            supplement = ",但风速较大,大气扩散条件较有利,空气质量相对提升";
                        }
                        if (humidity >= 90.0) {
                            supplement = ",但降雨有利于对颗粒物的沉降、冲刷,改善污染状况";
                        } else {
                            supplement = "";
                        }
                        winfowTextSource = "<p style='height: 22px;line-height: 22px'>地面逆温频率的增加使污染物在近地层不断积累" + supplement + "</p>";
                    } else if (month == 6 || month == 7) {
                        if (windSpeed >= 3.4) {
                            supplement = ",同时风速较大,加速扩散";
                        }
                        if (humidity >= 90.0) {
                            supplement = ",同时降雨有利于对颗粒物的沉降、冲刷,改善污染状况";
                        } else {
                            supplement = "";
                        }
                        winfowTextSource = "<p style='height: 22px;line-height: 22px'>夏季的气温条件不易发生逆温,利于污染物扩散" + supplement + "</p>";
                    } else if (month == 8 || month == 9 || month == 10 || month == 11) {
                        if (windSpeed >= 3.4) {
                            supplement = ",但风速较大,利于污染物扩散";
                        }
                        if (humidity >= 90.0) {
                            supplement = ",但降雨有利于对颗粒物的沉降、冲刷,改善污染状况";
                        } else {
                            supplement = "";
                        }
                        winfowTextSource = "<p style='height: 22px;line-height: 22px'>大气扩散条件不好使污染物聚集,增大了气态污染物向二次颗粒物转化的机会" + supplement + "</p>";
                    }
                }
                var winfowText = '<div style="height:150px;" >';
                var opts = {
                    width: 380,
                    title: '<h3>污染分析</h3>',
                    enableMessage: false //设置允许信息窗发送短息
                }
                winfowText += '<h3 style="background-color: #CD5C5C;color:white;margin-bottom: 1px">污染来源</h3>';
                winfowText += winfowTextCause;
                winfowText += '<h3 style="background-color: #66CD00;color:white;margin-bottom: 1px">污染成因</h3>';
                winfowText += winfowTextSource;
                winfowText += "</div>";
                marker.addEventListener("click", function () {
                    var infoWindow = new BMap.InfoWindow(winfowText, opts);
                    this.openInfoWindow(infoWindow);
                });
            }
        }, 1500);
    });
    //centre:椭圆中心点,X:横向经度,Y:纵向纬度
    function add_oval(centre, x, y) {
        var assemble = new Array();
        var angle;
        var dot;
        var tangent = x / y;
        for (i = 0; i < 36; i++) {
            angle = (2 * Math.PI / 36) * i;
            dot = new BMap.Point(centre.lng + Math.sin(angle) * y * tangent, centre.lat + Math.cos(angle) * y);
            assemble.push(dot);
        }
        return assemble;
    }
    function addArrow(polyline, length, angleValue) {
    //以画多边形区域的方法画扇形区域 画出以point点为圆心,半径为radius,夹角从sDegree到eDegree的扇形
    function Sector(point, radius, sDegree, eDegree) {
        var points = []; //创建构成多边形的点数组
        var step = ((eDegree - sDegree) / 100) || 1; //根据扇形的总夹角确定每步夹角度数,最大为10
        points.push(point);
        for (var i = sDegree; i < eDegree + 0.001; i += step) { //循环获取每步的圆弧上点的坐标,存入点数组
            points.push(EOffsetBearing(point, radius, i));
        }
        points.push(point);
        return points;
    }
    //使用数学的方法计算需要画扇形的圆弧上的点坐标
    function EOffsetBearing(point, dist, bearing) {
        var lngConv = map.getDistance(point, new BMap.Point(point.lng + 0.1, point.lat)) * 10; //计算经度与原点的距离
        var latConv = map.getDistance(point, new BMap.Point(point.lng, point.lat + 0.1)) * 10; //计算纬度与原点的距离
        var lat = dist * Math.sin(bearing * Math.PI / 180) / latConv; //正弦计算待获取的点的纬度与原点纬度差
        var lng = dist * Math.cos(bearing * Math.PI / 180) / lngConv; //余弦计算待获取的点的经度与原点经度差
        return new BMap.Point(point.lng + lng, point.lat + lat);
    }
    function addArrow(polyline, length, angleValue, temperature, humidity, windSpeed, windDir) {
        var linePoint = polyline.getPath();// 线的坐标串
        var arrowCount = linePoint.length;
        for (var i = 1; i < arrowCount; i++) { // 在拐点处绘制箭头
@@ -238,7 +435,7 @@
            var delta = 0; // 主线斜率,垂直时无斜率
            var param = 0; // 代码简洁考虑
            var pixelTemX, pixelTemY, poMiddleX, poMiddleY;// 临时点坐标
            var pixelX, pixelY, pixelX1, pixelY1;// 箭头两个点
            var pixelX, pixelY;// 箭头两个点
            poMiddleX = (pixelEnd.x + pixelStart.x) / 2;
            poMiddleY = (pixelEnd.y + pixelStart.y) / 2;
            if (poMiddleX - pixelStart.x == 0) { // 斜率不存在时
@@ -250,8 +447,7 @@
                }
                // 已知直角三角形两个点坐标及其中一个角,求另外一个点坐标算法
                pixelX = pixelTemX - r * Math.tan(angle);
                pixelX1 = pixelTemX + r * Math.tan(angle);
                pixelY = pixelY1 = pixelTemY;
                pixelY = pixelTemY;
            } else { // 斜率存在时
                delta = (poMiddleY - pixelStart.y) / (poMiddleX - pixelStart.x);
                param = Math.sqrt(delta * delta + 1);
@@ -265,38 +461,83 @@
                // 已知直角三角形两个点坐标及其中一个角,求另外一个点坐标算法
                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));
            var pointMiddle = map.pixelToPoint(new BMap.Pixel(poMiddleX, poMiddleY));
            var Arrow = new BMap.Polyline([pointArrow, pointMiddle, pointArrow1],
                {strokeColor: "#5298FF", strokeWeight: 4, strokeOpacity: 1});
            map.addOverlay(Arrow);
            var windDirection;
            if (windDir == 0) {
                windDirection = "北风";
            } else if (windDir == 90) {
                windDirection = "东风";
            } else if (windDir == 180) {
                windDirection = "南风";
            } else if (windDir == 270) {
                windDirection = "西风";
            } else if (windDir > 0 && windDir < 90) {
                windDirection = "东北风";
            } else if (windDir > 90 && windDir < 180) {
                windDirection = "东南风";
            } else if (windDir > 180 && windDir < 270) {
                windDirection = "西南风";
            } else if (windDir > 270 && windDir < 360) {
                windDirection = "西北风";
            }
            if (temperature != 0 && humidity != 0) {
                lab = new BMap.Label("<P>温度:" + temperature + "℃</p><P>湿度:" + humidity + "%</p><P>风速:" + windSpeed + "m/s</p><P>风向:" + windDirection + "</p>", {
                    position: pointMiddle,
                    offset: new BMap.Size(-50, -40)
                });
            } else if (temperature == 0 && humidity != 0) {
                lab = new BMap.Label("<P>湿度:" + humidity + "%</p><P>风速:" + windSpeed + "m/s</p><P>风向:" + windDirection + "</p>", {
                    position: pointMiddle,
                    offset: new BMap.Size(-50, -40)
                });
            } else if (temperature != 0 && humidity == 0) {
                lab = new BMap.Label("<P>温度:" + temperature + "℃</p><P>风速:" + windSpeed + "m/s</p><P>风向:" + windDirection + "</p>", {
                    position: pointMiddle,
                    offset: new BMap.Size(-50, -40)
                });
            } else {
                lab = new BMap.Label("<P>风速:" + windSpeed + "m/s</p><P>风向:" + windDirection + "</p>", {
                    position: pointMiddle,
                    offset: new BMap.Size(-50, -40)
                });
            }
            lab.setStyle({
                color: "#EE3B3B",
                fontSize: "16px",
                backgroundColor: "1",
                border: "0",
                fontWeight: "bold"
            });
            map.addOverlay(lab);
        }
    };
    function getWindDir(windDir, dirPoint) {
        if (windDir == "北风") {
            dirPoint = n;
        } else if (windDir == "南风") {
            dirPoint = s;
        } else if (windDir == "西风") {
            dirPoint = w;
        } else if (windDir == "东风") {
            dirPoint = e;
        } else if (windDir == "西北风") {
            dirPoint = wn;
        } else if (windDir == "东北风") {
            dirPoint = ne;
        } else if (windDir == "西南风") {
            dirPoint = sw;
        } else if (windDir == "东南风") {
            dirPoint = es;
        } else {
            dirPoint = n;
        }
        return dirPoint;
    function showNoData() {
        map.centerAndZoom(point, 17);
        setTimeout(function () {
            if (JSON.stringify(getPollutionSourceData) == JSON.stringify({})) {
                document.getElementById("cpm").innerText = "该时间点查询无数据";
            } else {
                if (getPollutionSourceData["e18"] === 0) {
                    document.getElementById("cpm").style.width = '380px';
                    document.getElementById("cpm").innerText = "风速为0,无法溯源运算";
                }
                if (typeof (getPollutionSourceData["e18"]) == "undefined") {
                    document.getElementById("cpm").style.width = '400px';
                    document.getElementById("cpm").innerText = "设备无风速,无法溯源运算";
                }
                if (typeof (getPollutionSourceData["e23"]) == "undefined") {
                    document.getElementById("cpm").style.width = '400px';
                    document.getElementById("cpm").innerText = "设备无风向,无法溯源运算";
                }
                if (typeof (getPollutionSourceData["e18"]) == "undefined" && typeof (getPollutionSourceData["e23"]) == "undefined") {
                    document.getElementById("cpm").style.width = '500px';
                    document.getElementById("cpm").innerText = "设备无风速,无风向,无法溯源运算";
                }
            }
            document.getElementById("cpm").style.display = 'block';
        }, 250);
    };
</script>