ZhuDongming
2019-11-20 f32e22e52376cabe49e8c7d1f52adb4b1aebffd3
update:移动到设备marker上实时显示因子数据
7 files modified
3255 ■■■■ changed files
src/main/java/com/moral/controller/ScreenController.java 18 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/mapper/SensorMapper.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/SensorService.java 4 ●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/impl/SensorServiceImpl.java 20 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/SensorMapper.xml 15 ●●●●● patch | view | raw | blame | history
src/main/webapp/js/moralmap.js 1923 ●●●● patch | view | raw | blame | history
src/main/webapp/view/map.jsp 1273 ●●●● patch | view | raw | blame | history
src/main/java/com/moral/controller/ScreenController.java
@@ -544,6 +544,24 @@
        }
    }
    @GetMapping("/getSensorsMap")
    public ResultBean getSensorsMapOnly(String mac){
        Map<String, String> paramMap = sensorService.getSensorsMapOnly(mac);
        ResultBean<Map<String, String>> resultBean = new ResultBean();
        resultBean.setData(paramMap);
        resultBean.setCode(ResultBean.SUCCESS);
        return resultBean;
    }
    @GetMapping("/getSensorsUnitMap")
    public ResultBean getSensorsUnitMap(String mac){
        Map<String, String> paramMap = sensorService.getSensorsUnitMap(mac);
        ResultBean<Map<String, String>> resultBean = new ResultBean();
        resultBean.setData(paramMap);
        resultBean.setCode(ResultBean.SUCCESS);
        return resultBean;
    }
    @RequestMapping(value = "/get-monitorpoints", method = RequestMethod.GET)
    @ResponseBody
    public ResultBean getMonitorpointList(@RequestParam("orgId") String orgId, MapBounds mapBounds,
src/main/java/com/moral/mapper/SensorMapper.java
@@ -27,4 +27,6 @@
    List<Map<String,Object>> getSensorByMonitorPointId(@Param("monitor_point_id")String monitor_point_id);
    List<Sensor> getSensorsByMac(Map<String, Object> parameters);
    List<Sensor> getSensorsByMacOnly(@Param("mac") String mac);
}
src/main/java/com/moral/service/SensorService.java
@@ -33,4 +33,8 @@
    List<Map<String,Object>> getSensorByMonitorPointId(String monitor_point_id);
    Map<String, String> getSensorsMap(Map<String, Object> parameters) throws Exception;
    Map<String, String> getSensorsMapOnly(String mac);
    Map<String, String> getSensorsUnitMap(String mac);
}
src/main/java/com/moral/service/impl/SensorServiceImpl.java
@@ -110,4 +110,24 @@
        }
        return sensorMap;
    }
    @Override
    public Map<String, String> getSensorsMapOnly(String mac) {
        List<Sensor> sensors = sensorMapper.getSensorsByMacOnly(mac);
        Map<String, String> sensorMap = new HashMap<>();
        for (Sensor sensor : sensors) {
            sensorMap.put(sensor.getSensorKey(), sensor.getDescription());
        }
        return sensorMap;
    }
    @Override
    public Map<String, String> getSensorsUnitMap(String mac) {
        List<Sensor> sensors = sensorMapper.getSensorsByMacOnly(mac);
        Map<String, String> sensorMap = new HashMap<>();
        for (Sensor sensor : sensors) {
            sensorMap.put(sensor.getSensorKey(), sensor.getUnit());
        }
        return sensorMap;
    }
}
src/main/resources/mapper/SensorMapper.xml
@@ -159,4 +159,19 @@
            AND d.mac =    #{mac}
        </if>
    </select>
    <select id="getSensorsByMacOnly" resultMap="BaseResultMap">
        SELECT
        DISTINCT s.*
        FROM
        sensor s,
        device_version_sensor dvs,
        device d
        WHERE
        s.id = dvs.sensor_id
        AND dvs.device_version_id = d.device_version_id
        <if test="mac != null">
            AND d.mac =    #{mac}
        </if>
    </select>
