在添加行政区划使用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();
});
}
著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:JefskyWong ——程序猿甜品店
链接:https://www.jefsky.com/blog/110
来源:https://www.jefsky.com/