参考原文地址:http://www.cnblogs.com/HCVOLCANO/archive/2012/09/12/2681719.html
原文的思路非常好,但是我理解了好长时间才搞明白。
然后发现其实可以不用for循环这么多遍就可以搞定的,关键代码如下:
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个一样的点在这里,这个真的是在原作者的代码上一遍遍试出来的,我真不知道原理);如果有谁知道还请详细说明。
预期效果: