[GIS] Get Features from OpenLayers Layer.Vector not working

featuresgeojsonopenlayers-2polygon

        polygon_layer = new OpenLayers.Layer.Vector("Polygone", {
            projection : projLonLat,
            strategies : [ new OpenLayers.Strategy.Fixed() ],
            protocol : new OpenLayers.Protocol.HTTP({
                url : 'polygons.geojson',
                format : new OpenLayers.Format.GeoJSON()
            })
        });


        getFeatures(polygon_layer);

    function getFeatures(maps_layer) {

    alert(maps_layer.features.length);

    var features = new Array();
    for (var i = 0; i < maps_layer.features.length; i++) {

        if (maps_layer.features[i].cluster) {
            for (var j = 0; j < maps_layer.features[i].cluster.length; j++)
            features.push(maps_layer.features[i].cluster[j]);
        } else {
            features.push(maps_layer.features[i]);
        }

    }
}

Output for alert = "0";

What am i doing wrong getting the features? There should be 6 Features, which are also correctly appearing in the application.

The (valid) *.geoJSON looks like this:

    {
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "properties": {},
      "geometry": {
        "type": "Polygon",
        "coordinates": [
          [
            [...]]]}....

Best Answer

Features are loaded to polygon_layer with asynchrounous call and if you call your code (including alert) right after defining polygon_layer, data is not loaded yet.

Use FireBug or any other developer tool; wait, until data is loaded on your layer; and execute polygon_layer.features.length. What does it say?

Edit: You may try also

polygon_layer.events.on({
    loadend: function() {getFeatures(polygonLayer);}
});

instead of calling getFeatures(polygon_layer); directly