2012-04-16 5 views
3

일부 표식이있는 KML 벡터 레이어를 표시하는지도가 있습니다. 마커를 클릭하면 정보 상자가 나타납니다. 페이지에 전달 된 매개 변수를 기반으로 정보 상자를 자동으로 팝업 할 수 있기를 원합니다. 필자는 이름을 찾기 위해 getFeaturesByAttribute()를 사용하여이 작업을 수행해야한다고 생각하지만 기능 배열은 항상 비어있는 것처럼 보입니다. (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 호출이 반환되기 전에 경고 (groups.features.length)를 치기 때문에 그룹에 기능이 없으므로 groups.features.length는 0입니다.이 방식으로 기능의 수를 보려면 다음을 수행해야합니다. HTTP 이벤트가 반환 된 후에 호출 할 layer loadend event에 첨부 기능을 사용하면 모든 기능을 조사 할 수 있습니다.

+0

감사합니다. 훌륭하게 일했습니다! – Paul

관련 문제