在利用百度地图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!问题解决了,深夜又周末的我继续写代码···

本文介绍如何使用百度地图API的getOverlays方法获取地图上所有覆盖物,并通过检查每个覆盖物的isVisible属性来筛选出可见的标记(marker),从而准确获取标记的实际经纬度。
1515

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



