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

由 Jefsky 发布于 2024-01-04

在添加行政区划使用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();               
    });   
}