參考原文地址:http://www.cnblogs.com/HCVOLCANO/archive/2012/09/12/2681719.htmlhtml
原文的思路很是好,可是我理解了好長時間才搞明白。ide
而後發現其實能夠不用for循環這麼多遍就能夠搞定的,關鍵代碼以下:spa
var map = new BMap.Map("map_container"); var cityName = '浙江省'; map.centerAndZoom(cityName, 8); // 初始化地圖,設置中心點座標和地圖級別。 map.addControl(new BMap.ScaleControl()); // 添加比例尺控件 map.addControl(new BMap.OverviewMapControl()); //添加縮略地圖控件 map.enableScrollWheelZoom(); map.addControl(new BMap.NavigationControl({ type: BMAP_NAVIGATION_CONTROL_LARGE ,anchor: BMAP_ANCHOR_TOP_LEFT, offset: new BMap.Size(40, 250)})); var bdary = new BMap.Boundary(); bdary.get(cityName, function (rs) { //獲取行政區域 map.clearOverlays(); //清除地圖覆蓋物 //for循環都刪除掉了,只剩下這個 //網上查了下,東西經南北緯的範圍 var EN_JW = "180, 90;"; //東北角 var NW_JW = "-180, 90;"; //西北角 var WS_JW = "-180, -90;"; //西南角 var SE_JW = "180, -90;"; //東南角 //4.添加環形遮罩層 var ply1 = new BMap.Polygon(rs.boundaries[0] + SE_JW + SE_JW + WS_JW + NW_JW + EN_JW + SE_JW, { strokeColor: "none", fillColor: "rgb(246,246,246)", fillOpacity:1, strokeOpacity: 0.5 }); //創建多邊形覆蓋物 map.addOverlay(ply1); //5. 給目標行政區劃添加邊框,其實就是給目標行政區劃添加一個沒有填充物的遮罩層 var ply = new BMap.Polygon(rs.boundaries[0], { strokeWeight: 2, strokeColor: "#00f",fillColor: "" }); map.addOverlay(ply); //map.setViewport(ply.getPath()); //調整視野 });
惟一的問題沒想通的是:內圈和外圈的鏈接處須要2次【SE_JW】這個點(不要問我是怎麼就會想到要放2個同樣的點在這裏,這個真的是在原做者的代碼上一遍遍試出來的,我真不知道原理);若是有誰知道還請詳細說明。code
預期效果:htm