OpenLayers功能阵列为空
我有一张地图,上面显示了一个带有一些标记的KML向量层。单击标记时,会弹出一个信息框。我想能够自动弹出一个信息框的基础上传入页面的参数。 我想我需要使用getFeaturesByAttribute()来查找名称,但是features数组似乎总是空的。(虽然我使用FireBug时可以看到内容) 要获取阵列中的项目,我需要做什么 代码:OpenLayers功能阵列为空,openlayers,Openlayers,我有一张地图,上面显示了一个带有一些标记的KML向量层。单击标记时,会弹出一个信息框。我想能够自动弹出一个信息框的基础上传入页面的参数。 我想我需要使用getFeaturesByAttribute()来查找名称,但是features数组似乎总是空的。(虽然我使用FireBug时可以看到内容) 要获取阵列中的项目,我需要做什么 代码: function init() { var options = { projection: new OpenLayers.P
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
}
我认为,这个问题是因为HTTP调用是异步进行的,以填充层的特性。因此,在HTTP调用返回之前,您正在点击警报(groups.features.length),因此该层没有功能,因此groups.features.length正确地为0。如果希望以这种方式查看功能的数量,则需要将函数附加到HTTP事件返回后将调用的,并且您将能够查询所有功能