3

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

我需要做什么才能获取数组中的项目?

代码:

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

    }
4

1 回答 1

2

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

于 2012-04-17T18:29:08.910 回答