百度地圖上的標註物太多致使界面卡頓的解決辦法

百度地圖的API雖說覆蓋物多了能夠用聚合,但聚合使用下來,性能並很差html

目前解決方案是,獲取地圖的左下角和右上角的經緯度,而後根據此經緯度範圍,到數據庫中搜索,把該區域內的覆蓋物取出標註到地圖上。git

 

生成地圖時綁定事件,在移動和縮放時觸發:ajax

Js代碼   收藏代碼
  1.  map.addEventListener("moveend", queryInRect);  
  2. //map.addEventListener("moveend", funMoveend);  
  3.           
  4. map.addEventListener("zoomend", queryInRect);  

 

 

Js代碼   收藏代碼
  1. function queryInRect (event) {  
  2.     //alert(event.type + '==' + event.target);  
  3.       
  4.     var cp = map.getBounds(); // 返回map可視區域,以地理座標表示  
  5.     var sw = cp.getSouthWest(); // 返回矩形區域的西南角  
  6.     var ne = cp.getNorthEast(); // 返回矩形區域的東北角  
  7.   
  8.     zoom = map.getZoom();  
  9.   
  10.     if (zoom < defaultShowLampZoom) {  
  11.         // 放大級數小於17後,清除全部覆蓋物,但百度覆蓋物不能刪除  
  12.         // 之後作成清除非網關控制器 TODO  
  13.         var markers = getCurrentMarkers();  
  14.         for (var i=0; i<markers.length; i++) {  
  15.             map.removeOverlay(markers[i]);  
  16.         }  
  17.         return;  
  18.     }  
  19.       
  20.     //若是放大到17級別,則取屏幕範圍內的標註  
  21.     var param = {  
  22.         swlng : sw.lng,  
  23.         swlat : sw.lat,  
  24.         nelng : ne.lng,  
  25.         nelat : ne.lat  
  26.     };  
  27.     $.ajax( {  
  28.         type : "POST",  
  29.         url : "queryInRect.action",  
  30.         data : param,  
  31.         dataType : "json",  
  32.         success : function(jsonData) {  
  33.             // 把數據加載到地圖上去。  
  34.             if (jsonData.rtnMsg) {  
  35.                 alert(jsonData.rtnMsg);  
  36.                 //window.location.href = "login.html";  
  37.                 return;  
  38.             }  
  39.             if (jsonData.controllerList) {  
  40.                 // 添加前清空地圖上標記物 TODO,應該是有,則不更新,而不是如今所有清空  
  41.                 // 但不清空百度地圖標記物  
  42.                 var markers = getCurrentMarkers();  
  43.                 for (var i=0; i<markers.length; i++) {  
  44.                     map.removeOverlay(markers[i]);  
  45.                 }  
  46.                   
  47.                 $.each(jsonData.controllerList, function(i, controller) {  
  48.                     var point = new BMap.Point(controller.longitude, controller.latitude);  
  49.                     addMarker(point, controller, markers);  
  50.                       
  51.                     // 插入或更新數據採集的taffyDb  
  52.                     insertOrUpdateDataCollection(controller);  
  53.                     // 插入或更新故障信息的taffyDb  
  54.                     insertOrUpdateAlarm(controller);  
  55.                       
  56.                 });  
  57.                   
  58.                 //若是是樹上右擊定位而來,0.8秒後設置燈跳躍  
  59.                 if (find) {  
  60.                     setTimeout(jumpIcon, 800);  
  61.                 }  
  62.             }  
  63.         },  
  64.         error : function(XMLHttpRequest, textStatus, errorThrown) {  
  65.             //if (XMLHttpRequest.status == 12029 && textStatus == "error") {  
  66.             //alert("WEB服務器未啓動或已宕機,請聯繫管理員。");  
  67.             //}  
  68.             alert('服務器異常');  
  69.         }  
  70.     });  
  71. }  
相關文章
相關標籤/搜索