百度地圖的API雖說覆蓋物多了能夠用聚合,但聚合使用下來,性能並很差html
目前解決方案是,獲取地圖的左下角和右上角的經緯度,而後根據此經緯度範圍,到數據庫中搜索,把該區域內的覆蓋物取出標註到地圖上。git
生成地圖時綁定事件,在移動和縮放時觸發:ajax
- map.addEventListener("moveend", queryInRect);
-
- map.addEventListener("zoomend", queryInRect);
- function queryInRect (event) {
-
-
- var cp = map.getBounds();
- var sw = cp.getSouthWest();
- var ne = cp.getNorthEast();
-
- zoom = map.getZoom();
-
- if (zoom < defaultShowLampZoom) {
-
-
- var markers = getCurrentMarkers();
- for (var i=0; i<markers.length; i++) {
- map.removeOverlay(markers[i]);
- }
- return;
- }
-
-
- var param = {
- swlng : sw.lng,
- swlat : sw.lat,
- nelng : ne.lng,
- nelat : ne.lat
- };
- $.ajax( {
- type : "POST",
- url : "queryInRect.action",
- data : param,
- dataType : "json",
- success : function(jsonData) {
-
- if (jsonData.rtnMsg) {
- alert(jsonData.rtnMsg);
-
- return;
- }
- if (jsonData.controllerList) {
-
-
- var markers = getCurrentMarkers();
- for (var i=0; i<markers.length; i++) {
- map.removeOverlay(markers[i]);
- }
-
- $.each(jsonData.controllerList, function(i, controller) {
- var point = new BMap.Point(controller.longitude, controller.latitude);
- addMarker(point, controller, markers);
-
-
- insertOrUpdateDataCollection(controller);
-
- insertOrUpdateAlarm(controller);
-
- });
-
-
- if (find) {
- setTimeout(jumpIcon, 800);
- }
- }
- },
- error : function(XMLHttpRequest, textStatus, errorThrown) {
-
-
-
- alert('服務器異常');
- }
- });
- }