function getBoundary() { var bdary = new BMap.Boundary(); if ($("#sel_Area").val() != "") { bdary.get($("#sel_Area").find("option:selected").text(), function (rs) { //获取行政区域 var count = rs.boundaries.length; //行政区域的点有多少个 if (count === 0) { alert('未能获取当前输入行政区域'); return; } //添加遮罩层 //思路:利用行政区划点的集合与外围自定义东南西北形成一个环形遮罩层 //1.获取选中行政区划边框点的集合 rs.boundaries[0] var strs = new Array(); strs = rs.boundaries[0].split(";"); var EN = ""; //行政区划东北段点的集合 var pt_e = strs[0]; //行政区划最东边点的经纬度 var pt_n = strs[0]; //行政区划最北边点的经纬度 var pt_w = strs[0]; //行政区划最西边点的经纬度 var pt_s = strs[0]; //行政区划最南边点的经纬度 var n1 = ""; //行政区划最东边点在点集合中的索引位置 var n2 = ""; //行政区划最北边点在点集合中的索引位置 var n3 = ""; //行政区划最西边点在点集合中的索引位置 var n4 = ""; //行政区划最南边点在点集合中的索引位置 //2.循环行政区划边框点集合找出最东南西北四个点的经纬度以及索引位置 for (var n = 0; n < strs.length; n++) { var pt_e_f = parseFloat(pt_e.split(",")[0]); var pt_n_f = parseFloat(pt_n.split(",")[1]); var pt_w_f = parseFloat(pt_w.split(",")[0]); var pt_s_f = parseFloat(pt_s.split(",")[1]); var sPt = new Array(); try { sPt = strs[n].split(","); var spt_j = parseFloat(sPt[0]); var spt_w = parseFloat(sPt[1]); if (pt_e_f < spt_j) { //东 pt_e = strs[n]; pt_e_f = spt_j; n1 = n; } if (pt_n_f < spt_w) { //北 pt_n_f = spt_w; pt_n = strs[n]; n2 = n; } if (pt_w_f > spt_j) { //西 pt_w_f = spt_j; pt_w = strs[n]; n3 = n; } if (pt_s_f > spt_w) { //南 pt_s_f = spt_w; pt_s = strs[n]; n4 = n; } } catch (err) { alert(err); } } for (var o = n1; o < strs.length; o++) { EN += strs[o] + ";" } for(var o=0;o<=n1;o++){ EN += strs[o] + ";" } //4.自定义外围边框点的集合 var E_JW = "170.672126, 39.623555;"; //东 var EN_JW = "170.672126, 81.291804;"; //东北角 var N_JW = "105.913641, 81.291804;"; //北 var NW_JW = "-169.604276, 81.291804;"; //西北角 var W_JW = "-169.604276, 38.244136;"; //西 var WS_JW = "-169.604276, -68.045308;"; //西南角 var S_JW = "114.15563, -68.045308;"; //南 var SE_JW = "170.672126, -68.045308 ;"; //东南角 var ply1 = new BMap.Polygon(EN + E_JW+EN_JW+NW_JW+WS_JW+SE_JW+E_JW, { strokeColor: "none", fillColor: "rgb(246,246,246)", strokeOpacity: 0, fillOpacity: 0.9 }); //建立多边形覆盖物 map.addOverlay(ply1); //5. 给目标行政区划添加边框,其实就是给目标行政区划添加一个没有填充物的遮罩层 var ply = new BMap.Polygon(rs.boundaries[0], { strokeWeight: 2, strokeColor: "#ff0000", fillColor: "" }); map.addOverlay(ply); //map.setViewport(ply.getPath()); //调整视野 }); } }
地图api有过变化 之前的反向遮盖 代码有bug了,这个是 修改后的;