在利用百度地图api做多个定位(标记maker)并获取经纬度时,采用map.getOverlays()方法 返回地图上的所有覆盖物并循环遍历数组获取遮盖物的经纬度。然而,却发现实际上的遮盖物比我们的marker数量多。
获取所有的遮盖物代码:
var overlays = map.getOverlays();
console.log(overlays ); //打印返回值
返回值overlays为Array,我的返回值如下:
然而第一个返回值length为2,而实际上marker数量为1。第二个返回值length为5,而实际上marker数量为2。经反复测试发现,map.getOverlays()返回的遮盖物不止marker。
我曾尝试比较返回字段来得到想要的值,然而并没找到方法。经阅读百度地图api文档的overlays类发现她的一个函数(方法)isVisible,于是 开始测试。
代码:
var overlays = map.getOverlays();
console.log(overlays ); //打印返回值
for(let i in overlays){
console.log(i,overlays[i].isVisible());
}
返回结果:
第一个返回值length为2,而实际上marker数量为1,但是返回true的数量为1。第二个返回值length为5,而实际上marker数量为2,但是返回true的数量为2。并且经过检测,返回值
为true的那一组数据就是我们想要的maker的数据。
代码:
var overlays = map.getOverlays();
console.log(overlays ); //打印返回值
var points = [ ];
for(let i in overlays){
console.log(i,overlays[i].isVisible());
if(overlays[i].isVisible()){
points.push(overlays[i].point);
}
}
console.log(points);
一个marker时:
两个marker时:(此时可以看到map.getOverlays()的返回值length为2,而上面为5.那是因为地图显示了不同的区域,而地图上的遮盖物数量不一样,所以返回值的length不一样。)ok!问题解决了,深夜又周末的我继续写代码···