最近接着个需求,需要在地图上将行政区域高亮,在网上找了几个方法,都是自己算的点顺序,总结了一下,出现过以下几个问题
1、行政区域边线画出来了,但是遮罩不准,应该是点顺序的问题,导致总是有显示或者不显示的地方
2、有一条线连到边界,或者区域外有些地方不准
3、自己按照一定的顺序组合点顺序,看着费劲,不方便
自己研究了一下,做了一下改动,很简单,在这里记录一下。代码如下。
function getBoundary(){
//百度地图获取行政区域的对象
var bdary = new BMap.Boundary();
bdary.get("重庆", function (rs) { //获取行政区域
//以下是获取行政区域的回调
map.clearOverlays(); //清除地图覆盖物
//需要绘制边界多边形的点集合
var paths = new Array();
//行政区域点集合,以;分隔的
var pointliststr = rs.boundaries[0];
//3获取点数组,push到 paths中
var pointlist = pointliststr.split(";");
var firstPoint;
for(var i =0;i<pointlist.length;i++)
{
var tempPt = pointlist[i].split(',');
var newPoint = new BMap.Point(tempPt[0],tempPt[1]);
if(i==0){ firstPoint= newPoint;};
paths.push(newPoint);
}
//第一点再推进去,形成一个闭环,构造了多边形的内环
paths.push(firstPoint);
//自定义的八个便捷点,从东开始逆时针,东,东北,北,西北,西,西南,南,东南(必须按顺序来)
paths.push(new BMap.Point(170.672126, 39.623555));
paths.push(new BMap.Point(170.672126, 81.291804));
paths.push(new BMap.Point(105.913641, 81.291804));
paths.push(new BMap.Point(-169.604276, 81.291804));
paths.push(new BMap.Point(-169.604276, 39.623555));
paths.push(new BMap.Point(-169.604276, -68.045308));
paths.push(new BMap.Point(105.913641, -68.045308));
paths.push(new BMap.Point(170.672126, -68.045308));
paths.push(new BMap.Point(170.672126, 39.623555));
//4绘制第一个多边形,覆盖住除行政区外的所有部分,fillColor:填充色,strokeColor:边界颜色(设置透明,否则会有其他线条),strokeOpacity:线条透明,fillOpacity:填充物透明。
var ply1 = new BMap.Polygon("",
{ fillColor: "#708090", strokeColor: "transparent", strokeOpacity:0,fillOpacity:0}); //建立多边形覆盖物
//将之前形成的点set到多边形对象中
ply1.setPath(paths);
//在地图上添加第一个多边形
map.addOverlay(ply1); //遮罩物是半透明的,如果需要纯色可以多添加几层
//5. 给目标行政区划添加边框,其实就是给目标行政区划添加一个没有填充物的遮罩层,绘制出边界线
var ply = new BMap.Polygon(rs.boundaries[0],
{ strokeWeight: 2, strokeColor: "#ff0000",fillColor: "transparent" });
map.addOverlay(ply);
map.setViewport(ply.getPath()); //调整视野
});
}
setTimeout(function(){
getBoundary();
}, 200);
在项目中遇到需要在地图上高亮显示行政区域的需求,通过研究解决了点顺序不准确导致的遮罩问题。本文介绍了如何利用百度地图API获取行政区域边界,并创建多边形覆盖物实现高亮效果,同时避免了边界线错误和区域外显示不准确的状况。
2118

被折叠的 条评论
为什么被折叠?