</mapper>
src/main/webapp/js/moralmap.js
@@ -1,1030 +1,1097 @@
(function($, BMap, window) {
    var sensorNames = {
        "e1": ["PM2.5", "ug/m3"],
        "e2": ["PM10", "ug/m3"],
        "e3": ["颗粒物0.3", "PCS/0.1L"],
        "e4": ["颗粒物2.5", "PCS/0.1L"],
        "e5": ["甲醛", "mg/m3"],
        "e6": ["湿度", "%"],
        "e7": ["温度", "℃"],
        "e8": ["氧气", "%"],
        "e9": ["氯气", "mg/m3"],
        "e10": ["一氧化碳", "mg/m3"],
        "e11": ["二氧化硫", "ug/m3"],
        "e12": ["光照", "Lux"],
        "e13": ["噪音", "dB"],
        "e14": ["氨气", "mg/m3"],
        "e15": ["臭氧", "ug/m3"],
        "e16": ["二氧化氮", "ug/m3"],
        "e17": ["挥发有机气体", "PPB"],
        "e18": ["风速", "m/s"],
        "e19": ["二氧化碳", "mg/m3"]
    }
    var showSensorKeys=["e1","e2","e10","e11","e15","e16"];
    var moralMap = {};
    var baiduMap = null;
    /*
     * 根据mac地址获取version
     */
    // moralMap.getVersion = function(mac){
    //     var version = null;
    //     $.ajax({
    //         type:"get",
    //         url:"getversion?mac="+mac,
    //         async:false,
    //         success:function(jsonData){
    //             if(jsonData!=null&&typeof jsonData=='object'){
    //                 version = jsonData['version'];
    //             }
    //         }
    //     });
    //     return version;
    // }
    /*
     * 百度地图初始化
     */
    moralMap.mapInit = function() {
        var defaultParam = {
(function ($, BMap, window) {
    var sensorNames = {
        "e1": ["PM2.5", "ug/m3"],
        "e2": ["PM10", "ug/m3"],
        "e3": ["颗粒物0.3", "PCS/0.1L"],
        "e4": ["颗粒物2.5", "PCS/0.1L"],
        "e5": ["甲醛", "mg/m3"],
        "e6": ["湿度", "%"],
        "e7": ["温度", "℃"],
        "e8": ["氧气", "%"],
        "e9": ["氯气", "mg/m3"],
        "e10": ["一氧化碳", "mg/m3"],
        "e11": ["二氧化硫", "ug/m3"],
        "e12": ["光照", "Lux"],
        "e13": ["噪音", "dB"],
        "e14": ["氨气", "mg/m3"],
        "e15": ["臭氧", "ug/m3"],
        "e16": ["二氧化氮", "ug/m3"],
        "e17": ["挥发有机气体", "PPB"],
        "e18": ["风速", "m/s"],
        "e19": ["二氧化碳", "mg/m3"]
    }
    var showSensorKeys = ["e1", "e2", "e10", "e11", "e15", "e16"];
    var moralMap = {};
    var baiduMap = null;
    /*
     * 根据mac地址获取version
     */
    // moralMap.getVersion = function(mac){
    //     var version = null;
    //     $.ajax({
    //         type:"get",
    //         url:"getversion?mac="+mac,
    //         async:false,
    //         success:function(jsonData){
    //             if(jsonData!=null&&typeof jsonData=='object'){
    //                 version = jsonData['version'];
    //             }
    //         }
    //     });
    //     return version;
    // }
    /*
     * 百度地图初始化
     */
    moralMap.mapInit = function () {
        var defaultParam = {
            minZoom: 12,
            maxZoom: 20
        };
        if(!!arguments[1]) {
         $.extend(defaultParam,arguments[1]);
        if (!!arguments[1]) {
            $.extend(defaultParam, arguments[1]);
        }
        baiduMap = new BMap.Map("mapCanvas",defaultParam); // 创建Map实例,设置地图允许的最小/大级别
        var map = baiduMap;
        var mapStyle = {
            features: ["road", "building", "water", "land"], //隐藏地图上的poi
            style: "normal" //设置地图风格为高端黑
        }
        map.setMapStyle(mapStyle);
        baiduMap = new BMap.Map("mapCanvas", defaultParam); // 创建Map实例,设置地图允许的最小/大级别
        var map = baiduMap;
        var mapStyle = {
            features: ["road", "building", "water", "land"], //隐藏地图上的poi
            style: "normal" //设置地图风格为高端黑
        }
        map.setMapStyle(mapStyle);
        var showZoom = !!arguments[2]
        && arguments[2] <=defaultParam.maxZoom
        && arguments[2] >= defaultParam.minZoom?arguments[2]:12;
        && arguments[2] <= defaultParam.maxZoom
        && arguments[2] >= defaultParam.minZoom ? arguments[2] : 12;
        var address = arguments[0];
        var regoinNames = address.split(" ");
        var cityName = regoinNames.length>1?regoinNames[1]:regoinNames[0];
        var cityName = regoinNames.length > 1 ? regoinNames[1] : regoinNames[0];
        map.setCurrentCity(cityName);
            // 将地址解析结果显示在地图上,并调整地图视野
            // 创建地址解析器实例
            var myGeo = new BMap.Geocoder();
            myGeo.getPoint(address, function(point){
                if (point) {
                    map.centerAndZoom(point, showZoom);
                }else{
                    alert("您选择地址没有解析到结果!");
        // 将地址解析结果显示在地图上,并调整地图视野
        // 创建地址解析器实例
        var myGeo = new BMap.Geocoder();
        myGeo.getPoint(address, function (point) {
            if (point) {
                map.centerAndZoom(point, showZoom);
            } else {
                alert("您选择地址没有解析到结果!");
            }
        }, cityName);
        //增加导航控件
        map.enableScrollWheelZoom(true);
        var navigation = new BMap.NavigationControl({
            anchor: BMAP_ANCHOR_BOTTOM_RIGHT,
            type: BMAP_NAVIGATION_CONTROL_LARGE
        });
        map.addControl(navigation);
    }
    moralMap.closeSearchBox = function () {
        moralMap["_searchBoxKey"] = Math.random();
        $(".search_box").css("display", "none");
    }
    //延时开启
    moralMap.openSearchBox = function () {
        key = Math.random();
        moralMap["_searchBoxKey"] = key;
        setTimeout(function () {
            if (moralMap["_searchBoxKey"] == key) {
                $(".search_box").css("display", "block");
            }
        }, 1500);
    }
    /*
     * ----------------适配方法------------------------
     */
    moralMap.addEventListener = function (type, fn) {
        baiduMap.addEventListener(type, function () {
            if (type == "zoomstart") {
                moralMap._zoomStartHandle();
            } else if (type == "zoomend") {
                moralMap._zoomEndHandle();
            }
            fn.apply(baiduMap, arguments);
        });
    }
    moralMap._zoomStartHandle = function () {
        baiduMap.closeInfoWindow();
        moralMap.startZoom(baiduMap.getZoom());
    }
    moralMap._zoomEndHandle = function () {
        if ($(".search_box").css("display") == "none") {
            moralMap.openSearchBox();
        }
        var endZoom = baiduMap.getZoom();
        var startZoom = moralMap.startZoom();
        //刷新key防止延迟加载
        //       var key = moralMap.lazyKeyer();
        var confine = moralMap.getZoomConfine();
        if (endZoom > startZoom) {
            //放大超过边界
            if (endZoom >= confine && startZoom <= confine) {
                //清空控件
                moralMap.layer("equipments");
                moralMap.clearOverlays();
            }
        } else {
            //缩小超过边界
            if (endZoom != startZoom && startZoom >= confine && endZoom < confine) {
                //清空控件
                moralMap.layer("monitorpoints");
                moralMap.clearOverlays();
            }
        }
    }
    moralMap.layer = (function () {
        var _layers = ["equipments", "monitorpoints"];
        var _layer = "monitorpoints";
        return function (layer) {
            if (layer == undefined) {
                return _layer;
            } else {
                for (var i in _layers) {
                    if (layer == _layers[i]) {
                        _layer = layer;
                    }
                }
            }, cityName);
        //增加导航控件
        map.enableScrollWheelZoom(true);
        var navigation = new BMap.NavigationControl({
            anchor: BMAP_ANCHOR_BOTTOM_RIGHT,
            type: BMAP_NAVIGATION_CONTROL_LARGE
        });
        map.addControl(navigation);
    }
    moralMap.closeSearchBox = function() {
        moralMap["_searchBoxKey"] = Math.random();
        $(".search_box").css("display", "none");
    }
    //延时开启
    moralMap.openSearchBox = function() {
        key = Math.random();
        moralMap["_searchBoxKey"] = key;
        setTimeout(function() {
            if(moralMap["_searchBoxKey"] == key) {
                $(".search_box").css("display", "block");
            }
        }, 1500);
    }
    /*
     * ----------------适配方法------------------------
     */
    moralMap.addEventListener = function(type, fn) {
        baiduMap.addEventListener(type, function() {
            if(type == "zoomstart") {
                moralMap._zoomStartHandle();
            } else if(type == "zoomend") {
                moralMap._zoomEndHandle();
            }
            fn.apply(baiduMap, arguments);
        });
    }
    moralMap._zoomStartHandle = function() {
        baiduMap.closeInfoWindow();
        moralMap.startZoom(baiduMap.getZoom());
    }
    moralMap._zoomEndHandle = function() {
        if($(".search_box").css("display") == "none") {
            moralMap.openSearchBox();
        }
        var endZoom = baiduMap.getZoom();
        var startZoom = moralMap.startZoom();
        //刷新key防止延迟加载
        //       var key = moralMap.lazyKeyer();
        var confine = moralMap.getZoomConfine();
        if(endZoom > startZoom) {
            //放大超过边界
            if(endZoom >= confine && startZoom <= confine) {
                //清空控件
                moralMap.layer("equipments");
                moralMap.clearOverlays();
            }
        } else {
            //缩小超过边界
            if(endZoom != startZoom && startZoom >= confine && endZoom < confine) {
                //清空控件
                moralMap.layer("monitorpoints");
                moralMap.clearOverlays();
            }
        }
    }
    moralMap.layer = (function() {
        var _layers = ["equipments", "monitorpoints"];
        var _layer = "monitorpoints";
        return function(layer) {
            if(layer == undefined) {
                return _layer;
            } else {
                for(var i in _layers) {
                    if(layer == _layers[i]) {
                        _layer = layer;
                    }
                }
            }
        }
    })();
            }
        }
    })();
    // 坐标适配器
    moralMap.Bounds = function (baiduBounds) {
        if(!!baiduBounds){
        if (!!baiduBounds) {
            this.northeastLng = baiduBounds.getNorthEast().lng;//东北角经度,大一点
            this.northeastLat = baiduBounds.getNorthEast().lat;//东北角纬度,大一点
            this.southwestLng = baiduBounds.getSouthWest().lng;//西南角经度坐标,小一点
            this.southwestLat = baiduBounds.getSouthWest().lat;//西南角经度坐标,小一点
        }else{
        } else {
            this.northeastLng = null;//东北角经度,大一点
            this.northeastLat = null;//东北角纬度,大一点
            this.southwestLng = null;//西南角经度坐标,小一点
            this.southwestLat = null;//西南角经度坐标,小一点
        }
        }
    }
    moralMap.getBounds = function() {
        return new moralMap.Bounds(baiduMap.getBounds()); //即时bounds;
    }
    moralMap.getMaxBounds = function() {
        var key = "_" + moralMap.layer() + "_bounds";
        return this[key];
    }
    moralMap.setMaxBounds = function(bs) {
        var key = "_" + moralMap.layer() + "_bounds";
        var _bounds = !!this[key]?this[key]:new moralMap.Bounds(); //累积数据
        //记录最大边界
        _bounds.northeastLng = _bounds.northeastLng || bs.northeastLng;
        _bounds.northeastLat = _bounds.northeastLat || bs.northeastLat;
        _bounds.southwestLng = _bounds.southwestLng || bs.southwestLng;
        _bounds.southwestLat = _bounds.southwestLat || bs.southwestLat;
        _bounds.northeastLng = bs.northeastLng > _bounds.northeastLng ? bs.northeastLng: _bounds.northeastLng;
        _bounds.northeastLat = bs.northeastLat > _bounds.northeastLat ? bs.northeastLat: _bounds.northeastLat;
        _bounds.southwestLng = bs.southwestLng < _bounds.southwestLng ? bs.southwestLng: _bounds.southwestLng;
        _bounds.southwestLat = bs.southwestLat < _bounds.southwestLat ? bs.southwestLat: _bounds.southwestLat;
        this[key] = _bounds;
    }
    moralMap.isOverBounds = function() {
        var isOver = false;
        var _bounds = moralMap.getMaxBounds(); //累计数据
        var bs = moralMap.getBounds(); //实际数据
        if(!_bounds) {
            isOver = true;
            moralMap.setMaxBounds(bs);
        } else {
                isOver = (bs.northeastLng > _bounds.northeastLng
                        || bs.northeastLat > _bounds.northeastLat
                        || bs.southwestLng < _bounds.southwestLng
                        || bs.southwestLat < _bounds.southwestLat);
              if(isOver){
                  moralMap.setMaxBounds(bs);
              }
        }
    moralMap.getBounds = function () {
        return new moralMap.Bounds(baiduMap.getBounds()); //即时bounds;
    }
    moralMap.getMaxBounds = function () {
        var key = "_" + moralMap.layer() + "_bounds";
        return this[key];
    }
    moralMap.setMaxBounds = function (bs) {
        var key = "_" + moralMap.layer() + "_bounds";
        var _bounds = !!this[key] ? this[key] : new moralMap.Bounds(); //累积数据
        //记录最大边界
        _bounds.northeastLng = _bounds.northeastLng || bs.northeastLng;
        _bounds.northeastLat = _bounds.northeastLat || bs.northeastLat;
        _bounds.southwestLng = _bounds.southwestLng || bs.southwestLng;
        _bounds.southwestLat = _bounds.southwestLat || bs.southwestLat;
        _bounds.northeastLng = bs.northeastLng > _bounds.northeastLng ? bs.northeastLng : _bounds.northeastLng;
        _bounds.northeastLat = bs.northeastLat > _bounds.northeastLat ? bs.northeastLat : _bounds.northeastLat;
        _bounds.southwestLng = bs.southwestLng < _bounds.southwestLng ? bs.southwestLng : _bounds.southwestLng;
        _bounds.southwestLat = bs.southwestLat < _bounds.southwestLat ? bs.southwestLat : _bounds.southwestLat;
        this[key] = _bounds;
    }
    moralMap.isOverBounds = function () {
        var isOver = false;
        var _bounds = moralMap.getMaxBounds(); //累计数据
        var bs = moralMap.getBounds(); //实际数据
        if (!_bounds) {
            isOver = true;
            moralMap.setMaxBounds(bs);
        } else {
            isOver = (bs.northeastLng > _bounds.northeastLng
                || bs.northeastLat > _bounds.northeastLat
                || bs.southwestLng < _bounds.southwestLng
                || bs.southwestLat < _bounds.southwestLat);
            if (isOver) {
                moralMap.setMaxBounds(bs);
            }
        }
        return isOver;
    }
    moralMap.addOverlay = function(overlay) {
        if(overlay.getMap() != baiduMap) {
            // setTimeout(function(){
                baiduMap.addOverlay.call(baiduMap, overlay);
            // },10);
        return isOver;
    }
    moralMap.addOverlay = function (overlay) {
        if (overlay.getMap() != baiduMap) {
            // setTimeout(function(){
            baiduMap.addOverlay.call(baiduMap, overlay);
        }
    }
    moralMap.addOverlays = function(overlays) {
        if(overlays != null && typeof overlays == 'object') {
            for(var i in overlays) {
                moralMap.addOverlay(overlays[i]);
            }
        }
            // },10);
            baiduMap.addOverlay.call(baiduMap, overlay);
        }
    }
    moralMap.addOverlays = function (overlays) {
        if (overlays != null && typeof overlays == 'object') {
            for (var i in overlays) {
                moralMap.addOverlay(overlays[i]);
            }
        }
    }
    moralMap.removeOverlay = function(overlay) {
    }
    moralMap.removeOverlay = function (overlay) {
        // baiduMap.removeOverlay(overlay);
        baiduMap.removeOverlay.apply(baiduMap, arguments);
    }
    moralMap.removeOverlays = function(overlays) {
        if(overlays != null && typeof overlays == 'object') {
        baiduMap.removeOverlay.apply(baiduMap, arguments);
    }
    moralMap.removeOverlays = function (overlays) {
        if (overlays != null && typeof overlays == 'object') {
            for (var i in overlays) {
                moralMap.removeOverlay(overlays[i]);
            }
        }
    }
    moralMap.getOverlays = function() {
        var overLays = baiduMap.getOverlays.apply(baiduMap, arguments)
        var moralMarker = [];
        for(var i in overLays) {
            if(overLays[i] instanceof BMap.Overlay) {
                moralMarker.push(overLays[i]);
            }
        }
        return moralMarker;
    }
    moralMap.clearCloseInfoWindow = function () {
        if(!!moralMap["_closeInfoWinTimer"]){
    }
    moralMap.getOverlays = function () {
        var overLays = baiduMap.getOverlays.apply(baiduMap, arguments)
        var moralMarker = [];
        for (var i in overLays) {
            if (overLays[i] instanceof BMap.Overlay) {
                moralMarker.push(overLays[i]);
            }
        }
        return moralMarker;
    }
    moralMap.clearCloseInfoWindow = function () {
        if (!!moralMap["_closeInfoWinTimer"]) {
            clearTimeout(moralMap["_closeInfoWinTimer"]);
            moralMap["_closeInfoWinTimer"] = null;
        }
    }
    moralMap.openInfoWindow = function() {
    moralMap.openInfoWindow = function () {
        moralMap.clearCloseInfoWindow();
        baiduMap.openInfoWindow.apply(baiduMap, arguments);; //开启信息窗口
    }
    moralMap.closeInfoWindow = function() {
        baiduMap.openInfoWindow.apply(baiduMap, arguments); //开启信息窗口
    }
    moralMap.closeInfoWindow = function () {
        var timer = setTimeout(function () {
            baiduMap.closeInfoWindow.apply(baiduMap, arguments);
            moralMap["_closeInfoWinTimer"] = null;
        },1200);
        }, 1200);
        moralMap["_closeInfoWinTimer"] = timer;
    }
    moralMap.clearOverlays = function() {
        baiduMap.clearOverlays();
    }
    moralMap.startZoom = (
        function() {
            var _zoom = null;
            return function(z) {
                if(z == undefined) {
                    return _zoom;
                } else {
                    _zoom = z;
                }
            }
        }
    )();
    moralMap.lazyKeyer = (function() {
        var _key = null;
        return function(key) {
            if(key == undefined) {
                _key = Math.random();
                return _key;
            } else {
                return _key == key;
            }
        };
    })();
    moralMap.getUtf8Length = function(str) {
        return str.replace(/[\u0391-\uFFE5]/g, "cc").length;
    }
    //弹窗处理
    moralMap.showPopupbox = function(id) {
        setTimeout(function () {
    }
    moralMap.clearOverlays = function () {
        baiduMap.clearOverlays();
    }
    moralMap.startZoom = (
        function () {
            var _zoom = null;
            return function (z) {
                if (z == undefined) {
                    return _zoom;
                } else {
                    _zoom = z;
                }
            }
        }
    )();
    moralMap.lazyKeyer = (function () {
        var _key = null;
        return function (key) {
            if (key == undefined) {
                _key = Math.random();
                return _key;
            } else {
                return _key == key;
            }
        };
    })();
    moralMap.getUtf8Length = function (str) {
        return str.replace(/[\u0391-\uFFE5]/g, "cc").length;
    }
    //弹窗处理
    moralMap.showPopupbox = function (id) {
        setTimeout(function () {
            $(id).css('display', 'block');
        },1);
    }
    moralMap.closePopupbox = function(id) {
           $(id).css('display', 'none');
    }
    moralMap.isPopupBoxShow = function(id) {
        return $(id).css('display') == 'block';
    }
    moralMap.onItermClick = function(index,select) {
        var row = moralMap.getPopupEqu(index);
        if(row['mac']==null){
        }, 1);
    }
    moralMap.closePopupbox = function (id) {
        $(id).css('display', 'none');
    }
    moralMap.isPopupBoxShow = function (id) {
        return $(id).css('display') == 'block';
    }
    moralMap.onItermClick = function (index, select) {
        var row = moralMap.getPopupEqu(index);
        if (row['mac'] == null) {
            alert("mac项未配置,请联系管理员设置");
            return;
        }
        var equ = {
            methodName : 'chart'== select ?'showChart':'showDeviceMonitor',
            name: row['name'],
            mac: (row['mac']).toLowerCase(),
            longitude: row['longitude'],
            latitude: row['latitude'],
        var equ = {
            methodName: 'chart' == select ? 'showChart' : 'showDeviceMonitor',
            name: row['name'],
            mac: (row['mac']).toLowerCase(),
            longitude: row['longitude'],
            latitude: row['latitude'],
            monitorPointId: row['monitorPointId'],
            version:row['deviceVersion']['version']
        };
        !!select?equ['monitorPointId'] = row["monitorPointId"]:null;
        var equStr = JSON.stringify(equ);
        if(window["console"]!=undefined){
            version: row['deviceVersion']['version']
        };
        !!select ? equ['monitorPointId'] = row["monitorPointId"] : null;
        var equStr = JSON.stringify(equ);
        if (window["console"] != undefined) {
            console.log(equStr);
        }
        if(!!window['external']&&!!window['external']['callWin']){
        if (!!window['external'] && !!window['external']['callWin']) {
            window['external'].callWin(equStr);
        }else{
                if(!!select&&select==='chart'&&!!window['external']&&!!window['external']['showChartInfo']){
                    window['external'].showChartInfo(equStr);
                }else if(!!window['external']&&!!window['external']['showMonitorInfo']){
                    window['external'].showMonitorInfo(equStr);
                }else{
                    alert(equStr);
        } else {
            if (!!select && select === 'chart' && !!window['external'] && !!window['external']['showChartInfo']) {
                window['external'].showChartInfo(equStr);
            } else if (!!window['external'] && !!window['external']['showMonitorInfo']) {
                window['external'].showMonitorInfo(equStr);
            } else {
                alert(equStr);
            }
        }
    }
    moralMap.setPopupEqus = function (arr) {
        moralMap["_equs"] = arr;
    }
    moralMap.getPopupEquMacs = function () {
        var macs = [];
        if (moralMap["_equs"] != null) {
            for (var i in moralMap["_equs"]) {
                var equ = moralMap["_equs"][i];
                macs.push(equ["mac"]);
            }
        }
        return macs;
    }
    moralMap.getPopupEqu = function (index) {
        if (typeof moralMap["_equs"] === 'object') {
            return moralMap["_equs"][index];
        }
        throw "equs is empty";
    }
    //{id:必填,url:,pagesize:}
    //list加载
    moralMap.initListView = function (option) {
        var listView = {
            load: function (url) {
                if (url != undefined) {
                    $.extend(option, {
                        "url": url
                    });
                }
        }
                option["pageNo"] = 1;
                _load(option);
            }
        };
        listView["option"] = option;
        listView.refreshState = function (equstates) {
            if (equstates != null) {
                for (var i in equstates) {
                    var equstate = equstates[i];
                    var mac = equstate["mac"];
                    var state = equstate["state"];
                    var id_select = "#listview_state_" + mac;
                    var stateObj = _getStateMap(state);
                    var stateClass = stateObj["state"];
                    var stateName = stateObj["stateName"];
                    if (!$(id_select).hasClass(state)) {
                        $(id_select).attr("class", stateClass);
                        $(id_select).text(stateName);
                    }
                }
            }
        }
    }
    moralMap.setPopupEqus = function(arr) {
        moralMap["_equs"] = arr;
    }
    moralMap.getPopupEquMacs = function() {
        var macs = [];
        if(moralMap["_equs"] != null) {
            for(var i in moralMap["_equs"]) {
                var equ = moralMap["_equs"][i];
                macs.push(equ["mac"]);
            }
        }
        return macs;
    }
    moralMap.getPopupEqu = function(index) {
        if(typeof moralMap["_equs"] === 'object') {
            return moralMap["_equs"][index];
        }
        throw "equs is empty";
    }
    //{id:必填,url:,pagesize:}
    //list加载
    moralMap.initListView = function(option) {
        var listView = {
            load: function(url) {
                if(url != undefined) {
                    $.extend(option, {
                        "url": url
                    });
                }
                option["pageNo"] = 1;
                _load(option);
            }
        };
        listView["option"] = option;
        listView.refreshState = function(equstates) {
            if(equstates != null) {
                for(var i in equstates) {
                    var equstate = equstates[i];
                    var mac = equstate["mac"];
                    var state = equstate["state"];
                    var id_select = "#listview_state_" + mac;
                    var stateObj = _getStateMap(state);
                    var stateClass = stateObj["state"];
                    var stateName = stateObj["stateName"];
                    if(!$(id_select).hasClass(state)) {
                        $(id_select).attr("class", stateClass);
                        $(id_select).text(stateName);
                    }
                }
            }
        }
        function _getStateMap(s) {
            var state;
            var stateName;
            switch (parseInt(s)) {
                case 0:
                    state = 'state00';
                    stateName = '正常';
                    break;
                case 1:
                    state = 'state01';
                    stateName = '轻度';
                    break;
                case 2:
                    state = 'state02';
                    stateName = '中度';
                    break;
                case 3:
                    state = 'state03';
                    stateName = '严重';
                    break;
                case 4:
                    state = 'state04';
                    stateName = '维保';
                    break;
            }
            return {
                "state": state,
                "stateName": stateName
            };
        }
        function _getStateMap(s) {
            var state;
            var stateName;
            switch(parseInt(s)) {
                case 0:
                    state = 'state00';
                    stateName = '正常';
                    break;
                case 1:
                    state = 'state01';
                    stateName = '轻度';
                    break;
                case 2:
                    state = 'state02';
                    stateName = '中度';
                    break;
                case 3:
                    state = 'state03';
                    stateName = '严重';
                    break;
                case 4:
                    state = 'state04';
                    stateName = '维保';
                    break;
            }
            return {
                "state": state,
                "stateName": stateName
            };
        }
        function _load(option) {
            if (option['url'] != null && option['url'] != "") {
                var pageSize = option["pageSize"] || 20;
                var pageNo = option["pageNo"] || 1;
                var url = option['url'];
                url += "&pageNo=" + pageNo;
                url += "&pageSize=" + pageSize;
                console.log(url);
                $.ajax({
                    type: "get",
                    cache: false,
                    url: url,
                    async: true,
                    success: function (res) {
                        if (res != null && res.total != null) {
                            var rows = res.data;
                            if (rows == null || rows.length == 0) {
                                $(option['id']).html("没有查询到任何数据!");
                                return;
                            }
                            //储存设备信息
                            moralMap.setPopupEqus(rows);
                            var outHtml = "<ul class='list'>";
                            for (var i = 0; i < rows.length; i++) {
                                var e = rows[i];
                                var state = 'state01';
                                var stateName = '';
                                var s = e['state'] == undefined ? 0 : e['state'];
                                var stateObj = _getStateMap(s);
                                state = stateObj["state"];
                                stateName = stateObj["stateName"];
                                var name = e['name'];
                                if (moralMap.getUtf8Length(name) > 22) {
                                    var stop1 = 0;
                                    for (var stop1_i = 0, len = 0; stop1_i < name.length; stop1_i++) {
                                        len += ((name.charCodeAt(stop1_i) & 0xff00) != 0) ? 2 : 1;
                                        stop1 = stop1_i;
                                        if (len > 8) break;
                                    }
                                    var stop2 = 0;
                                    for (var stop2_i = name.length - 1, len = 0; stop2_i >= 0; stop2_i--) {
                                        len += ((name.charCodeAt(stop2_i) & 0xff00) != 0) ? 2 : 1;
                                        stop2 = stop2_i;
                                        if (len > 10) break;
                                    }
                                    name = name.substring(0, stop1) + "..." + name.substring(stop2, name.length);
                                }
                                var li = "<li id='listview_item_" + e['mac'] + "'><span class='list-chart-span' onclick=moralMap.onItermClick(\"" + i + "\",'chart')><img src='/img/chart.png'></span>"
                                    + "<span id='listview_state_" + e['mac'] + "'class='" + state + "'>" + stateName + "</span>" +
                                    "<div style='cursor: pointer;'  onclick=moralMap.onItermClick(\"" + i + "\")>" + name + "</div></li>";
                                outHtml += li;
                            }
                            outHtml += "</ul>";
                            var total = res['total'];
                            var totalPage = Math.ceil(total / pageSize);
                            if (totalPage > 1) {
                                outHtml += "<div id='page' class='page_div'></div>";
                            }
                            $(option['id']).html(outHtml);
                            if (totalPage > 1) {
                                $("#page").paging({
                                    pageNo: pageNo,
                                    totalPage: totalPage,
                                    totalSize: total,
                                    callback: function (num) {
                                        //先清空内容
                                        $(option['id']).html("");
                                        option["pageNo"] = num;
                                        _load(option);
                                    }
                                })
                            }
                        }
        function _load(option) {
            if(option['url'] != null && option['url'] != "") {
                var pageSize = option["pageSize"] || 20;
                var pageNo = option["pageNo"] || 1;
                var url = option['url'];
                url += "&pageNo=" + pageNo;
                url += "&pageSize=" + pageSize;
                console.log(url);
                $.ajax({
                    type: "get",
                    cache: false,
                    url: url,
                    async: true,
                    success: function(res) {
                        if(res!=null&&res.total!=null) {
                            var rows = res.data;
                            if(rows==null||rows.length == 0) {
                                $(option['id']).html("没有查询到任何数据!");
                                return;
                            }
                            //储存设备信息
                            moralMap.setPopupEqus(rows);
                            var outHtml = "<ul class='list'>";
                            for(var i = 0; i < rows.length; i++) {
                                var e = rows[i];
                                var state = 'state01';
                                var stateName = '';
                                var s = e['state'] == undefined ? 0 : e['state'];
                                var stateObj = _getStateMap(s);
                                state = stateObj["state"];
                                stateName = stateObj["stateName"];
                                var name = e['name'];
                                if(moralMap.getUtf8Length(name) > 22) {
                                    var stop1 = 0;
                                    for(var stop1_i = 0, len = 0; stop1_i < name.length; stop1_i++) {
                                        len += ((name.charCodeAt(stop1_i) & 0xff00) != 0) ? 2 : 1;
                                        stop1 = stop1_i;
                                        if(len > 8) break;
                                    }
                                    var stop2 = 0;
                                    for(var stop2_i = name.length - 1, len = 0; stop2_i >= 0; stop2_i--) {
                                        len += ((name.charCodeAt(stop2_i) & 0xff00) != 0) ? 2 : 1;
                                        stop2 = stop2_i;
                                        if(len > 10) break;
                                    }
                                    name = name.substring(0, stop1) + "..." + name.substring(stop2, name.length);
                                }
                                var li = "<li id='listview_item_" + e['mac'] + "'><span class='list-chart-span' onclick=moralMap.onItermClick(\"" + i + "\",'chart')><img src='/img/chart.png'></span>"
                                    +"<span id='listview_state_" + e['mac'] + "'class='" + state + "'>" + stateName + "</span>" +
                                    "<div style='cursor: pointer;'  onclick=moralMap.onItermClick(\"" + i + "\")>" + name + "</div></li>";
                                outHtml += li;
                            }
                            outHtml += "</ul>";
                            var total = res['total'];
                            var totalPage = Math.ceil(total / pageSize);
                            if(totalPage > 1) {
                                outHtml += "<div id='page' class='page_div'></div>";
                            }
                            $(option['id']).html(outHtml);
                            if(totalPage > 1) {
                                $("#page").paging({
                                    pageNo: pageNo,
                                    totalPage: totalPage,
                                    totalSize: total,
                                    callback: function(num) {
                                        //先清空内容
                                        $(option['id']).html("");
                                        option["pageNo"] = num;
                                        _load(option);
                                    }
                                })
                            }
                        }
                    }
                });
            }
        }
                    }
                });
            }
        }
        return listView;
    }
    moralMap.MoralMarker = function(option) {
        var _option = option;
        var _pointObj = new BMap.Point(_option['longitude'], _option['latitude']);
        var _iconObj = _getMapIcon(_option["state"]);
        this._point = _pointObj;
        //获取MapIcon私有方法
        function _getMapIcon(state) {
            state = state == null ? 0 : state;
            var icon = _option["icon"];
            //var url = icon["stateIcons"][state];
            var url = icon["url"] + state + ".png";
            return new BMap.Icon(url, new BMap.Size(icon["width"], icon["height"]), {
                imageSize: new BMap.Size(icon["width"], icon["height"])
            });
        }
        this.constructor.call(this, _pointObj, {
            icon: _iconObj,
            enableMassClear: true
        })
        //事件注册
        var eventType = ['click'];
        for(var index in eventType) {
            var eventName = eventType[index];
            if(_option[eventName] != undefined && typeof _option[eventName] == "function") {
                var fn = _option[eventName];
                this.addEventListener(eventName, function() {
                    //将arguments转换成数组
                    var args = Array.prototype.slice.call(arguments);
                    fn.apply(this, args);
                });
            }
        }
        return $.extend(this, {
            refreshState: function(state) {
                //状态发生变化的时候刷新 图标
                if(_option['state'] != state){
        return listView;
    }
    moralMap.MoralMarker = function (option) {
        var _option = option;
        var _pointObj = new BMap.Point(_option['longitude'], _option['latitude']);
        var _iconObj = _getMapIcon(_option["state"]);
        this._point = _pointObj;
        //获取MapIcon私有方法
        function _getMapIcon(state) {
            state = state == null ? 0 : state;
            var icon = _option["icon"];
            //var url = icon["stateIcons"][state];
            var url = icon["url"] + state + ".png";
            return new BMap.Icon(url, new BMap.Size(icon["width"], icon["height"]), {
                imageSize: new BMap.Size(icon["width"], icon["height"])
            });
        }
        this.constructor.call(this, _pointObj, {
            icon: _iconObj,
            enableMassClear: true
        })
        //事件注册
        var eventType = ['click'];
        for (var index in eventType) {
            var eventName = eventType[index];
            if (_option[eventName] != undefined && typeof _option[eventName] == "function") {
                var fn = _option[eventName];
                this.addEventListener(eventName, function () {
                    //将arguments转换成数组
                    var args = Array.prototype.slice.call(arguments);
                    fn.apply(this, args);
                });
            }
        }
        return $.extend(this, {
            refreshState: function (state) {
                //状态发生变化的时候刷新 图标
                if (_option['state'] != state) {
                    _option['state'] = state;
                    var iconObj = _getMapIcon(state);
                    this.setIcon(iconObj);
                }
            },
            getOption: function() {
                return _option;
            },
            setOption: function(option) {
                _option = option;
            }
        })
    }
    //new BMap.Marker()这种写法IE7会报错,很奇葩
    moralMap.MoralMarker.prototype = new BMap.Marker();
    //监控点对象 包装Mark对象
    moralMap.Monitorpoint = function(option) {
        if(monitorPointStates){
            for(var i in monitorPointStates){
                var state = monitorPointStates[i];
                if(state.id == option.id){
                    option.state = state.state;
                }
            }
        }
        var icon = {};
        icon["stateIcons"] = ["/img/ico00.png", "/img/ico01.png", "/img/ico02.png", "/img/ico03.png", "/img/ico04.png"];
        icon["url"] = "/img/ico0";
        icon["width"] = 50;
        icon["height"] = 50;
        option["icon"] = icon;
        var moralMarker = new moralMap.MoralMarker(option);
        //        var mark =new BMap.Marker(pointObj,{icon:iconObj});
        //==================infoWindow-start============================
        var infoWindow = (function() {
            //生成信息框
            var winOpts = {
                width: 110, // 信息窗口宽度
                height: 80, // 信息窗口高度
                title: getTitleOutHtml(), // 信息窗口标题
                offset: new BMap.Size(-8,-5) //设置信息窗偏移
            }
                }
            },
            getOption: function () {
                return _option;
            },
            setOption: function (option) {
                _option = option;
            }
        })
    }
    //new BMap.Marker()这种写法IE7会报错,很奇葩
    moralMap.MoralMarker.prototype = new BMap.Marker();
    //监控点对象 包装Mark对象
    moralMap.Monitorpoint = function (option) {
        if (monitorPointStates) {
            for (var i in monitorPointStates) {
                var state = monitorPointStates[i];
                if (state.id == option.id) {
                    option.state = state.state;
                }
            }
        }
        var icon = {};
        icon["stateIcons"] = ["/img/ico00.png", "/img/ico01.png", "/img/ico02.png", "/img/ico03.png", "/img/ico04.png"];
        icon["url"] = "/img/ico0";
        icon["width"] = 50;
        icon["height"] = 50;
        option["icon"] = icon;
        var moralMarker = new moralMap.MoralMarker(option);
        //        var mark =new BMap.Marker(pointObj,{icon:iconObj});
        //==================infoWindow-start============================
        var infoWindow = (function () {
            //生成信息框
            var winOpts = {
                width: 110, // 信息窗口宽度
                height: 80, // 信息窗口高度
                title: getTitleOutHtml(), // 信息窗口标题
                offset: new BMap.Size(-8, -5) //设置信息窗偏移
            }
            function getTitleOutHtml() {
                //title太长用引号...
                var title = (option["name"] == null) ? "" : option["name"];
                if(title.length > 13) {
                    title = title.slice(0, 13) + "...";
                }
                var titleOutHtml = "";
                titleOutHtml += "<p style='width:210px;font:bold 14px/16px arial,sans-serif;margin:0;color:#cc5522;white-space:nowrap;overflow:hidden'"
                titleOutHtml += "title='" + option["name"] + "'>";
                titleOutHtml += title + "</p>";
                return titleOutHtml;
            }
            function getTitleOutHtml() {
                //title太长用引号...
                var title = (option["name"] == null) ? "" : option["name"];
                if (title.length > 13) {
                    title = title.slice(0, 13) + "...";
                }
                var titleOutHtml = "";
                titleOutHtml += "<p style='width:210px;font:bold 14px/16px arial,sans-serif;margin:0;color:#cc5522;white-space:nowrap;overflow:hidden'"
                titleOutHtml += "title='" + option["name"] + "'>";
                titleOutHtml += title + "</p>";
                return titleOutHtml;
            }
            function getAdressOutHtml() {
                var address = (option["address"] == null) ? "" : option["address"];
                if(address.length > 18) {
                    address = address.slice(0, 18) + "...";
                }
                var adressOutHtml = "";
                adressOutHtml += "<div onmouseover='moralMap.clearCloseInfoWindow()'";
                adressOutHtml +=    "onmouseout='moralMap.closeInfoWindow()'";
                adressOutHtml    +=" style='font:12px arial,sans-serif;margin-top:12px'><table cellspacing='0' style='overflow:hidden;table-layout:fixed;width:100%;font:12px arial,sans-serif'>";
                adressOutHtml += "<tbody><tr><td style='vertical-align:top;width:38px;white-space:nowrap;word-break:keep-all'>地址:&nbsp;</td><td style='line-height:16px'>";
                adressOutHtml += address + "&nbsp;";
                adressOutHtml += "</td></tr>";
            function getAdressOutHtml() {
                var address = (option["address"] == null) ? "" : option["address"];
                if (address.length > 18) {
                    address = address.slice(0, 18) + "...";
                }
                var adressOutHtml = "";
                adressOutHtml += "<div onmouseover='moralMap.clearCloseInfoWindow()'";
                adressOutHtml += "onmouseout='moralMap.closeInfoWindow()'";
                adressOutHtml += " style='font:12px arial,sans-serif;margin-top:12px'><table cellspacing='0' style='overflow:hidden;table-layout:fixed;width:100%;font:12px arial,sans-serif'>";
                adressOutHtml += "<tbody><tr><td style='vertical-align:top;width:38px;white-space:nowrap;word-break:keep-all'>地址:&nbsp;</td><td style='line-height:16px'>";
                adressOutHtml += address + "&nbsp;";
                adressOutHtml += "</td></tr>";
                //adressOutHtml += "<tr><td style='width:98%;padding-top:10px;'colspan='2'><a href='javascript:void(0);' style='display:block;position: relative;float: right;' onclick='moralMap.showPointMonitor("+option.id+")'>实时数据>></a></td></tr>";
                adressOutHtml += "</tbody></table></div>";
                return adressOutHtml;
            }
            return new BMap.InfoWindow(getAdressOutHtml(), winOpts);
        })();
        if(moralMarker["infoWindow"] == undefined) {
            moralMarker["infoWindow"] = infoWindow;
        }
        //弹窗打开和关闭
        moralMarker.addEventListener("mouseover", function() {
            moralMap.openInfoWindow(infoWindow, this._point); //开启信息窗口
        });
        moralMarker.addEventListener("mouseout", function() {
                return adressOutHtml;
            }
            return new BMap.InfoWindow(getAdressOutHtml(), winOpts);
        })();
        if (moralMarker["infoWindow"] == undefined) {
            moralMarker["infoWindow"] = infoWindow;
        }
        //弹窗打开和关闭
        moralMarker.addEventListener("mouseover", function () {
            moralMap.openInfoWindow(infoWindow, this._point); //开启信息窗口
        });
        moralMarker.addEventListener("mouseout", function () {
            moralMap.closeInfoWindow();
        });
        //==================infoWindow-end============================
        //储存监控点
        moralMap.putMpoint(option['id'], moralMarker);
        return moralMarker;
    }
    //储存MonitorPoint对象
    moralMap.putMpoint = function(key, obj) {
        if(moralMap['_mpoints'] == undefined) {
            moralMap['_mpoints'] = {};
        }
        moralMap['_mpoints'][key] = obj;
    }
    //key为监控点id
    moralMap.getMpoint = function(key) {
        if(typeof moralMap['_mpoints'] === 'object') {
            return moralMap['_mpoints'][key];
        }
    }
    moralMap.getMpoints = function(key) {
        return moralMap['_mpoints'];
    }
    moralMap.clearMpoints = function() {
        if(moralMap['_mpoints'] != undefined) {
            delete moralMap['_mpoints'];
        }
        });
        //==================infoWindow-end============================
        //储存监控点
        moralMap.putMpoint(option['id'], moralMarker);
        return moralMarker;
    }
    //储存MonitorPoint对象
    moralMap.putMpoint = function (key, obj) {
        if (moralMap['_mpoints'] == undefined) {
            moralMap['_mpoints'] = {};
        }
        moralMap['_mpoints'][key] = obj;
    }
    //key为监控点id
    moralMap.getMpoint = function (key) {
        if (typeof moralMap['_mpoints'] === 'object') {
            return moralMap['_mpoints'][key];
        }
    }
    moralMap.getMpoints = function (key) {
        return moralMap['_mpoints'];
    }
    moralMap.clearMpoints = function () {
        if (moralMap['_mpoints'] != undefined) {
            delete moralMap['_mpoints'];
        }
    }
    //设备以mac为key储存
    //监控点对象 包装MoralMark对象
    moralMap.Equipment = function(option) {
        if(deviceStates){
            for(var i in deviceStates){
                var state = deviceStates[i];
                if(state.id == option.id){
                    option.state = state.state;
                }
            }
        }
        var icon = {};
        icon["stateIcons"] = ["/img/ico_coo00.png", "/img/ico_coo01.png", "/img/ico_coo02.png", "/img/ico_coo03.png", "/img/ico_coo04.png"];
        icon["url"] = "/img/ico_coo0";
        icon["width"] = 50;
        icon["height"] = 60;
        option["icon"] = icon;
        option["offline_width"] = 300;
        option["offline_height"] = 80;
        option["online_width"] = 355;
        option["online_height"] = 385;
        var moralMarker = new moralMap.MoralMarker(option);
        //        var mark =new BMap.Marker(pointObj,{icon:iconObj});
        //==================infoWindow-start============================
    }
        var infoWindow = (function() {
            //生成信息框
            var winOpts = {
                width: 110, // 信息窗口宽度
                height: 80, // 信息窗口高度
                title: getTitleOutHtml(), // 信息窗口标题
                offset: new BMap.Size(-8,-5) //设置信息窗偏移
            }
    //设备以mac为key储存
    //监控点对象 包装MoralMark对象
    moralMap.Equipment = function (option) {
        var sensorsMap;
        var sensorsUnitMap;
        $.ajax({
            url: "getSensorsMap?mac=" + option['mac'],
            type: "get",
            dataType: "json",
            success: function (data) {
                sensorsMap = data.data;
            }
        });
            function getTitleOutHtml() {
                //title太长用引号...
                var title = (option["name"] == null) ? "" : option["name"];
                if(title.length > 13) {
                    title = title.slice(0, 13) + "...";
                }
                var titleOutHtml = "";
                titleOutHtml += "<p style='width:210px;font:bold 14px/16px arial,sans-serif;margin:0;color:#cc5522;white-space:nowrap;overflow:hidden'"
                titleOutHtml += "title='" + option["name"] + "'>";
                titleOutHtml += title + "</p>";
                return titleOutHtml;
            }
        $.ajax({
            url: "getSensorsUnitMap?mac=" + option['mac'],
            type: "get",
            dataType: "json",
            success: function (data) {
                sensorsUnitMap = data.data;
            }
        });
            function getAdressOutHtml() {
                var address = (option["address"] == null) ? "" : option["address"];
                if(address.length > 18) {
                    address = address.slice(0, 18) + "...";
                }
                var adressOutHtml = "";
                adressOutHtml += "<div onmouseover='moralMap.clearCloseInfoWindow()'";
                adressOutHtml +=    "onmouseout='moralMap.closeInfoWindow()'";
                adressOutHtml    +=" style='font:12px arial,sans-serif;margin-top:12px'><table cellspacing='0' style='overflow:hidden;table-layout:fixed;width:100%;font:12px arial,sans-serif'>";
                adressOutHtml += "<tbody><tr><td style='vertical-align:top;width:38px;white-space:nowrap;word-break:keep-all'>地址:&nbsp;</td><td style='line-height:16px'>";
                adressOutHtml += address + "&nbsp;";
                adressOutHtml += "</td></tr>";
                adressOutHtml += "</tbody></table></div>";
                //$("#searchParam").val(address);
                return adressOutHtml;
            }
            return new BMap.InfoWindow(getAdressOutHtml(), winOpts);
        })();
        if (deviceStates) {
            for (var i in deviceStates) {
                var state = deviceStates[i];
                if (state.id == option.id) {
                    option.state = state.state;
                }
            }
        }
        var icon = {};
        icon["stateIcons"] = ["/img/ico_coo00.png", "/img/ico_coo01.png", "/img/ico_coo02.png", "/img/ico_coo03.png", "/img/ico_coo04.png"];
        icon["url"] = "/img/ico_coo0";
        icon["width"] = 50;
        icon["height"] = 60;
        option["icon"] = icon;
        option["offline_width"] = 300;
        option["offline_height"] = 80;
        option["online_width"] = 355;
        option["online_height"] = 385;
        var moralMarker = new moralMap.MoralMarker(option);
        //        var mark =new BMap.Marker(pointObj,{icon:iconObj});
        //==================infoWindow-start============================
        var infoWindow = (function () {
            //生成信息框
            var winOpts = {
                width: 300, // 信息窗口宽度
                title: getTitleOutHtml(), // 信息窗口标题
                offset: new BMap.Size(-8, -5) //设置信息窗偏移
            }
        /*var infoWindow = (function() {
            //生成信息框
            var winOpts = {
                width: option["online_width"], // 信息窗口宽度
                height:option["online_height"], // 信息窗口高度
                title: getTitleOutHtml(), // 信息窗口标题
                offset: new BMap.Size(-2, -10) //设置信息窗偏移
            }
            function getTitleOutHtml() {
                //title太长用引号...
                var title = (option["name"] == null) ? "" : option["name"];
                if (title.length > 13) {
                    title = title.slice(0, 13) + "...";
                }
                var address = (option["address"] == null) ? "" : option["address"];
                if (address.length > 18) {
                    address = address.slice(0, 18) + "...";
                }
                var titleOutHtml = "";
                titleOutHtml += "<p style='width:210px;font:bold 14px/16px arial,sans-serif;margin:0;color:#cc5522;white-space:nowrap;overflow:hidden'"
                titleOutHtml += "title='" + option["name"] + "'>";
                titleOutHtml += title + "</p>";
                titleOutHtml += "<p style='height: 18px;line-height: 18px;font-size: 12px'>地址:&nbsp;" + address + "</p>"
                return titleOutHtml;
            }
            function getTitleOutHtml() {
                //title太长用引号...
                var title = (option["name"] == null) ? "" : option["name"];
                if(title.length > 13) {
                    title = title.slice(0, 13) + "...";
                }
                var titleOutHtml = "";
                titleOutHtml += "<p style='width:210px;font:bold 14px/16px arial,sans-serif;margin:0;color:#cc5522;white-space:nowrap;overflow:hidden'"
                titleOutHtml += "title='" + option["name"] + "'>";
                titleOutHtml += title + "</p>";
                return titleOutHtml;
            }
            return new BMap.InfoWindow("", winOpts);
        })();
        var dataHandle = {
            _getDataOutHtml: function(data) {
                if(data==null||data["state"]==4){
                    return "<br/><h3>设备正在维护升级,暂时没有数据!</h3>";
                }
                var mac = data['mac'];
                var itme_mac_key = "item-" + mac + "-" + key;
                var dataOutHtml = "<div id='"+itme_mac_key+"' class='equ-data-box'><ul class='equ-data-list'>";
                for(var key in data) {
                    if($.inArray(key,showSensorKeys)!=-1) {
                        var dataValue = data[key];
                        var name = sensorNames[key][0];
                        var unit = sensorNames[key][1];
                        var itme_state = dataHandle._getSensorState(data, key);
            return new BMap.InfoWindow("", winOpts);
        })();
        /*var infoWindow = (function() {
            //生成信息框
            var winOpts = {
                width: option["online_width"], // 信息窗口宽度
                height:option["online_height"], // 信息窗口高度
                title: getTitleOutHtml(), // 信息窗口标题
                offset: new BMap.Size(-2, -10) //设置信息窗偏移
            }
            function getTitleOutHtml() {
                //title太长用引号...
                var title = (option["name"] == null) ? "" : option["name"];
                if(title.length > 13) {
                    title = title.slice(0, 13) + "...";
                }
                var titleOutHtml = "";
                titleOutHtml += "<p style='width:210px;font:bold 14px/16px arial,sans-serif;margin:0;color:#cc5522;white-space:nowrap;overflow:hidden'"
                titleOutHtml += "title='" + option["name"] + "'>";
                titleOutHtml += title + "</p>";
                return titleOutHtml;
            }
            return new BMap.InfoWindow("", winOpts);
        })();
        var dataHandle = {
            _getDataOutHtml: function(data) {
                if(data==null||data["state"]==4){
                    return "<br/><h3>设备正在维护升级,暂时没有数据!</h3>";
                }
                var mac = data['mac'];
                var itme_mac_key = "item-" + mac + "-" + key;
                var dataOutHtml = "<div id='"+itme_mac_key+"' class='equ-data-box'><ul class='equ-data-list'>";
                for(var key in data) {
                    if($.inArray(key,showSensorKeys)!=-1) {
                        var dataValue = data[key];
                        var name = sensorNames[key][0];
                        var unit = sensorNames[key][1];
                        var itme_state = dataHandle._getSensorState(data, key);
//                        var itme_name_mac_key = "item-name-" + mac + "-" + key;
                        var itme_data_mac_key = "item-data-" + mac + "-" + key;
                        var item = "<li>";
                        var itme_data_mac_key = "item-data-" + mac + "-" + key;
                        var item = "<li>";
                        item += "<p>"+name+"</p>";
                        item += "<span id='"+itme_data_mac_key+"' class='"+itme_state+"'>"+dataValue+"</span>";
                        item += "<em>"+unit+"</em>";
                        item += "</li>";
                        dataOutHtml += item;
                    }
                        item += "</li>";
                        dataOutHtml += item;
                    }
                }
                dataOutHtml += "</ul></div>";
                return dataOutHtml;
            },
            _getSensorState: function(data, key) {
                var grade="grade";
                }
                dataOutHtml += "</ul></div>";
                return dataOutHtml;
            },
            _getSensorState: function(data, key) {
                var grade="grade";
                var levels;
                if(data["level3"]!=null){
                    levels = data["level3"] instanceof Array ? data["level3"]:JSON.parse(data["level3"]);
                      if($.inArray(key,levels)!=-1){
                           return grade+"03";
                      }
                }
                if(data["level2"] !=null){
                    levels = data["level2"] instanceof Array ? data["level2"]:JSON.parse(data["level2"]);
                   if($.inArray(key,levels)!=-1){
                       return grade+"02";
                   }
                }
                if(data["level1"] !=null){
                if(data["level3"]!=null){
                    levels = data["level3"] instanceof Array ? data["level3"]:JSON.parse(data["level3"]);
                      if($.inArray(key,levels)!=-1){
                           return grade+"03";
                      }
                }
                if(data["level2"] !=null){
                    levels = data["level2"] instanceof Array ? data["level2"]:JSON.parse(data["level2"]);
                   if($.inArray(key,levels)!=-1){
                       return grade+"02";
                   }
                }
                if(data["level1"] !=null){
                    levels = data["level1"] instanceof Array ? data["level1"]:JSON.parse(data["level1"]);
                       if($.inArray(key,levels)!=-1){
                           return grade+"01";
                       }
                }
                return grade+"00";
            }
        };*/
                       if($.inArray(key,levels)!=-1){
                           return grade+"01";
                       }
                }
                return grade+"00";
            }
        };*/
        if(moralMarker["infoWindow"] == undefined) {
            moralMarker["infoWindow"] = infoWindow;
        }
        var  mouseOverHandle = option['mouseover'];
        //弹窗打开和关闭
        /*moralMarker.addEventListener("mouseover", function() {
            if(mouseOverHandle!=null&&mouseOverHandle instanceof  Function){
        if (moralMarker["infoWindow"] == undefined) {
            moralMarker["infoWindow"] = infoWindow;
        }
        var mouseOverHandle = option['mouseover'];
        //弹窗打开和关闭
        /*moralMarker.addEventListener("mouseover", function() {
            if(mouseOverHandle!=null&&mouseOverHandle instanceof  Function){
                //将arguments转换成数组
                var args = Array.prototype.slice.call(arguments);
                mouseOverHandle.apply(this, args);
            }
            moralMap.closeSearchBox();
            baiduMap.openInfoWindow(infoWindow, this._point); //开启信息窗口
            if(infoWindow.getContent() == "") {
                var data = this.getData();
                var option = this.getOption();
                if(data==null||data["state"]==4){
                    infoWindow.setHeight(option["offline_height"]);
                    infoWindow.setWidth(option["offline_width"]);
                }else{
                    infoWindow.setHeight(option["online_height"]);
                    infoWindow.setWidth(option["online_width"]);
                }
                infoWindow.setContent(dataHandle._getDataOutHtml(data));
                infoWindow.redraw();
            }
        });
        moralMarker.addEventListener("mouseout", function() {
            baiduMap.closeInfoWindow();
            infoWindow.setContent("");
            moralMap.openSearchBox();
        });*/
        moralMarker.addEventListener("mouseover", function() {
            moralMap.openInfoWindow(infoWindow, this._point); //开启信息窗口
        });
        moralMarker.addEventListener("mouseout", function() {
            moralMap.closeInfoWindow();
        });
            }
            moralMap.closeSearchBox();
            baiduMap.openInfoWindow(infoWindow, this._point); //开启信息窗口
            if(infoWindow.getContent() == "") {
                var data = this.getData();
                var option = this.getOption();
                if(data==null||data["state"]==4){
                    infoWindow.setHeight(option["offline_height"]);
                    infoWindow.setWidth(option["offline_width"]);
                }else{
                    infoWindow.setHeight(option["online_height"]);
                    infoWindow.setWidth(option["online_width"]);
                }
                infoWindow.setContent(dataHandle._getDataOutHtml(data));
                infoWindow.redraw();
            }
        });
        moralMarker.addEventListener("mouseout", function() {
            baiduMap.closeInfoWindow();
            infoWindow.setContent("");
            moralMap.openSearchBox();
        });*/
        moralMarker.addEventListener("mouseover", function () {
            var obj = {};
            obj['methodName'] = 'deliverMac';
            obj['mac'] = option['mac'];
            var objStr = JSON.stringify(obj);
            if (!!window['external'] && !!window['external']['callWin']) {
                window['external'].callWin(objStr);
            } else {
                alert(objStr);
            }
        //==================infoWindow-end============================
        //储存监控点
        moralMap.putEquipment(option['mac'], moralMarker);
        var _super_refreshState = moralMarker.refreshState;
        //$("#searchParam").val(option['mac']);
        return $.extend(moralMarker, {
            refreshState: function(data) {
                if(data != null && data!="") {
                        var state = this.getOption()["state"];
                        this.setData(data); //更新数据
                        _super_refreshState.call(this, data["state"]);
                        //如果当前窗体时打开的,刷新窗体里的数据
                               /*if(infoWindow.isOpen()) {
                                    if(data["state"]==4){
                                        if(state!=4){
                                         infoWindow.setHeight(option["offline_height"]);
                                         infoWindow.setWidth(option["offline_width"]);
                                          infoWindow.setContent(dataHandle._getDataOutHtml(data));
                                          infoWindow.redraw();
                                        }
                                        return;
                                    }
                                    var mac = data["mac"];
                                    var itme_mac_key = "#item-" + mac + "-" + key;
                                    if($(itme_mac_key).length==0){
                                        infoWindow.setHeight(option["online_height"]);
                                        infoWindow.setWidth(option["online_width"]);
                                        infoWindow.setContent(dataHandle._getDataOutHtml(data));
                                        infoWindow.redraw();
                                    }
                                    for(var key in data) {
                                        if($.inArray(key,showSensorKeys)!=-1) {
                                            var dataValue = data[key];
                                            var itme_state = dataHandle._getSensorState(data, key);
                                            var itme_data_mac_key = "#item-data-" + mac + "-" + key;
                                            if(!$(itme_data_mac_key).hasClass(itme_state)) {
                                                $(itme_data_mac_key).attr("class", itme_state);
                                            }
                                            $(itme_data_mac_key).text(dataValue);
                                        }
                                    }
                            }*/
                }
            },
            setData:function(data){
                var option = this.getOption();
                option["data"] = data;
                this.setOption(option);
            },
            getData:function(){
                return this.getOption()["data"];
            }
        });
    }
    //储存MonitorPoint对象
    moralMap.putEquipment = function(key, obj) {
        if(key!=null&&key!=""){
            moralMap.showSensors = function (jsonData) {
                var address = (option["address"] == null) ? "" : option["address"];
                if (address.length > 18) {
                    address = address.slice(0, 18) + "...";
                }
                var adressOutHtml = '<div style="min-height:20px;overflow:auto;max-height:400px;font-size: 12px;" onmouseover="moralMap.clearCloseInfoWindow()" onmouseout="moralMap.closeInfoWindow()">';
                var y, m, d, h, mm, s;
                var date = new Date(jsonData['time']);
                y = 1900 + date.getYear();
                m = "0" + (date.getMonth() + 1);
                d = "0" + date.getDate();
                h = "0" + date.getHours();
                mm = "0" + date.getMinutes();
                s = "0" + date.getSeconds();
                date = y + "-" + m.substring(m.length - 2, m.length) + "-" + d.substring(d.length - 2, d.length) + " " + h.substring(h.length - 2, h.length) + ":" + mm.substring(mm.length - 2, mm.length) + ":" + s.substring(s.length - 2, s.length);
                adressOutHtml += '<p style="height: 18px;line-height: 18px">' + "时间:&nbsp;" + date + "&nbsp;</p>";
                for (var prop in jsonData) {
                    if (jsonData.hasOwnProperty(prop) && prop != 'ver' && prop != 'methodName' && prop != 'mac' && prop != 'time') {
                        for (var key in sensorsMap) {
                            if (prop == key) {
                                var sensorsDescription = sensorsMap[key];
                            }
                        }
                        for (var key in sensorsUnitMap) {
                            if (prop == key) {
                                var sensorsUnit = sensorsUnitMap[key];
                            }
                        }
                        adressOutHtml += ('<p style="height: 18px;line-height: 18px">' + sensorsDescription + ":" + jsonData[prop] + sensorsUnit + "</p>");
                    }
                }
                adressOutHtml += "</div>";
                infoWindow.setContent(adressOutHtml);
                infoWindow.redraw();
            }
            /*   if (!$.isEmptyObject(sensorInfo)) {
                   moralMap.openInfoWindow(infoWindow, this._point); //开启信息窗口
               }*/
            moralMap.openInfoWindow(infoWindow, this._point); //开启信息窗口
        });
        moralMarker.addEventListener("mouseout", function () {
            var obj = {};
            obj['methodName'] = 'stopDeliverMac';
            var objStr = JSON.stringify(obj);
            if (!!window['external'] && !!window['external']['callWin']) {
                window['external'].callWin(objStr);
            } else {
                alert(objStr);
            }
            moralMap.closeInfoWindow();
        });
        //==================infoWindow-end============================
        //储存监控点
        moralMap.putEquipment(option['mac'], moralMarker);
        var _super_refreshState = moralMarker.refreshState;
        //$("#searchParam").val(option['mac']);
        return $.extend(moralMarker, {
            refreshState: function (data) {
                if (data != null && data != "") {
                    var state = this.getOption()["state"];
                    this.setData(data); //更新数据
                    _super_refreshState.call(this, data["state"]);
                    //如果当前窗体时打开的,刷新窗体里的数据
                    /*if(infoWindow.isOpen()) {
                         if(data["state"]==4){
                             if(state!=4){
                              infoWindow.setHeight(option["offline_height"]);
                              infoWindow.setWidth(option["offline_width"]);
                               infoWindow.setContent(dataHandle._getDataOutHtml(data));
                               infoWindow.redraw();
                             }
                             return;
                         }
                         var mac = data["mac"];
                         var itme_mac_key = "#item-" + mac + "-" + key;
                         if($(itme_mac_key).length==0){
                             infoWindow.setHeight(option["online_height"]);
                             infoWindow.setWidth(option["online_width"]);
                             infoWindow.setContent(dataHandle._getDataOutHtml(data));
                             infoWindow.redraw();
                         }
                         for(var key in data) {
                             if($.inArray(key,showSensorKeys)!=-1) {
                                 var dataValue = data[key];
                                 var itme_state = dataHandle._getSensorState(data, key);
                                 var itme_data_mac_key = "#item-data-" + mac + "-" + key;
                                 if(!$(itme_data_mac_key).hasClass(itme_state)) {
                                     $(itme_data_mac_key).attr("class", itme_state);
                                 }
                                 $(itme_data_mac_key).text(dataValue);
                             }
                         }
                 }*/
                }
            },
            setData: function (data) {
                var option = this.getOption();
                option["data"] = data;
                this.setOption(option);
            },
            getData: function () {
                return this.getOption()["data"];
            }
        });
    }
    //储存MonitorPoint对象
    moralMap.putEquipment = function (key, obj) {
        if (key != null && key != "") {
            key = String.prototype.toLowerCase.call(key);
            if(moralMap['_equipments'] == undefined) {
            if (moralMap['_equipments'] == undefined) {
                moralMap['_equipments'] = {};
            }
            moralMap['_equipments'][key] = obj;
        }
    }
    moralMap.getEquipment = function(key) {
        if(key == null){
            return null;
        }
        key = String.prototype.toLowerCase.call(key);
        if(typeof moralMap['_equipments'] === 'object') {
            return moralMap['_equipments'][key];
        }
    }
    moralMap.getEquipments = function(key) {
        return moralMap['_equipments'];
    }
    moralMap.clearEquipments = function() {
        if(moralMap['_equipments'] != undefined) {
            delete moralMap['_equipments'];
        }
    }
    moralMap.getZoomConfine = function() {
        return 18;
    }
    moralMap.getZoom = function() {
        return baiduMap.getZoom();
    }
    moralMap.getHorizonMarkers = function(isShow) {
        var bounds = moralMap.getBounds();
        var oldMarkerList;
        var isShow = (isShow) ? baiduMap : null;
        if(moralMap.layer() == "equipments") {
            oldMarkerList = moralMap.getEquipments();
        } else {
            oldMarkerList = moralMap.getMpoints();
        }
        var markers = [];
        if(oldMarkerList != null && typeof oldMarkerList == "object") {
            for(var i in oldMarkerList) {
                var oldmarker = oldMarkerList[i];
                if(oldmarker != null && oldmarker instanceof BMap.Overlay && oldmarker.getMap() == isShow) {
                    var option = oldmarker.getOption();
                    if(typeof option == 'object') {
                        var longitude = option['longitude'];
                        var latitude = option['latitude'];
                        // 检索当前坐标范围内的组件
                        if(longitude < bounds.northeastLng && longitude > bounds.southwestLng && latitude < bounds.northeastLat && latitude > bounds.southwestLat) {
                            markers.push(oldmarker);
                        }
                    }
                }
            }
        }
        return markers;
    }
        }
    }
    moralMap.getEquipment = function (key) {
        if (key == null) {
            return null;
        }
        key = String.prototype.toLowerCase.call(key);
        if (typeof moralMap['_equipments'] === 'object') {
            return moralMap['_equipments'][key];
        }
    }
    moralMap.getEquipments = function (key) {
        return moralMap['_equipments'];
    }
    moralMap.clearEquipments = function () {
        if (moralMap['_equipments'] != undefined) {
            delete moralMap['_equipments'];
        }
    }
    moralMap.getZoomConfine = function () {
        return 18;
    }
    moralMap.getZoom = function () {
        return baiduMap.getZoom();
    }
    moralMap.getHorizonMarkers = function (isShow) {
        var bounds = moralMap.getBounds();
        var oldMarkerList;
        var isShow = (isShow) ? baiduMap : null;
        if (moralMap.layer() == "equipments") {
            oldMarkerList = moralMap.getEquipments();
        } else {
            oldMarkerList = moralMap.getMpoints();
        }
        var markers = [];
        if (oldMarkerList != null && typeof oldMarkerList == "object") {
            for (var i in oldMarkerList) {
                var oldmarker = oldMarkerList[i];
                if (oldmarker != null && oldmarker instanceof BMap.Overlay && oldmarker.getMap() == isShow) {
                    var option = oldmarker.getOption();
                    if (typeof option == 'object') {
                        var longitude = option['longitude'];
                        var latitude = option['latitude'];
                        // 检索当前坐标范围内的组件
                        if (longitude < bounds.northeastLng && longitude > bounds.southwestLng && latitude < bounds.northeastLat && latitude > bounds.southwestLat) {
                            markers.push(oldmarker);
                        }
                    }
                }
            }
        }
        return markers;
    }
    moralMap.showPointMonitor = function (id) {
        var mpointMarker = moralMap.getMpoint(id);
        var mpoint = mpointMarker.getOption();
        if(!!mpoint){
            delete mpoint['organization'];
            delete mpoint['icon'];
            delete mpoint['click'];
            if(window["console"]!=undefined){
        if (!!mpoint) {
            delete mpoint['organization'];
            delete mpoint['icon'];
            delete mpoint['click'];
            if (window["console"] != undefined) {
                console.log(mpoint);
            }
            $.get("getvers?mptid="+id,function (res) {
                if(!!res&&res.code==1){
            $.get("getvers?mptid=" + id, function (res) {
                if (!!res && res.code == 1) {
                    mpoint['versions'] = res.data;
                    mpoint['methodName'] = 'showPointMonitor';
                    var mpointStr = JSON.stringify(mpoint);
                    if(!!window['external']&&window['external']['callWin']){
                    if (!!window['external'] && window['external']['callWin']) {
                        window['external'].callWin(mpointStr);
                    }else{
                    } else {
                        alert(JSON.stringify(mpointStr));
                    }
                }
            })
        }else{
            if(window["console"]!=undefined){
        } else {
            if (window["console"] != undefined) {
                console.log("option of mpointMarker is null");
                console.log(mpointMarker);
            }
        }
        }
    }
    }
    moralMap.callJS = function(condition) {
        var new_point = new BMap.Point(condition.longitude, condition.latitude);
        baiduMap.panTo(new_point);
        baiduMap.setCenter(new_point);
        baiduMap.setZoom(condition.type == "mpoint" ? 17 : 18);
        var interval = setInterval(function(){
            var marker;
            if (condition.type == "mpoint") {
                marker = moralMap.getMpoint(condition.id);
            } else if (condition.type == "device") {
                marker = moralMap.getEquipment(condition.mac);
            }
            if(marker){
                clearInterval(interval);
                moralMap.openInfoWindow(marker["infoWindow"], new_point);
            }
        }, 50);
    }
    moralMap.callJS = function (condition) {
        var new_point = new BMap.Point(condition.longitude, condition.latitude);
        baiduMap.panTo(new_point);
        baiduMap.setCenter(new_point);
        baiduMap.setZoom(condition.type == "mpoint" ? 17 : 18);
        var interval = setInterval(function () {
            var marker;
            if (condition.type == "mpoint") {
                marker = moralMap.getMpoint(condition.id);
            } else if (condition.type == "device") {
                marker = moralMap.getEquipment(condition.mac);
            }
            if (marker) {
                clearInterval(interval);
                moralMap.openInfoWindow(marker["infoWindow"], new_point);
            }
        }, 50);
    var deviceStates ;
    }
    var deviceStates;
    var monitorPointStates;
    moralMap.refreshState = function(states) {
        if (!monitorPointStates) {
            monitorPointStates = states;
            deviceStates = [];
            for (var i in states) {
                var state = states[i];
                for (var j in state.devices) {
                    var device = state.devices[j];
                    deviceStates.push(device);
                }
            }
        }
        for (var i in states) {
            var state = states[i];
            var mpoint = moralMap.getMpoint(state.id);
            if (mpoint) {
                mpoint.refreshState(state.state);
            }
            for (var j in state.devices) {
                var marker = state.devices[j];
                var marker_mac = marker["mac"];
                var equipment = moralMap.getEquipment(marker_mac);
                if (equipment) {
                    equipment.refreshState(marker);
                }
            }
        }
    }
    moralMap.refreshState = function (states) {
        if (!monitorPointStates) {
            monitorPointStates = states;
            deviceStates = [];
            for (var i in states) {
                var state = states[i];
                for (var j in state.devices) {
                    var device = state.devices[j];
                    deviceStates.push(device);
                }
            }
        }
        for (var i in states) {
            var state = states[i];
            var mpoint = moralMap.getMpoint(state.id);
            if (mpoint) {
                mpoint.refreshState(state.state);
            }
            for (var j in state.devices) {
                var marker = state.devices[j];
                var marker_mac = marker["mac"];
                var equipment = moralMap.getEquipment(marker_mac);
                if (equipment) {
                    equipment.refreshState(marker);
                }
            }
        }
    }
    window.moralMap = moralMap;
    window.moralMap = moralMap;
})(jQuery, BMap, window);
src/main/webapp/view/map.jsp
@@ -1,679 +1,764 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@page isELIgnored="false" %>
<%
    String version ="1.000004";
    response.setHeader("Cache-Control","no-store");
    response.setHeader("Pragrma","no-cache");
    response.setDateHeader("Expires",0);
    String version = "1.000004";
    response.setHeader("Cache-Control", "no-store");
    response.setHeader("Pragrma", "no-cache");
    response.setDateHeader("Expires", 0);
%>
<!DOCTYPE html>
<head>
    <meta charset="utf-8" />
    <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="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">
        if (typeof (JSON) == 'undefined') {
            $.getScript("js/json2.js");
        }
    </script>
    <script type="text/javascript" src="/js/moralmap.js?version=<%=version%>"></script>
    <script type="text/javascript" src="/js/paging.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: "微软雅黑";
     }
     .anchorBL {
         display: none;
     }
     .main_body{
         border: 0;
         margin: 0;
         width: 100%;
         height: 100%;
         position: relative;
     }
*{
  margin:0;
  padding:0;
  list-style:none;
}
a{
    color: #1900c6;
    text-decoration: none;
    cursor: pointer;
    font-size: 14px;
    font-weight: 300;
}
a:hover {
    text-decoration: underline;
    color: #e60012;
}
#popup_box {
    top: 75px;
    left: 20px;
    position: absolute;
    z-index: 1;
    height: 390px;
    width: 320px;
    margin: 0 auto;
    padding: 10px 25px;
    border: 1px solid #eee;
    background: white;
    display:none;
}
    body,
    html,
    #mapCanvas {
        width: 100%;
        height: 100%;
        overflow: hidden;
        margin: 0;
        z-index: 0;
        font-size: 14px;
        font-family: "微软雅黑";
    }
.listview{
    overflow-x: hidden;
    overflow-y: auto;
    margin: 0;
    padding: 0;
    border: 0;
    height: 390px;
    width: 92%;
    position: absolute;
}
    .anchorBL {
        display: none;
    }
    .main_body {
        border: 0;
        margin: 0;
        width: 100%;
        height: 100%;
        position: relative;
    }
    * {
        margin: 0;
        padding: 0;
        list-style: none;
    }
    a {
        color: #1900c6;
        text-decoration: none;
        cursor: pointer;
        font-size: 14px;
        font-weight: 300;
    }
    a:hover {
        text-decoration: underline;
        color: #e60012;
    }
    #popup_box {
        top: 75px;
        left: 20px;
        position: absolute;
        z-index: 1;
        height: 390px;
        width: 320px;
        margin: 0 auto;
        padding: 10px 25px;
        border: 1px solid #eee;
        background: white;
        display: none;
    }
    .listview {
        overflow-x: hidden;
        overflow-y: auto;
        margin: 0;
        padding: 0;
        border: 0;
        height: 390px;
        width: 92%;
        position: absolute;
    }
.search_box {
    /*border-bottom: 1px solid #eee;*/
    border-radius: 4px;
    top: 20px;
    left: 21px;
    clear: both;
    zoom: 1;
    padding-top: 10px;
    padding-right: 15px;
    position: absolute;
    z-index: 1;
    height: 36px;
    width: 354px;
    background: white;
}
    .search_box {
        /*border-bottom: 1px solid #eee;*/
        border-radius: 4px;
        top: 20px;
        left: 21px;
        clear: both;
        zoom: 1;
        padding-top: 10px;
        padding-right: 15px;
        position: absolute;
        z-index: 1;
        height: 36px;
        width: 354px;
        background: white;
    }
.search_box input {
    margin: 0;
    width: 245px;
    float: right;
    height: 24px;
    line-height: 24px
}
    .search_box input {
        margin: 0;
        width: 245px;
        float: right;
        height: 24px;
        line-height: 24px
    }
.search_box button {
    margin-left: 10px;
    float: right;
    width: 70px;
    height: 28px;
    line-height: 28px;
    cursor:pointer;
}
    .search_box button {
        margin-left: 10px;
        float: right;
        width: 70px;
        height: 28px;
        line-height: 28px;
        cursor: pointer;
    }
.list {
    padding: 10px 0;
    clear: both;
    zoom: 1
}
.list-chart-span {
    cursor: pointer;
    background-color: #4c9bf1
}
.list li {
    padding: 10px 0;
    border-bottom: 1px dotted #eee;
    line-height: 40px;
    height: 40px;
    font-size: 20px;
    /*cursor: pointer;*/
}
    .list {
        padding: 10px 0;
        clear: both;
        zoom: 1
    }
.list span{
    float: right;
    position: relative;
    right: 5px;
    border-radius:4px;
    width: 40px;
    text-align: center;
    height: 24px;
    line-height: 24px;
    font-size: 14px;
    font-weight: bolder;
    color:  white;
    margin: 10px 0;
    padding:2px 0;
    margin-right: 8px;
}
    .list-chart-span {
        cursor: pointer;
        background-color: #4c9bf1
    }
.list .state00 {
background-color: #00C600
}
    .list li {
        padding: 10px 0;
        border-bottom: 1px dotted #eee;
        line-height: 40px;
        height: 40px;
        font-size: 20px;
        /*cursor: pointer;*/
    }
.list .state01 {
    background-color: #FF9;
    color: #ff7f00;
}
    .list span {
        float: right;
        position: relative;
        right: 5px;
        border-radius: 4px;
        width: 40px;
        text-align: center;
        height: 24px;
        line-height: 24px;
        font-size: 14px;
        font-weight: bolder;
        color: white;
        margin: 10px 0;
        padding: 2px 0;
        margin-right: 8px;
    }
.list .state02 {
    background-color: #F93;
}
    .list .state00 {
        background-color: #00C600
    }
.list .state03 {
    background-color: #F00;
}
    .list .state01 {
        background-color: #FF9;
        color: #ff7f00;
    }
.list .state04 {
    /*background-color: #eee;*/
    /*color: #777 ;*/
    background-color: #738d99 ;
}
            /*
              * 外面盒子样式---自己定义
              */
            .page_div {
                margin:0 auto;
                font-size: 10px;
                font-family: "microsoft yahei";
                color: #666666;
                box-sizing: border-box;
                text-align: center;
            }
            /*
             * 页数按钮样式
             */
            .page_div a {
                min-width:23px;
                height: 22px;
                border: 1px solid #dce0e0!important;
                text-align: center;
                margin: 0 0px;
                margin-right: 1px;
                cursor: pointer;
                line-height: 22px;
                color: #666666;
                font-size: 10px;
                display: inline-block;
            }
            #firstPage,
            #lastPage {
                width: 40px;
                color: #0073A9;
                border: 1px solid #0073A9!important;
            }
            #prePage,
            #nextPage {
                width: 50px;
                color: #0073A9;
                border: 1px solid #0073A9!important;
            }
            .page_div .current {
                background-color: #0073A9;
                border-color: #0073A9;
                color: #FFFFFF;
            }
            .totalPages {
                margin: 0 10px;
            }
            .totalPages span,
            .totalSize span {
                color: #0073A9;
                margin: 0 5px;
            }
.equ-data-box{width:351px;border:1px solid #dad5d5;background-color:#f6f6f6;padding:12px 0 12px 0;border-radius:3px;margin:10px auto;overflow:hidden;zoom:1;}
.equ-data-box .equ-data-list{width:330px;margin:0 0 0 10px;border-left:1px solid #d0cdcd;border-top:1px solid #d0cdcd;border-bottom:1px solid #d0cdcd;overflow:hidden;zoom:1;}
.equ-data-box .equ-data-list li{background:url(/img/list_li_bg.png) left top repeat-x;width:109px;height:165px;float:left;text-align:center;color:#282828;border-right:1px solid #d0cdcd}
.equ-data-box .equ-data-list li p{height:55px;padding-top:12px;line-height:55px;font-size:18px}
.equ-data-box .equ-data-list li span{height:60px;line-height:50px;display:block;color:#fff;font-size:40px}
.equ-data-box .equ-data-list li em{font-size:14px;line-height:28px;font-style:normal;display:block}
.equ-data-box .equ-data-list li .grade00{background:url(/img/list_num_green.png) left top no-repeat}
.equ-data-box .equ-data-list li .grade01{color:#282828;background:url(/img/list_num_yellow.png) left top no-repeat}
.equ-data-box .equ-data-list li .grade02{background:url(/img/list_num_orange.png) left top no-repeat}
.equ-data-box .equ-data-list li .grade03{background:url(/img/list_num_red.png) left top no-repeat}
.tools_box{
    position: absolute;
    height: 120px;
    width: 400px;
    right: 1px;
    top: 20px;
    z-index: 1;
}
 .tools_box .charts_btn {
    position: relative;
    float: right;
    margin: 0;
    border: 0;
    height: 85px;
    width: 85px;
    background:url(/img/charts_btn_bg_1.png) left top no-repeat;
    background-size: 70%;
 }
 .tools_box .charts_btn:hover {
     cursor:pointer;
     background:url(/img/charts_btn_bg_2.png) left top no-repeat;
     background-size: 70%;
 }
    .list .state02 {
        background-color: #F93;
    }
    .list .state03 {
        background-color: #F00;
    }
    .list .state04 {
        /*background-color: #eee;*/
        /*color: #777 ;*/
        background-color: #738d99;
    }
    /*
      * 外面盒子样式---自己定义
      */
    .page_div {
        margin: 0 auto;
        font-size: 10px;
        font-family: "microsoft yahei";
        color: #666666;
        box-sizing: border-box;
        text-align: center;
    }
    /*
     * 页数按钮样式
     */
    .page_div a {
        min-width: 23px;
        height: 22px;
        border: 1px solid #dce0e0 !important;
        text-align: center;
        margin: 0 0px;
        margin-right: 1px;
        cursor: pointer;
        line-height: 22px;
        color: #666666;
        font-size: 10px;
        display: inline-block;
    }
    #firstPage,
    #lastPage {
        width: 40px;
        color: #0073A9;
        border: 1px solid #0073A9 !important;
    }
    #prePage,
    #nextPage {
        width: 50px;
        color: #0073A9;
        border: 1px solid #0073A9 !important;
    }
    .page_div .current {
        background-color: #0073A9;
        border-color: #0073A9;
        color: #FFFFFF;
    }
    .totalPages {
        margin: 0 10px;
    }
    .totalPages span,
    .totalSize span {
        color: #0073A9;
        margin: 0 5px;
    }
    .equ-data-box {
        width: 351px;
        border: 1px solid #dad5d5;
        background-color: #f6f6f6;
        padding: 12px 0 12px 0;
        border-radius: 3px;
        margin: 10px auto;
        overflow: hidden;
        zoom: 1;
    }
    .equ-data-box .equ-data-list {
        width: 330px;
        margin: 0 0 0 10px;
        border-left: 1px solid #d0cdcd;
        border-top: 1px solid #d0cdcd;
        border-bottom: 1px solid #d0cdcd;
        overflow: hidden;
        zoom: 1;
    }
    .equ-data-box .equ-data-list li {
        background: url(/img/list_li_bg.png) left top repeat-x;
        width: 109px;
        height: 165px;
        float: left;
        text-align: center;
        color: #282828;
        border-right: 1px solid #d0cdcd
    }
    .equ-data-box .equ-data-list li p {
        height: 55px;
        padding-top: 12px;
        line-height: 55px;
        font-size: 18px
    }
    .equ-data-box .equ-data-list li span {
        height: 60px;
        line-height: 50px;
        display: block;
        color: #fff;
        font-size: 40px
    }
    .equ-data-box .equ-data-list li em {
        font-size: 14px;
        line-height: 28px;
        font-style: normal;
        display: block
    }
    .equ-data-box .equ-data-list li .grade00 {
        background: url(/img/list_num_green.png) left top no-repeat
    }
    .equ-data-box .equ-data-list li .grade01 {
        color: #282828;
        background: url(/img/list_num_yellow.png) left top no-repeat
    }
    .equ-data-box .equ-data-list li .grade02 {
        background: url(/img/list_num_orange.png) left top no-repeat
    }
    .equ-data-box .equ-data-list li .grade03 {
        background: url(/img/list_num_red.png) left top no-repeat
    }
    .tools_box {
        position: absolute;
        height: 120px;
        width: 400px;
        right: 1px;
        top: 20px;
        z-index: 1;
    }
    .tools_box .charts_btn {
        position: relative;
        float: right;
        margin: 0;
        border: 0;
        height: 85px;
        width: 85px;
        background: url(/img/charts_btn_bg_1.png) left top no-repeat;
        background-size: 70%;
    }
    .tools_box .charts_btn:hover {
        cursor: pointer;
        background: url(/img/charts_btn_bg_2.png) left top no-repeat;
        background-size: 70%;
    }
</style>
<body>
<div class="main_body">
        <div class="tools_box">
            <div class="charts_btn">
            </div>
        </div>
        <!-- <div class="search_box">
        <button id="searchBtn" type="button">搜索</button>
        <input id="searchParam"/>
        </div> -->
      <!-- <div id="popup_box">
            <div id="equ_list" class="listview">
            </div>
      </div> -->
      <div id="mapCanvas"></div>
      <div id="mapParams" style="display: none;">
          ${requestScope.mapParams}
      </div>
    <div class="tools_box">
        <div class="charts_btn">
        </div>
    </div>
    <!--<div class="search_box">
        <button id="searchBtn" type="button">搜索</button>
        <textarea style="width: 200px;height:200px;" id="searchParam"></textarea>
    </div>-->
    <!-- <div id="popup_box">
          <div id="equ_list" class="listview">
          </div>
    </div> -->
    <div id="mapCanvas"></div>
    <div id="mapParams" style="display: none;">
        ${requestScope.mapParams}
    </div>
</div>
</body>
</html>
<script>
//页面初始化
(function($) {
    var moralMap = window.moralMap;
    var params = $.parseJSON($("#mapParams").html());
    moralMap['params'] = params;
    var mapType = getUrlParam("mapType");
    var mapOption = {};
    if(!!mapType && !!eval(mapType)) {
        mapOption["mapType"] = eval(mapType);
    }
    var showZoom = getUrlParam("showZoom");
    //通过地区名称加载地图
    moralMap.mapInit(params["regionName"],mapOption,showZoom);
    //列表对象
     var listView  =moralMap.initListView({id: "#equ_list",pageSize:12});
     window["listView"] = listView;
    //展示设备列表,click事件触发
    function showEqus(obj) {
    //页面初始化
    (function ($) {
        var moralMap = window.moralMap;
        var params = $.parseJSON($("#mapParams").html());
        moralMap['params'] = params;
        var mapType = getUrlParam("mapType");
        var mapOption = {};
        if (!!mapType && !!eval(mapType)) {
            mapOption["mapType"] = eval(mapType);
        }
        var showZoom = getUrlParam("showZoom");
        //通过地区名称加载地图
        moralMap.mapInit(params["regionName"], mapOption, showZoom);
        //列表对象
        var listView = moralMap.initListView({id: "#equ_list", pageSize: 12});
        window["listView"] = listView;
        var params = moralMap['params'];
        var mpoint = obj.currentTarget.getOption();
        //$("#searchParam").val(mpoint['name']);
        var url = 'get-devices-by-mid-oid?mpId=' + mpoint['id'] + "&orgId=" + params['orgId'];
        listView.load(url);
        moralMap.showPopupbox("#popup_box");
    }
    function loadLazy(url,paramMap,callBack,lazyKeyer){
        if(lazyKeyer==undefined){
            lazyKeyer = moralMap.lazyKeyer;
        }
        var key = lazyKeyer();
        setTimeout(function(){
            //只执行最后一次请求,防止地图抖动
            if(key==undefined||lazyKeyer(key)){
                        $.ajax({
                        type:"get",
                        url:url,
                        data:paramMap,
                        async:false,
                        cache: false,
                        success:function(res){
                            if(callBack!=null){
                                if(res.code==1&&lazyKeyer(key)){
                                    callBack(res.data);
                                }
                            }
                        }
                    });
            }
        },500);
        //展示设备列表,click事件触发
        function showEqus(obj) {
    }
   function loadOverlays(url,callback){
        //从缓存取
        var oldMarkerList = moralMap.getHorizonMarkers();
        moralMap.addOverlays(oldMarkerList);
        //从缓存取
        //超界到后台取数据,地图为空时取
        if(moralMap.isOverBounds()||moralMap.getOverlays().length==0){
            var maxBounds = moralMap.getMaxBounds();
            var paramMap = {};
            paramMap["orgId"]=  params['orgId'];
            paramMap["regionCode"]=  params['regionCode'];
            // 为了适配旧接口
            paramMap["Fe"]=  maxBounds.northeastLat;//东北角纬度,大一点
            paramMap["Ge"]=  maxBounds.northeastLng;//东北角经度,大一点
            paramMap["Ke"]=  maxBounds.southwestLat;//西北角纬度坐标,小一点
            paramMap["Le"]=  maxBounds.southwestLng;//西北角经度坐标,小一点
            // $.extend(paramMap,maxBounds);
            loadLazy(url,paramMap,callback);
        }
    }
    function addOverEquipments(jsonData){
        if(moralMap.layer()=="equipments"){
        var objs = jsonData = null?[]:jsonData;
        for(var i in objs) {
                var obj = objs[i];
                if(moralMap.getEquipment(obj["mac"])==null){
                    obj['mouseover'] = function (type) {
                        if(type.target.getData()==null){
                            //当前设备数据为空时,设备悬停事件中 刷新一下数据
                            //refreshAllState();
            var params = moralMap['params'];
            var mpoint = obj.currentTarget.getOption();
            //$("#searchParam").val(mpoint['name']);
            var url = 'get-devices-by-mid-oid?mpId=' + mpoint['id'] + "&orgId=" + params['orgId'];
            listView.load(url);
            moralMap.showPopupbox("#popup_box");
        }
        function loadLazy(url, paramMap, callBack, lazyKeyer) {
            if (lazyKeyer == undefined) {
                lazyKeyer = moralMap.lazyKeyer;
            }
            var key = lazyKeyer();
            setTimeout(function () {
                //只执行最后一次请求,防止地图抖动
                if (key == undefined || lazyKeyer(key)) {
                    $.ajax({
                        type: "get",
                        url: url,
                        data: paramMap,
                        async: false,
                        cache: false,
                        success: function (res) {
                            if (callBack != null) {
                                if (res.code == 1 && lazyKeyer(key)) {
                                    callBack(res.data);
                                }
                            }
                        }
                    });
                }
            }, 500);
        }
        function loadOverlays(url, callback) {
            //从缓存取
            var oldMarkerList = moralMap.getHorizonMarkers();
            moralMap.addOverlays(oldMarkerList);
            //从缓存取
            //超界到后台取数据,地图为空时取
            if (moralMap.isOverBounds() || moralMap.getOverlays().length == 0) {
                var maxBounds = moralMap.getMaxBounds();
                var paramMap = {};
                paramMap["orgId"] = params['orgId'];
                paramMap["regionCode"] = params['regionCode'];
                // 为了适配旧接口
                paramMap["Fe"] = maxBounds.northeastLat;//东北角纬度,大一点
                paramMap["Ge"] = maxBounds.northeastLng;//东北角经度,大一点
                paramMap["Ke"] = maxBounds.southwestLat;//西北角纬度坐标,小一点
                paramMap["Le"] = maxBounds.southwestLng;//西北角经度坐标,小一点
                // $.extend(paramMap,maxBounds);
                loadLazy(url, paramMap, callback);
            }
        }
        function addOverEquipments(jsonData) {
            if (moralMap.layer() == "equipments") {
                var objs = jsonData = null ? [] : jsonData;
                for (var i in objs) {
                    var obj = objs[i];
                    if (moralMap.getEquipment(obj["mac"]) == null) {
                        obj['mouseover'] = function (type) {
                            if (type.target.getData() == null) {
                                //当前设备数据为空时,设备悬停事件中 刷新一下数据
                                //refreshAllState();
                            }
                        }
                        obj['click'] = function () {
                            var _obj = this.getOption();
                            if (_obj['mac'] == null) {
                                alert("mac项未配置,请联系管理员设置");
                                return;
                            }
                            var equ = {
                                methodName: 'showDeviceMonitor',
                                name: _obj['name'],
                                mac: (_obj['mac']).toLowerCase(),
                                longitude: _obj['longitude'],
                                latitude: _obj['latitude'],
                                monitorPointId: _obj['monitorPointId'],
                                version: _obj['deviceVersion']['version']
                            }
                            var equStr = JSON.stringify(equ);
                            if (window["console"] != undefined) {
                            }
                            if (!!window['external'] && !!window['external']['callWin']) {
                                window['external'].callWin(equStr);
                            } else if (!!window['external'] && !!window['external']['showMonitorInfo']) {
                                window['external'].showMonitorInfo(equStr);
                            } else {
                                alert(equStr);
                            }
                        }
                        var moralMask = new moralMap.Equipment(obj);
                        moralMap.addOverlay(moralMask);
                    }
                    obj['click'] = function(){
                                       var _obj = this.getOption();
                                       if(_obj['mac']==null){
                                           alert("mac项未配置,请联系管理员设置");
                                           return;
                                       }
                                        var equ = {
                                        methodName : 'showDeviceMonitor',
                                        name: _obj['name'],
                                        mac: (_obj['mac']).toLowerCase(),
                                        longitude: _obj['longitude'],
                                        latitude: _obj['latitude'],
                                        monitorPointId: _obj['monitorPointId'],
                                        version:_obj['deviceVersion']['version']
                                    }
                                    var equStr = JSON.stringify(equ);
                                    if(window["console"]!=undefined){
                                    }
                                    if(!!window['external']&&!!window['external']['callWin']){
                                        window['external'].callWin(equStr);
                                    }else
                                    if(!!window['external']&&!!window['external']['showMonitorInfo']){
                                        window['external'].showMonitorInfo(equStr);
                                    }else{
                                        alert(equStr);
                                    }
                              }
                   var moralMask = new moralMap.Equipment(obj);
                   moralMap.addOverlay(moralMask);
                }
        }
        }
    }
  function addOverMpoints(data){
          if(moralMap.layer()=="monitorpoints"){
          var mpoints = data = null?[]:data;
        for(var i in mpoints) {
                var mpParam = mpoints[i];
                if(moralMap.getMpoint(mpParam["id"])==null){
                    mpParam['click'] = showEqus;
                   var mpObj = new moralMap.Monitorpoint(mpParam);
                   moralMap.addOverlay(mpObj);
                }
        }
          }
    }
    //地图load
    moralMap.addEventListener("load", function(type, target) {
                }
            }
        }
        function addOverMpoints(data) {
            if (moralMap.layer() == "monitorpoints") {
                var mpoints = data = null ? [] : data;
                for (var i in mpoints) {
                    var mpParam = mpoints[i];
                    if (moralMap.getMpoint(mpParam["id"]) == null) {
                        mpParam['click'] = showEqus;
                        var mpObj = new moralMap.Monitorpoint(mpParam);
                        moralMap.addOverlay(mpObj);
                    }
                }
            }
        }
        //地图load
        moralMap.addEventListener("load", function (type, target) {
            var paramMap = {};
            var bounds = moralMap.getBounds();
            paramMap["areaCode"]=  params['areaCode'];
            paramMap["orgId"]=  params['orgId'];
            // 为了适配旧接口
            paramMap["Fe"]=  bounds.northeastLat;//东北角纬度,大一点
            paramMap["Ge"]=  bounds.northeastLng;//东北角经度,大一点
            paramMap["Ke"]=  bounds.southwestLat;//西北角纬度坐标,小一点
            paramMap["Le"]=  bounds.southwestLng;//西北角经度坐标,小一点
            loadLazy("getMonitorpointList",paramMap,addOverMpoints);
            paramMap["areaCode"] = params['areaCode'];
            paramMap["orgId"] = params['orgId'];
            // 为了适配旧接口
            paramMap["Fe"] = bounds.northeastLat;//东北角纬度,大一点
            paramMap["Ge"] = bounds.northeastLng;//东北角经度,大一点
            paramMap["Ke"] = bounds.southwestLat;//西北角纬度坐标,小一点
            paramMap["Le"] = bounds.southwestLng;//西北角经度坐标,小一点
            loadLazy("getMonitorpointList", paramMap, addOverMpoints);
            //startRefreshPage();
            showGrid();
    });
    //地图加载完成后 加载监控点,速度慢
    moralMap.addEventListener("tilesloaded", function(type, target) {
        showGrid();
    });
        });
        //地图加载完成后 加载监控点,速度慢
        moralMap.addEventListener("tilesloaded", function (type, target) {
            showGrid();
        });
    //map为地图对象
    // TODO 临时
    function getBounds() {
        var bs = moralMap.getBounds();  //获取当前地图范围的经纬度
        // var bssw = bs.getSouthWest();        //获取西南角的经纬度(左下端点)
        // var bsne = bs.getNorthEast();        //获取东北角的经纬度(右上端点)
        if(!getBounds.topLeftAnchor){
            getBounds.topLeftAnchor = {};
            getBounds.topLeftAnchor.x0 =  bs.southwestLng;
            getBounds.topLeftAnchor.y0 =  bs.northeastLat;
        }
        return { 'x1': bs.southwestLng, 'y1': bs.southwestLat, 'x2': bs.northeastLng, 'y2': bs.northeastLat };
    }
    /**
     * 显示网格
     */
    // TODO 临时
    function showGrid(){
        var isShowGrid = getUrlParam("isShowGrid");
        if(!!isShowGrid){
            $(".tools_box").hide();
        }
        // if(!isShowGrid||moralMap.getZoom()<14){
        if(!isShowGrid||moralMap.getZoom()<14){
           return;
        }
        var XY = getBounds();
        var polygons = [];
        console.log(XY);
        var X1 = XY.x1;
        var Y2 = XY.y2;
        var X0 = getBounds.topLeftAnchor.x0;
        var Y0 = getBounds.topLeftAnchor.y0;
        var width = 0.0063;
        var height = 0.0048;
        // var multiple = 1000000;
        if(!!getBounds.topLeftAnchor) {
            X1=X0 + Math.ceil((X1-X0)/width-1)*width;
            Y2=Y0 + Math.ceil((Y2-Y0)/height)*height;
        }
        for (var i = X1; i < XY.x2; i = i + width) {
            for (var j = Y2; j > XY.y1; j = j - height) {
                //此类表示绘制一个多边形覆盖物(注意:一定要下面的Point列表为多变形的顶点,描线顺序为从上到下,从左到右,顺序乱了,绘制出来的多边形也会乱,如图二所示,图二是将顶点的顺序给错了(网格左上端点,网格左下端点,网格右上端点,网格右下端点))
                var polygon = new BMap.Polygon([
                    new BMap.Point(i, j),    //网格左上端点
                    new BMap.Point(i, j-height),  //网格左下端点
                    new BMap.Point(i+width, j-height),     //网格右下端点
                    new BMap.Point(i+width, j)            //网格右上端点
                ], {strokeColor:"blue", strokeWeight:2, strokeOpacity:0.5, fillOpacity:0.1});
                // polygon .addEventListener("click",function clickFunction(){
                //     alert("你居然敢点我");
                // });
                // moralMap.addOverlay(polygon);
                polygons.push(polygon);
        //map为地图对象
        // TODO 临时
        function getBounds() {
            var bs = moralMap.getBounds();  //获取当前地图范围的经纬度
            // var bssw = bs.getSouthWest();        //获取西南角的经纬度(左下端点)
            // var bsne = bs.getNorthEast();        //获取东北角的经纬度(右上端点)
            if (!getBounds.topLeftAnchor) {
                getBounds.topLeftAnchor = {};
                getBounds.topLeftAnchor.x0 = bs.southwestLng;
                getBounds.topLeftAnchor.y0 = bs.northeastLat;
            }
            return {'x1': bs.southwestLng, 'y1': bs.southwestLat, 'x2': bs.northeastLng, 'y2': bs.northeastLat};
        }
        moralMap.addOverlays(polygons);
        if(!!showGrid.polygons){
            moralMap.removeOverlays(showGrid.polygons);
        }
        showGrid.polygons = polygons;
    }
    // 点击事件关闭 弹窗列表
    moralMap.addEventListener("click", function(type, target) {
        //moralMap.closePopupbox("#popup_box");
    });
    //地图放大缩小事件时,关闭弹窗
    moralMap.addEventListener('zoomstart', function(type) {});
    //地图放大缩小事件时,关闭弹窗
    moralMap.addEventListener('zoomend', function(type) {
         var endZoom = this.getZoom();
         if(endZoom>=moralMap.getZoomConfine()){//超过界限加载设备
                 loadOverlays("get-devices",addOverEquipments);
         }else{
                loadOverlays("get-monitorpoints",addOverMpoints);
         }
         //moralMap.closePopupbox("#popup_box");
    });
    moralMap.addEventListener('moveend', function(type) {
         var endZoom = this.getZoom();
         if(endZoom>=moralMap.getZoomConfine()){//超过界限加载设备
                 loadOverlays("get-devices",addOverEquipments);
         }else{
                loadOverlays("get-monitorpoints",addOverMpoints);
         }
         //moralMap.closePopupbox("#popup_box");
    });
    //搜索框单击事件
    $("#searchBtn").click(
        function(e) {
            var param = encodeURI($("#searchParam").val());
            //moralMap.showPopupbox("#popup_box");
            var url = 'get-devices-for-popup?name=' + param + "&orgId=" + params['orgId'];
            listView.load(url);
        }
    );
    $("#searchParam").keydown(function (event) {
        if(event.keyCode ==13) {
            $("#searchBtn").trigger("click");
        }
    })
    //跳转表单页面按钮事件
    $(".charts_btn").click(
        function (e) {
            var obj = {};
            obj['methodName'] = 'showChart';
            var objStr = JSON.stringify(obj);
            if(!!window['external']&&!!window['external']['callWin']){
                window['external'].callWin(objStr);
            }else
            if(!!window['external']&&!!window['external']['showChartInfo']){
                window['external'].showChartInfo("");
            }else{
                alert(objStr);
            }
        }
    );
    //页面刷新
})(jQuery);
    var _intervalNum=-1;
    function startRefreshPage(){
         if(_intervalNum==-1){
               _intervalNum = self.setInterval(function(){
              refreshAllState();
             },10000);
         }
         setTimeout(function(){
        /**
         * 显示网格
         */
        // TODO 临时
        function showGrid() {
            var isShowGrid = getUrlParam("isShowGrid");
            if (!!isShowGrid) {
                $(".tools_box").hide();
            }
            // if(!isShowGrid||moralMap.getZoom()<14){
            if (!isShowGrid || moralMap.getZoom() < 14) {
                return;
            }
            var XY = getBounds();
            var polygons = [];
            console.log(XY);
            var X1 = XY.x1;
            var Y2 = XY.y2;
            var X0 = getBounds.topLeftAnchor.x0;
            var Y0 = getBounds.topLeftAnchor.y0;
            var width = 0.0063;
            var height = 0.0048;
            // var multiple = 1000000;
            if (!!getBounds.topLeftAnchor) {
                X1 = X0 + Math.ceil((X1 - X0) / width - 1) * width;
                Y2 = Y0 + Math.ceil((Y2 - Y0) / height) * height;
            }
            for (var i = X1; i < XY.x2; i = i + width) {
                for (var j = Y2; j > XY.y1; j = j - height) {
                    //此类表示绘制一个多边形覆盖物(注意:一定要下面的Point列表为多变形的顶点,描线顺序为从上到下,从左到右,顺序乱了,绘制出来的多边形也会乱,如图二所示,图二是将顶点的顺序给错了(网格左上端点,网格左下端点,网格右上端点,网格右下端点))
                    var polygon = new BMap.Polygon([
                        new BMap.Point(i, j),    //网格左上端点
                        new BMap.Point(i, j - height),  //网格左下端点
                        new BMap.Point(i + width, j - height),     //网格右下端点
                        new BMap.Point(i + width, j)            //网格右上端点
                    ], {strokeColor: "blue", strokeWeight: 2, strokeOpacity: 0.5, fillOpacity: 0.1});
                    // polygon .addEventListener("click",function clickFunction(){
                    //     alert("你居然敢点我");
                    // });
                    // moralMap.addOverlay(polygon);
                    polygons.push(polygon);
                }
            }
            moralMap.addOverlays(polygons);
            if (!!showGrid.polygons) {
                moralMap.removeOverlays(showGrid.polygons);
            }
            showGrid.polygons = polygons;
        }
        // 点击事件关闭 弹窗列表
        moralMap.addEventListener("click", function (type, target) {
            //moralMap.closePopupbox("#popup_box");
        });
        //地图放大缩小事件时,关闭弹窗
        moralMap.addEventListener('zoomstart', function (type) {
        });
        //地图放大缩小事件时,关闭弹窗
        moralMap.addEventListener('zoomend', function (type) {
            var endZoom = this.getZoom();
            if (endZoom >= moralMap.getZoomConfine()) {//超过界限加载设备
                loadOverlays("get-devices", addOverEquipments);
            } else {
                loadOverlays("get-monitorpoints", addOverMpoints);
            }
            //moralMap.closePopupbox("#popup_box");
        });
        moralMap.addEventListener('moveend', function (type) {
            var endZoom = this.getZoom();
            if (endZoom >= moralMap.getZoomConfine()) {//超过界限加载设备
                loadOverlays("get-devices", addOverEquipments);
            } else {
                loadOverlays("get-monitorpoints", addOverMpoints);
            }
            //moralMap.closePopupbox("#popup_box");
        });
        //搜索框单击事件
        $("#searchBtn").click(
            function (e) {
                var param = encodeURI($("#searchParam").val());
                //moralMap.showPopupbox("#popup_box");
                var url = 'get-devices-for-popup?name=' + param + "&orgId=" + params['orgId'];
                listView.load(url);
            }
        );
        $("#searchParam").keydown(function (event) {
            if (event.keyCode == 13) {
                $("#searchBtn").trigger("click");
            }
        })
        //跳转表单页面按钮事件
        $(".charts_btn").click(
            function (e) {
                var obj = {};
                obj['methodName'] = 'showChart';
                var objStr = JSON.stringify(obj);
                if (!!window['external'] && !!window['external']['callWin']) {
                    window['external'].callWin(objStr);
                } else if (!!window['external'] && !!window['external']['showChartInfo']) {
                    window['external'].showChartInfo("");
                } else {
                    alert(objStr);
                }
            }
        );
        //页面刷新
    })(jQuery);
    var _intervalNum = -1;
    function startRefreshPage() {
        if (_intervalNum == -1) {
            _intervalNum = self.setInterval(function () {
                refreshAllState();
            }, 10000);
        }
        setTimeout(function () {
            refreshAllState();
         },5000);
        }, 5000);
    }
    function stopRefreshPage(){
    function stopRefreshPage() {
        window.clearInterval(_intervalNum);
        _intervalNum=-1;
        _intervalNum = -1;
    }
    //刷新页面
    function refreshAllState() {
        var parma={};
        /* if(moralMap.isPopupBoxShow("#popup_box")) {
            var popupEquMacs = moralMap.getPopupEquMacs();
            if(popupEquMacs!=null&&popupEquMacs.length>0){
                parma["popupEquMacs"] = popupEquMacs;
            }
        } */
        //从缓存取
        var oldMarkerList = moralMap.getHorizonMarkers(true);
        var markerKeys = [];
        key = moralMap.layer()=="monitorpoints"?"id":"mac";
        for(var i in oldMarkerList){
            var marker = oldMarkerList[i];
            var key_value = marker.getOption()[key];
            if(key_value!=null){
                markerKeys.push(key_value);
            }
        }
        parma["layer"] =moralMap.layer();
        parma["markerKeys"] = markerKeys;
    //刷新页面
    function refreshAllState() {
        var parma = {};
        /* if(moralMap.isPopupBoxShow("#popup_box")) {
            var popupEquMacs = moralMap.getPopupEquMacs();
            if(popupEquMacs!=null&&popupEquMacs.length>0){
                parma["popupEquMacs"] = popupEquMacs;
            }
        } */
        //从缓存取
        var oldMarkerList = moralMap.getHorizonMarkers(true);
        var markerKeys = [];
        key = moralMap.layer() == "monitorpoints" ? "id" : "mac";
        for (var i in oldMarkerList) {
            var marker = oldMarkerList[i];
            var key_value = marker.getOption()[key];
            if (key_value != null) {
                markerKeys.push(key_value);
            }
        }
        parma["layer"] = moralMap.layer();
        parma["markerKeys"] = markerKeys;
        parma["areaCode"] = moralMap['params']["areaCode"];
        parma["orgId"] = moralMap['params']["orgId"];
        if((!!parma["popupEquMacs"]&&!!parma["popupEquMacs"].length)
            ||(!!parma["markerKeys"]&&!!parma["markerKeys"].length)){
        if ((!!parma["popupEquMacs"] && !!parma["popupEquMacs"].length)
            || (!!parma["markerKeys"] && !!parma["markerKeys"].length)) {
            $.ajax({
                type: "post",
                url: "get-real-state-data",
                data:JSON.stringify(parma),
                dataType:"json",
                contentType:"application/json;charset=utf-8",
                data: JSON.stringify(parma),
                dataType: "json",
                contentType: "application/json;charset=utf-8",
                cache: false,
                async: true,
                success: function(data) {
                    if(data!=null&&typeof data === 'object') {
                success: function (data) {
                    if (data != null && typeof data === 'object') {
                        var resultMap = data["extData"];
                        if(resultMap==null){
                        if (resultMap == null) {
                            return;
                        }
                        var markers = resultMap["markers"];
                        var layer = resultMap["layer"];
                        if(markers!=null&&markers.length>0){
                            if(layer=="monitorpoints"){
                                for(var a_i in markers){
                        if (markers != null && markers.length > 0) {
                            if (layer == "monitorpoints") {
                                for (var a_i in markers) {
                                    var marker = markers[a_i];
                                    var marker_id = marker["id"];
                                    var mpoint = moralMap.getMpoint(marker_id);
                                    if(mpoint!=null){
                                    if (mpoint != null) {
                                        mpoint.refreshState(marker["state"]);
                                    }
//                                    mpoint.refreshState(4);
                                }
                            }else{
                                for(var b_i in markers){
                            } else {
                                for (var b_i in markers) {
                                    var marker = markers[b_i];
                                    var marker_mac = marker["mac"];
                                    var equipment = moralMap.getEquipment(marker_mac);
                                    if(equipment!=null){
                                    if (equipment != null) {
                                        equipment.refreshState(marker);
                                    }
                                }
                            }
                            var equ = {
                                        methodName : 'refreshState',
                                        markers : markers,
                                        layer : layer
                                    }
                                methodName: 'refreshState',
                                markers: markers,
                                layer: layer
                            }
                            var equStr = JSON.stringify(equ);
                            if(window["console"]!=undefined){
                            }
                                  if(!!window['external']&&!!window['external']['callWin']){
                                      window['external'].callWin(equStr);
                            }
                            if (window["console"] != undefined) {
                            }
                            if (!!window['external'] && !!window['external']['callWin']) {
                                window['external'].callWin(equStr);
                            }
                        }
                        if(resultMap["popupEquStates"]!=null){
                        if (resultMap["popupEquStates"] != null) {
                            listView.refreshState(resultMap["popupEquStates"]);
                        }
                    }
                }
            });
        }
    }
    function callJS(jsonData){
        var jsonData = JSON.parse(jsonData);
        var methodName = jsonData.methodName;
        if("JumpBaiduMap" == methodName){
            moralMap.callJS(jsonData);
        } else if ("RefreshState" == methodName) {
            //$("#searchParam").val(JSON.stringify(jsonData));
            var states = jsonData.states;
            moralMap.refreshState(states);
        }
    }
        }
    }
    function callJS(jsonData) {
        // $("#searchParam").val(jsonData);
        var jsonData = JSON.parse(jsonData);
        var methodName = jsonData.methodName;
        if ("JumpBaiduMap" == methodName) {
            moralMap.callJS(jsonData);
        } else if ("RefreshState" == methodName) {
            var states = jsonData.states;
            moralMap.refreshState(states);
        } else if ("DeliverSensors" == methodName) {
            moralMap.showSensors(jsonData);
        }
    }
</script>