一、问题:
在使用地图做地图应用的时候碰到这样一个问题,原本是想从数据库中取得一系列的位置(经纬度)信息,在地图上添加标注,同时点击标注能显示窗口信息,但在实际实现的过程中发现无论是百度地图的map.openInfoWindow,还是google地图的infowindow.open,在for循环展示信息的时候总是在第一个marker上显示信息窗口。
二、解决方法:(以百度地图举例)
方法一:把infowindow创建写在一个单独的function函数中,这样就能在每个marker上显示自己的infowindow信息。
for(var j=0;j<latlng.length;j++){
var marker1 = new BMap.Marker(latlng[j],{title:j+"号摄像头"+"("+weidu[j]+","+jingdu[j]+")"});
map.addOverlay(marker1);
var MyIcon=new BMap.Icon(image,new BMap.Size(40, 43));
marker1.setIcon(MyIcon);
showinfomessage(marker1,j);//调用显示信息窗口的函数
}
function showinfomessage(marker,number)
{
var opts = {
width : 100, // 信息窗口宽度
height: 60, // 信息窗口高度
}
var infoWindow = new BMap.InfoWindow(number+"号摄像头", opts); // 创建信息窗口对象
marker.addEventListener("click", function(){
marker_id=number;
map.openInfoWindow(infoWindow, latlng[number]); // 打开信息窗口
});
}方法二:使用双闭包的方式解决;for(var i=0;i<marker.length;++i){
(function(x){
marker[x].addEventListner("mouseover",function(){
this.openInfoWindow(infoWindow[x]);
});
})(i);
}
在地图开发中,遇到将多个经纬度位置显示为marker并点击弹出相应信息窗口的问题。原有的实现方式导致所有marker共用同一个信息窗口。解决办法是在独立的function中创建infowindow,确保每个marker能显示其特有的信息窗口。
2万+

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



