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
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
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
});