你知道如何在OpenLayers中实现像Google示例中一样漂亮的聚类效果吗?
你知道如何在OpenLayers中实现像Google示例中一样漂亮的聚类效果吗?
您可以在上面的示例中为pointStyle添加标签,并解释此标签的上下文。 您的代码应该类似于这样:
var pointStyle = new OpenLayers.Style({
// ...
'label': "${label}",
// ...
}, {
context: {
// ...
label: function(feature) {
// clustered features count or blank if feature is not a cluster
return feature.cluster ? feature.cluster.length : "";
}
// ..
}
});
var styleMap = new OpenLayers.StyleMap({
'default': pointStyle,
});
var googleLikeLayer = new OpenLayers.Layer.Vector("GoogleLikeLayer", {
// ...
styleMap : styleMap,
// ...
});
我刚刚为OpenLayers实现了所谓的AnimatedCluster策略。 你可以在这里看到更多信息:http://www.acuriousanimal.com/2012/08/19/animated-marker-cluster-strategy-for-openlayers.html
这只是一个首次版本,但为聚类添加了很好的动画效果。有许多改进的地方,但这是一个起点。
在OpenLayers 3中有一个很棒的聚类示例。
我从这段代码创建了一个jsFiddle,方便你进行测试。
基本上,你需要从由一组ol.Feature
形成的ol.source.Vector
中,按照分组距离创建一个ol.source.Cluster
。每个ol.Feature
都是由你的源坐标以ol.geom.Point
的形式创建的。
var features = [
new ol.Feature(new ol.geom.Point([lon1, lat1])),
new ol.Feature(new ol.geom.Point([lon2, lat2])),
...
];
var cluster = new ol.source.Cluster({
distance: 50,
source: new ol.source.Vector({ features: features });
});
var map = new ol.Map({
layers: [
new ol.source.MapQuest({layer: 'sat'}), // Map
new ol.layer.Vector({ source: cluster }) // Clusters
],
renderer: 'canvas',
target: 'map'
});
如igorti所说,您可以使用OpenLayers.Strategy.Cluster类并使用OpenLayers.Style类对图层进行样式设置来实现此目的。
关于样式设置:
var pointStyle = new OpenLayers.Style({
'default': new OpenLayers.Style({
'pointRadius': '${radius}',
'externalGraphic': '${getgraph}'
....
},{
context:{
radius: function(feature){
return Math.min(feature.attributes.count,7)+3;
},{
getgraph : function(feature){
return 'ol/img/googlelike.png';
}}}};
它必须帮助您,祝您更加强大!
var getClusterCount = function (feature) {
var clustercount = {};
var planningcount = 0;
var onaircount = 0;
var inerrorcount = 0;
for (var i = 0; i < feature.cluster.length; i++) {
if (feature.cluster[i].attributes.cluster) {
//THE MOST IMPORTANT LINE IS THE ONE BELOW, While clustering open layers removes the orginial feature layer with its own. So to get the attributes of the feature you have added add it to the openlayer created feature layer
feature.attributes.cluster = feature.cluster[i].attributes.cluster;
switch (feature.cluster[i].attributes.cluster) {
......
return clustercount;
};