Javascript 使用开放层群集指定最小群集大小

Javascript 使用开放层群集指定最小群集大小,javascript,openlayers-3,Javascript,Openlayers 3,对于OpenLayers 3,我如何指定最小簇大小,以便具有5个或更少地图标记的簇不会被聚集,而是显示单个地图标记?在群集层的ol.layer.Vector对象中是否有这样做的方法 let clusterSource = new ol.source.Cluster({ distance: CLUSTER_DISTANCE, source: features }); let clusterLayer = new ol.layer.Vector({ source: source,

对于OpenLayers 3,我如何指定最小簇大小,以便具有5个或更少地图标记的簇不会被聚集,而是显示单个地图标记?在群集层的ol.layer.Vector对象中是否有这样做的方法

let clusterSource = new ol.source.Cluster({
   distance: CLUSTER_DISTANCE,
   source: features
});
let clusterLayer = new ol.layer.Vector({ 
   source: source, 
   style: function(feature, resolution) { } 
});

您可以在代码中检查有多少功能。如果数量过多,可以基于矢量源创建群集源,但必须将其添加到新的矢量层。否则,可以使用现有矢量源创建矢量层

由于没有方法将源动态设置为层,因此应使用所需源创建向量层。如果您想了解它如何处理5个以上的特性,只需取消注释注释行即可

var功能=[
新ol.功能({
几何体:新的ol.geom.Point([0,0])
}),
新ol.功能({
几何图形:新的ol.geom.Point([100000500000])
}),
新ol.功能({
几何:新的ol.几何点([500000100000])
}),
新ol.功能({
几何图形:新的ol.geom.点([50000001000000])
}),
新ol.功能({
几何图形:新的ol.geom.Point([1000000000000])
})
/*,新ol.功能({
几何图形:新的几何图形点([1800000800000])
})*/
],
source=新ol.source.Vector({
特色:特色
});
var层;
如果(特征长度>5){
var clusterSource=新的ol.source.Cluster({
距离:parseInt(40,10),
资料来源:资料来源
});
var styleCache={};
图层=新的ol.layer.Vector({
资料来源:clusterSource,
风格:功能(特征){
var size=feature.get('features').length;
var style=styleCache[size];
如果(!样式){
style=新的ol.style.style({
图片:新ol.style.Circle({
半径:10,
笔划:新的ol风格笔划({
颜色:“#AAA”
}),
填充:新的ol.style.fill({
颜色:'#DDD'
})
}),
文本:新的ol.style.text({
text:size.toString(),
填充:新的ol.style.fill({
颜色:“#B144FF”
})
})
});
styleCache[size]=样式;
}
回归风格;
}
});
}否则{
图层=新的ol.layer.Vector({
资料来源:资料来源
});
}
var map=新ol.map({
图层:[
新ol.layer.Tile({
来源:new ol.source.OSM()
}), 
层
],
目标:'clusterMap',
视图:新ol.view({
中间:[0,0],
缩放:2
})
});

您可以在代码中检查有多少功能。如果数量过多,可以基于矢量源创建群集源,但必须将其添加到新的矢量层。否则,可以使用现有矢量源创建矢量层

由于没有方法将源动态设置为层,因此应使用所需源创建向量层。如果您想了解它如何处理5个以上的特性,只需取消注释注释行即可

var功能=[
新ol.功能({
几何体:新的ol.geom.Point([0,0])
}),
新ol.功能({
几何图形:新的ol.geom.Point([100000500000])
}),
新ol.功能({
几何:新的ol.几何点([500000100000])
}),
新ol.功能({
几何图形:新的ol.geom.点([50000001000000])
}),
新ol.功能({
几何图形:新的ol.geom.Point([1000000000000])
})
/*,新ol.功能({
几何图形:新的几何图形点([1800000800000])
})*/
],
source=新ol.source.Vector({
特色:特色
});
var层;
如果(特征长度>5){
var clusterSource=新的ol.source.Cluster({
距离:parseInt(40,10),
资料来源:资料来源
});
var styleCache={};
图层=新的ol.layer.Vector({
资料来源:clusterSource,
风格:功能(特征){
var size=feature.get('features').length;
var style=styleCache[size];
如果(!样式){
style=新的ol.style.style({
图片:新ol.style.Circle({
半径:10,
笔划:新的ol风格笔划({
颜色:“#AAA”
}),
填充:新的ol.style.fill({
颜色:'#DDD'
})
}),
文本:新的ol.style.text({
text:size.toString(),
填充:新的ol.style.fill({
颜色:“#B144FF”
})
})
});
styleCache[size]=样式;
}
回归风格;
}
});
}否则{
图层=新的ol.layer.Vector({
资料来源:资料来源
});
}
var map=新ol.map({
图层:[
新ol.layer.Tile({
来源:new ol.source.OSM()
}), 
层
],
目标:'clusterMap',
视图:新ol.view({
中间:[0,0],
缩放:2
})
});


我认为您需要一个解决方案,该解决方案仅在5个或更多标记聚集时才会聚集,并且可以动态工作。我相信当(最初)有5个或更多的特性时,这会使用集群。这与问题大不相同,因为问题没有规定它应该动态发生,所以这个解决方案必须在一个简单的环境中解决问题。由于问题所有者没有说任何其他内容,我保留了我的答案。我认为您需要一个解决方案,该解决方案仅在5个或更多标记聚集时才会聚集,并且动态工作。我相信当(最初)有5个或更多的特性时,这会使用集群。这与问题大不相同,因为问题没有规定它应该动态发生,所以这个解决方案必须在一个简单的环境中解决问题。由于问题负责人没有说任何其他内容,我保留我的答案。查看可能的解决方案。我认为您可能必须返回一个样式数组,每个样式中都有一个几何体。查看可能的解决方案。我认为您可能必须返回一个样式数组,每个样式中都有一个几何体。