From 850d0f291dc614c495685d1b82a145823b318201 Mon Sep 17 00:00:00 2001 From: xufenglei <xufenglei> Date: Wed, 14 Nov 2018 16:27:20 +0800 Subject: [PATCH] update --- src/main/webapp/js/moralmap.js | 326 ++++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 240 insertions(+), 86 deletions(-) diff --git a/src/main/webapp/js/moralmap.js b/src/main/webapp/js/moralmap.js index 83dadce..5017183 100644 --- a/src/main/webapp/js/moralmap.js +++ b/src/main/webapp/js/moralmap.js @@ -44,22 +44,37 @@ * ��������������������� */ moralMap.mapInit = function() { - baiduMap = new BMap.Map("mapCanvas", { - minZoom: 12, - maxZoom: 20 - }); // ������Map������,���������������������������/��������� + var defaultParam = { + minZoom: 12, + maxZoom: 20 + }; + 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); - var showZoom = 12; - if(arguments.length == 2) { - map.centerAndZoom(new BMap.Point(arguments[0], arguments[1]), showZoom); - } else if(arguments.length == 1) { - map.centerAndZoom(arguments[0], showZoom); - } + var showZoom = !!arguments[2] + && 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]; + map.setCurrentCity(cityName); + // ���������������������������������������,��������������������� + // ��������������������������� + 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({ @@ -107,7 +122,7 @@ var startZoom = moralMap.startZoom(); //������key������������������ // var key = moralMap.lazyKeyer(); - var confine = moralMap.getZooMConfine(); + var confine = moralMap.getZoomConfine(); if(endZoom > startZoom) { //������������������ if(endZoom >= confine && startZoom <= confine) { @@ -139,52 +154,66 @@ } } })(); + // ��������������� + moralMap.Bounds = function (baiduBounds) { + if(!!baiduBounds){ + this.northeastLng = baiduBounds.xl.lng;//��������������������������� + this.northeastLat = baiduBounds.xl.lat;//��������������������������� + this.southwestLng = baiduBounds.Ol.lng;//��������������������������������� + this.southwestLat = baiduBounds.Ol.lat;//��������������������������������� + }else{ + this.northeastLng = null;//��������������������������� + this.northeastLat = null;//��������������������������� + this.southwestLng = null;//��������������������������������� + this.southwestLat = null;//��������������������������������� + } + } moralMap.getBounds = function() { - return baiduMap.getBounds(); //������bounds; + return new moralMap.Bounds(baiduMap.getBounds()); //������bounds; } moralMap.getMaxBounds = function() { var key = "_" + moralMap.layer() + "_bounds"; return this[key]; } - moralMap.setMaxBounds = function(bounds) { + moralMap.setMaxBounds = function(bs) { var key = "_" + moralMap.layer() + "_bounds"; - var _bounds = this[key]; //������������ - if(_bounds == undefined) { - _bounds = {}; - } - if(bounds == undefined) { - bounds = baiduMap.getBounds(); - } + var _bounds = !!this[key]?this[key]:new moralMap.Bounds(); //������������ //������������������ - _bounds["Fe"] = _bounds['Fe'] || bounds['Fe']; //��������������������������� - _bounds["Ge"] = _bounds['Ge'] || bounds['Ge']; //��������������������������� - _bounds["Ke"] = _bounds['Ke'] || bounds['Ke']; //��������������������������������� - _bounds["Le"] = _bounds['Le'] || bounds['Le']; //��������������������������������� - _bounds["Fe"] = bounds['Fe'] > _bounds["Fe"] ? bounds['Fe'] : _bounds["Fe"]; //��������������������������� - _bounds["Ge"] = bounds['Ge'] > _bounds["Ge"] ? bounds['Ge'] : _bounds["Ge"]; //��������������������������� - _bounds["Ke"] = bounds['Ke'] < _bounds["Ke"] ? bounds['Ke'] : _bounds["Ke"]; //��������������������������������� - _bounds["Le"] = bounds['Le'] < _bounds["Le"] ? bounds['Le'] : _bounds["Le"]; //��������������������������������� + _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 bounds = baiduMap.getBounds(); //������������ - if(_bounds == null) { + var bs = moralMap.getBounds(); //������������ + if(!_bounds) { isOver = true; - moralMap.setMaxBounds(bounds); + moralMap.setMaxBounds(bs); } else { - isOver = (bounds['Fe'] > _bounds["Fe"] || bounds['Ge'] > _bounds["Ge"] || bounds['Ke'] < _bounds["Ke"] || bounds['Le'] < _bounds["Le"]); - moralMap.setMaxBounds(bounds); + 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(){ + // setTimeout(function(){ baiduMap.addOverlay.call(baiduMap, overlay); - },10); + // },10); + baiduMap.addOverlay.call(baiduMap, overlay); } } moralMap.addOverlays = function(overlays) { @@ -195,8 +224,16 @@ } } - moralMap.removeOverlay = function() { + moralMap.removeOverlay = function(overlay) { + // baiduMap.removeOverlay(overlay); 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) @@ -208,11 +245,22 @@ } return moralMarker; } + moralMap.clearCloseInfoWindow = function () { + if(!!moralMap["_closeInfoWinTimer"]){ + clearTimeout(moralMap["_closeInfoWinTimer"]); + moralMap["_closeInfoWinTimer"] = null; + } + } moralMap.openInfoWindow = function() { - baiduMap.openInfoWindow.apply(baiduMap, arguments); + moralMap.clearCloseInfoWindow(); + baiduMap.openInfoWindow.apply(baiduMap, arguments);; //������������������ } moralMap.closeInfoWindow = function() { - baiduMap.closeInfoWindow.apply(baiduMap, arguments); + var timer = setTimeout(function () { + baiduMap.closeInfoWindow.apply(baiduMap, arguments); + moralMap["_closeInfoWinTimer"] = null; + },1200); + moralMap["_closeInfoWinTimer"] = timer; } moralMap.clearOverlays = function() { baiduMap.clearOverlays(); @@ -245,10 +293,12 @@ } //������������ moralMap.showPopupbox = function(id) { - $(id).css('display', 'block'); + setTimeout(function () { + $(id).css('display', 'block'); + },1); } moralMap.closePopupbox = function(id) { - $(id).css('display', 'none'); + $(id).css('display', 'none'); } moralMap.isPopupBoxShow = function(id) { return $(id).css('display') == 'block'; @@ -260,31 +310,31 @@ return; } 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(!!select&&select==='chart'){ - if(window['external']&&window['external']['showChartInfo']){ - window['external'].showChartInfo(equStr); - }else{ - alert(equStr); - } + if(window["console"]!=undefined){ + console.log(equStr); + } + 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(window["console"]!=undefined){ - console.log(equStr); - } - if(window['external']&&window['external']['showMonitorInfo']){ - window['external'].showMonitorInfo(equStr); - }else{ - alert(equStr); - } - } + } moralMap.setPopupEqus = function(arr) { moralMap["_equs"] = arr; @@ -401,7 +451,7 @@ state = stateObj["state"]; stateName = stateObj["stateName"]; var name = e['name']; - if(moralMap.getUtf8Length(name) > 24) { + 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; @@ -506,16 +556,16 @@ icon["width"] = 50; icon["height"] = 50; option["icon"] = icon; - var moralMask = new moralMap.MoralMarker(option); + var moralMarker = new moralMap.MoralMarker(option); // var mark =new BMap.Marker(pointObj,{icon:iconObj}); //==================infoWindow-start============================ var infoWindow = (function() { //��������������� var winOpts = { width: 110, // ������������������ - height: 50, // ������������������ + height: 80, // ������������������ title: getTitleOutHtml(), // ������������������ - offset: new BMap.Size(-2, -21) //��������������������� + offset: new BMap.Size(-8,-5) //��������������������� } function getTitleOutHtml() { @@ -537,29 +587,32 @@ address = address.slice(0, 18) + "..."; } var adressOutHtml = ""; - adressOutHtml += "<div 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 += "<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'>��������� </td><td style='line-height:16px'>"; adressOutHtml += address + " "; - adressOutHtml += "</td></tr></tbody></table></div>"; + 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(moralMask["infoWindow"] == undefined) { - moralMask["infoWindow"] = infoWindow; + if(moralMarker["infoWindow"] == undefined) { + moralMarker["infoWindow"] = infoWindow; } //��������������������� - moralMask.addEventListener("mouseover", function() { - baiduMap.openInfoWindow(infoWindow, this._point); //������������������ + moralMarker.addEventListener("mouseover", function() { + moralMap.openInfoWindow(infoWindow, this._point); //������������������ }); - moralMask.addEventListener("mouseout", function() { - baiduMap.closeInfoWindow(); + moralMarker.addEventListener("mouseout", function() { + moralMap.closeInfoWindow(); }); //==================infoWindow-end============================ //��������������� - moralMap.putMpoint(option['id'], moralMask); - return moralMask; + moralMap.putMpoint(option['id'], moralMarker); + return moralMarker; } //������MonitorPoint������ moralMap.putMpoint = function(key, obj) { @@ -595,16 +648,58 @@ option["offline_height"] = 80; option["online_width"] = 355; option["online_height"] = 385; - var moralMask = new moralMap.MoralMarker(option); + 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 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'>��������� </td><td style='line-height:16px'>"; + adressOutHtml += address + " "; + adressOutHtml += "</td></tr>"; + adressOutHtml += "</tbody></table></div>"; + //$("#searchParam").val(address); + return adressOutHtml; + } + return new BMap.InfoWindow(getAdressOutHtml(), winOpts); + })(); + + /*var infoWindow = (function() { //��������������� var winOpts = { width: option["online_width"], // ������������������ height:option["online_height"], // ������������������ title: getTitleOutHtml(), // ������������������ - offset: new BMap.Size(-2, -30) //��������������������� + offset: new BMap.Size(-2, -10) //��������������������� } function getTitleOutHtml() { @@ -672,14 +767,14 @@ } return grade+"00"; } - }; + };*/ - if(moralMask["infoWindow"] == undefined) { - moralMask["infoWindow"] = infoWindow; + if(moralMarker["infoWindow"] == undefined) { + moralMarker["infoWindow"] = infoWindow; } var mouseOverHandle = option['mouseover']; //��������������������� - moralMask.addEventListener("mouseover", function() { + /*moralMarker.addEventListener("mouseover", function() { if(mouseOverHandle!=null&&mouseOverHandle instanceof Function){ //���arguments��������������� var args = Array.prototype.slice.call(arguments); @@ -701,23 +796,32 @@ infoWindow.redraw(); } }); - moralMask.addEventListener("mouseout", function() { + 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(); + }); + //==================infoWindow-end============================ //��������������� - moralMap.putEquipment(option['mac'], moralMask); - var _super_refreshState = moralMask.refreshState; - return $.extend(moralMask, { + 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(infoWindow.isOpen()) { if(data["state"]==4){ if(state!=4){ infoWindow.setHeight(option["offline_height"]); @@ -746,7 +850,7 @@ $(itme_data_mac_key).text(dataValue); } } - } + }*/ } }, setData:function(data){ @@ -786,11 +890,14 @@ delete moralMap['_equipments']; } } - moralMap.getZooMConfine = function() { + moralMap.getZoomConfine = function() { return 18; } + moralMap.getZoom = function() { + return baiduMap.getZoom(); + } moralMap.getHorizonMarkers = function(isShow) { - var bounds = baiduMap.getBounds(); + var bounds = moralMap.getBounds(); var oldMarkerList; var isShow = (isShow) ? baiduMap : null; if(moralMap.layer() == "equipments") { @@ -807,7 +914,8 @@ if(typeof option == 'object') { var longitude = option['longitude']; var latitude = option['latitude']; - if(longitude < bounds['Ge'] && longitude > bounds['Le'] && latitude < bounds['Fe'] && latitude > bounds['Ke']) { + // ������������������������������������ + if(longitude < bounds.northeastLng && longitude > bounds.southwestLng && latitude < bounds.northeastLat && latitude > bounds.southwestLat) { markers.push(oldmarker); } } @@ -816,5 +924,51 @@ } 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){ + console.log(mpoint); + } + $.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']){ + window['external'].callWin(mpointStr); + }else{ + alert(JSON.stringify(mpointStr)); + } + } + }) + }else{ + if(window["console"]!=undefined){ + console.log("option of mpointMarker is null"); + console.log(mpointMarker); + } + } + + } + + moralMap.callJS = function(condition) { + var condition = JSON.parse(condition); + var new_point = new BMap.Point(condition.longitude, condition.latitude); + baiduMap.panTo(new_point); + baiduMap.setCenter(new_point); + if (condition.type == "mpoint") { + baiduMap.setZoom(17); + moralMap.openInfoWindow(moralMap.getMpoint(condition.id)["infoWindow"], new_point); + } else if (condition.type == "device") { + baiduMap.setZoom(18); + moralMap.openInfoWindow(moralMap.getEquipment(condition.mac)["infoWindow"], new_point); + } + } + + window.moralMap = moralMap; })(jQuery, BMap, window); \ No newline at end of file -- Gitblit v1.8.0