0

I am using OpenLayers Vector with a cluster strategy. When I use Vector.features to get the features returned as a list, it returns an array of clusters and not the array of features. This makes the features unable to be addressed individually. Does anyone know how can I get the features list while using the clustering strategy? Any help is appreciated.

(Eg. If there are 5 features in my KML which are clustered as 1, then I get vector.features.length=1. I need the original features list which will have a length of 5)

Below is the implementation of my Vector:

var maps_layer = new OpenLayers.Layer.Vector("KML", {
                     strategies: [new OpenLayers.Strategy.Cluster()],
                     protocol: new OpenLayers.Protocol.HTTP({
                        url: "kml/maps.kml",
                        format: new OpenLayers.Format.KML({
                           extractStyles: true, 
                           extractAttributes: true,
                        })
                    })
                 })

thesis.events.register("loadend", this, function(){
      var my_array = maps_layer.features; //Size of this is = no.of Clusters and not features
});

Here is the documentation: http://dev.openlayers.org/docs/files/OpenLayers/Layer/Vector-js.html

3 Answers 3

3

You should use features property of cluster strategy object. In this example you can fetch all features of layer using the following syntax: map.layers[1].strategies[1].features.length.

0
1

Although it's an old question, i am putting here another answer/way by which I get the clustered features.

For this solution, you must first get the layer from map. Once getting layer you can access the features of this clustered layer as,
layer[0].features[0].cluster[0]
To understand its structure just log it to console and use firebug to view the log.

To make it more useful(as some features may be clustered and some may not) use the simple if condition as,

    for(var i=0;i<layer[0].features.length;i++){
    if(layer[0].features[i].cluster){
        //cluster exist. play with clustered features
    }else{
        //no clusters. directly access the feature
    }
}

Thanks

0

In openlayers 5 when trying to style icons I had to do

getIconStyle = function(feature) {
  if(feature.getProperties().features.length > 1) {
     //cluster
  } else {
     //no clusters
  }
}

layer = new VectorLayer({
        source: clusterSource,
        visible: false,
        style:getIconStyle
    });

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.