問題描述:有些時候地圖的中心座標,以及縮放級別要根據標註點來確定,所以有時候要根據標註點座標,動態的設置中心座標和縮放級別
代碼如下:
//根據原始數據計算中心座標和縮放級別,併爲地圖設置中心座標和縮放級別。
function setZoom(points){
if(points.length>0){
var maxLng = points[0].lng;
var minLng = points[0].lng;
var maxLat = points[0].lat;
var minLat = points[0].lat;
var res;
for (var i = points.length - 1; i >= 0; i--) {
res = points[i];
if(res.lng > maxLng) maxLng =res.lng;
if(res.lng < minLng) minLng =res.lng;
if(res.lat > maxLat) maxLat =res.lat;
if(res.lat < minLat) minLat =res.lat;
};
var cenLng =(parseFloat(maxLng)+parseFloat(minLng))/2;
var cenLat = (parseFloat(maxLat)+parseFloat(minLat))/2;
var zoom = getZoom(maxLng, minLng, maxLat, minLat);
map.centerAndZoom(new BMap.Point(cenLng,cenLat), zoom);
}else{
//沒有座標,顯示全中國
map.centerAndZoom(new BMap.Point(103.388611,35.563611), 5);
};
}
//算出中心點座標
function getZoom (maxLng, minLng, maxLat, minLat) {
var zoom = ["50","100","200","500","1000","2000","5000","10000","20000","25000","50000","100000","200000","500000","1000000","2000000"];//級別18到3。
var pointA = new BMap.Point(maxLng,maxLat); // 創建點座標A
var pointB = new BMap.Point(minLng,minLat); // 創建點座標B
var distance = map.getDistance(pointA,pointB).toFixed(1); //獲取兩點距離,保留小數點後兩位
for (var i = 0,zoomLen = zoom.length; i < zoomLen; i++) {
if(zoom[i] - distance > 0){
return 18-i+3;//之所以會多3,是因爲地圖範圍常常是比例尺距離的10倍以上。所以級別會增加3。
}
};
}
說明:其中points是一個數組,內容的格式如下
var points = [{"lng":y1,"lat":x1},
{"lng":y2,"lat":x2}
];
其中y1,x1,以及y2,x2是你具體的經緯度信息