最后一个信息窗口显示数组中的所有多边形

时间:2010-07-14 14:42:10

标签: javascript google-maps

我想显示infowindow,每个多边形都有自己不同于excel表的内容,但是我的代码显示的是同一个infowindow,其中包含所有多边形的最后一行excel的内容

请有人解决这个问题吗? 提前谢谢。

for(m=0; m < array.length; m++)
{
   var lat = array[m][1];
   var lon = array[m][2];
   var latOffset = 0.5;
   var lonOffset = 2;
   var latOffset2 = 0.5;
   var lonOffset2 = 2;
   var polygon = new GPolygon([
     new GLatLng(lat , lon ),
     new GLatLng(lat - latOffset2, lon + (lonOffset-1)),
     new GLatLng(lat - latOffset2, lon - (lonOffset-1)),
     new GLatLng(lat , lon ),
   ], "#ff0000", 0.1 , 0.9, "#ff0000", 0.9);

   a=array[m][1];
   b=array[m][2];
   c=array[m][0];
   f=array[m][3];
   h=array[m][4];
   s=array[m][6];
   bsc=array[m][5];

   GEvent.addListener(polygon, "click", function(overlay,lat,lon) 
   {
      map.openInfoWindowHtml(overlay,"Site"+ s +"<br>"+"BSC"+ bsc +"<br>"+"Cell"+ c +"<br>"+"Cell lattitude"+ lat +"<br>"+"Cell longitude" + lon + "<br>"+"Freq"+ f +"<br>"+"Height"+ h );});  

      map.addOverlay(polygon);
   }
}

1 个答案:

答案 0 :(得分:1)

addListener方法中有a very common closure problem

封闭在闭包中的变量共享相同的单一环境,因此在调用click方法的addListener回调时,循环将运行其变量{{1} },sbsccfhlat将指向{中的最后一个元素的值{1}}。

您可以使用函数工厂解决更多闭包问题:

lon

如果你不熟悉闭包的工作方式,这可能是一个非常棘手的话题。您可以查看以下Mozilla文章以获得简要介绍: