原文:https://blog.csdn.net/yzyssg1/article/details/73130679
百度地圖的API雖然說覆蓋物多了可以用聚合,但聚合使用下來邦尊,性能并不好
目前解決方案是,獲取地圖的左下角和右上角的經(jīng)緯度优烧,然后根據(jù)此經(jīng)緯度范圍蝉揍,到數(shù)據(jù)庫中搜索,把該區(qū)域內(nèi)的覆蓋物取出標(biāo)注到地圖上畦娄。
生成地圖時綁定事件又沾,在移動和縮放時觸發(fā):
Js代碼
map.addEventListener("moveend", queryInRect);
//map.addEventListener("moveend", funMoveend);
map.addEventListener("zoomend", queryInRect);
Js代碼
function queryInRect (event) {
//alert(event.type + '==' + event.target);
var cp = map.getBounds(); // 返回map可視區(qū)域弊仪,以地理坐標(biāo)表示
var sw = cp.getSouthWest(); // 返回矩形區(qū)域的西南角
var ne = cp.getNorthEast(); // 返回矩形區(qū)域的東北角
zoom = map.getZoom();
if (zoom < defaultShowLampZoom) {
// 放大級數(shù)小于17后,清除所有覆蓋物杖刷,但百度覆蓋物不能刪除
// 以后做成清除非網(wǎng)關(guān)控制器 TODO
var markers = getCurrentMarkers();
for (var i=0; i<markers.length; i++) {
map.removeOverlay(markers[i]);
}
return;
}
//如果放大到17級別励饵,則取屏幕范圍內(nèi)的標(biāo)注
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) {
// 把數(shù)據(jù)加載到地圖上去。
if (jsonData.rtnMsg) {
alert(jsonData.rtnMsg);
//window.location.href = "login.html";
return;
}
if (jsonData.controllerList) {
// 添加前清空地圖上標(biāo)記物 TODO滑燃,應(yīng)該是有役听,則不更新,而不是現(xiàn)在全部清空
// 但不清空百度地圖標(biāo)記物
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);
// 插入或更新數(shù)據(jù)采集的taffyDb
insertOrUpdateDataCollection(controller);
// 插入或更新故障信息的taffyDb
insertOrUpdateAlarm(controller);
});
//如果是樹上右擊定位而來表窘,0.8秒后設(shè)置燈跳躍
if (find) {
setTimeout(jumpIcon, 800);
}
}
},
error : function(XMLHttpRequest, textStatus, errorThrown) {
//if (XMLHttpRequest.status == 12029 && textStatus == "error") {
//alert("WEB服務(wù)器未啟動或已宕機典予,請聯(lián)系管理員。");
//}
alert('服務(wù)器異常');
}
});
}