2012-04-16 84 views
3

我有一张地图,显示带有某些标记的KML矢量图层。当你点击标记时,它弹出一个信息框。我希望能够根据传入页面的参数自动弹出一个信息框。 我想我需要通过使用getFeaturesByAttribute()来查找名称,但features数组似乎总是空的。 (虽然我能看到的内容,当我使用Firebug)OpenLayers功能阵列为空

什么我需要做的就是数组中的项?

代码:

function init() 
{ 
     var options = { 
      projection: new OpenLayers.Projection("EPSG:900913"), 
      displayProjection: new OpenLayers.Projection("EPSG:4326"), 
      units: "m", 
     }; 
     map = new OpenLayers.Map('map', options); 
     var mapnik = new OpenLayers.Layer.OSM("OpenStreetMap"); 
     var gmap = new OpenLayers.Layer.Google("Google", {sphericalMercator:true}); 
     var gsat = new OpenLayers.Layer.Google(
      "Google Satellite", 
      {type: google.maps.MapTypeId.SATELLITE, numZoomLevels: 22} 
     ); 

     groups = new OpenLayers.Layer.Vector("Groups", { 
      projection: map.displayProjection, 
      strategies: [new OpenLayers.Strategy.Fixed()], 
      protocol: new OpenLayers.Protocol.HTTP({ 
       url: "http://maps.google.co.uk/maps/ms?msa=0&msid=210450558816094618535.0004bd79ceb30e9acb9da&output=kml", 
       format: new OpenLayers.Format.KML({ 
        extractStyles: true, 
        extractAttributes: true 
       }) 
      }) 
     }); 

     map.addLayers([mapnik, gmap, gsat, groups]); 

     select = new OpenLayers.Control.SelectFeature(groups); 

     groups.events.on({ 
      "featureselected": onFeatureSelect, 
      "featureunselected": onFeatureUnselect 
     }); 

     map.addControl(select); 
     select.activate(); 

     map.addControl(new OpenLayers.Control.LayerSwitcher()); 

     var center = new OpenLayers.LonLat(-2.58789,51.52283).transform(map.displayProjection, map.projection); 
     var zoom = 12 
     map.setCenter(center, zoom); 

     alert(groups.features.length); // is always 0 

    } 

回答

2

这个问题,我想,是因为HTTP调用异步发生填充层的功能。因此,您在HTTP调用返回之前触击了alert(groups.features.length),因此该图层没有任何特征,因此groups.features.length正确地为0.如果要以这种方式查看特征的数量,您需要附加功能到layer loadend event,在HTTP事件返回后将调用,您将能够询问所有功能。

+0

谢谢,工作出色! – Paul 2012-04-18 08:09:59