返回归档

技术笔记

关于百度地图API覆盖物中的添加行政区划传参问题

在添加行政区划使用BMap.Boundary().get()方法时,发现返回的boundaries的值是数组,但是是一个一维数组,数组的元素是点的集合的字符串,而不是点的集合数组.但是在示例中,关于rs.boundaries.length的注释是’行政区域的点有多少个’,意思不是说明了boundaries数组元素应该是一个区域点的数组?再者,就是下面的for循环,也给人觉得是根据点来组合一个多边形.

在这里,我重写了很多次,后来选择从百度给出的示例来console调试,才发现上诉的问题,所以呢,按照目前的示例,我是这样理解的:

  • BMap.Boundary().get(name: String, callback: function) 是获取name区域的点,返回的是一个数组,但是点是一个数组字符串(为什么要强调呢,因为如果你是想自己绘制区域的话,就需要注意了,接着往下看)

  • BMap.Polygon(points: Array, opts: PolygonOptions) 这是根据Array创建多边形,注意!!!这里传的不是点的数组,而是点的数组字符串!是一个区域的点的数组字符串!!!

  • 下面的for循环用意,应该是当有多个行政区需要绘制时,同时绘制出来吧.

  • 也有个可能Array就是相当与data[i],我看错吧

function getBoundary(){
var bdary = new BMap.Boundary(); bdary.get(“北京市海淀区”, function(rs){ //获取行政区域 map.clearOverlays(); //清除地图覆盖物
var count = rs.boundaries.length; //行政区域的点有多少个 if (count === 0) { alert(‘未能获取当前输入行政区域’); return ; } var pointArray = []; for (var i = 0; i < count; i++) { var ply = new BMap.Polygon(rs.boundaries[i], {strokeWeight: 2, strokeColor: “#ff0000”}); //建立多边形覆盖物 map.addOverlay(ply); //添加覆盖物 pointArray = pointArray.concat(ply.getPath()); }
map.setViewport(pointArray); //调整视野
addlabel();
});
}