如何在openlayers中为Circle geom应用群集源代码?

如何在openlayers中为Circle geom应用群集源代码?,openlayers,openlayers-3,openlayers-6,Openlayers,Openlayers 3,Openlayers 6,我正在尝试应用于圆形特征。阅读文档后,似乎对于任何不同的点,都需要定义geometryFunction:我的尝试如下所示: var source = new ol.source.Vector({wrapX: false}); var clusterSource = new ol.source.Cluster({ geometryFunction: function(feature){ let circlePoint = new ol.geom.Point(feature

我正在尝试应用于圆形特征。阅读文档后,似乎对于任何不同的点,都需要定义geometryFunction:我的尝试如下所示:

var source = new ol.source.Vector({wrapX: false});

var clusterSource = new ol.source.Cluster({
    geometryFunction: function(feature){
        let circlePoint = new ol.geom.Point(feature.getGeometry().getCenter());
        return circlePoint;
    },
    distance: 0,
    source: source,
});

var vector = new ol.layer.Vector({
  source: clusterSource,
  style: function(feature, resolution) {
        var styles = [style1];
        if (feature.getGeometry().getType() == 'Circle') {
            style2.setGeometry(new ol.geom.Point(feature.getGeometry().getCenter()));
            style2.getImage().setScale(feature.getGeometry().getRadius() / (180 * resolution));
            styles.push(style2);
        }
        return styles;
    },
    updateWhileAnimating: true,
    visible: true

});
我添加了一个示例功能:

circle = new ol.geom.Circle(ol.proj.transform([_lon, _lat], 'EPSG:4326', 'EPSG:3857'), 1);
feature=new ol.Feature({
geometry: circle
});
我尝试了5000个不同距离参数的圆圈,它在第一次加载时显示它们,然后在更改缩放级别时消失。知道我做错了什么吗

编辑:使用的样式:

var style1 = new ol.style.Style({
        fill: new ol.style.Fill({
            color: 'rgba(0, 255,0, 0.3)'
        }),
        stroke: new ol.style.Stroke({
            color: '#737373',
            width: 2
        })
    });
var style2 = new ol.style.Style({
        image: new ol.style.Icon({
            src: 'https://www.freeiconspng.com/uploads/photoshop-tree-top-view-png-3.png'
        })
    });

可能是这样的样式函数,您需要将集群的大小乘以适合您的应用程序的值,以获得半径

  style: function(feature, resolution) {
        var geometry;
        var features = feature.get('features');
        if (features) {
             // this is cluster
             if (features.length == 1) {
                 // cluster of 1, use that feature
                 geometry = features[0].getGeometry();
             } else {
                 // more than 1, use a circle based on size of the cluster
                 geometry = new ol.geom.Circle(feature.getGeometry().getCoordinates(), features.length * ???);
             }
        } else {
             // some other feature, not a cluster
             geometry = feature.getGeometry();
        }
        style1.setGeometry(geometry):
        var styles = [style1];
        if (geometry.getType() == 'Circle') {
            style2.setGeometry(new ol.geom.Point(geometry.getCenter()));
            style2.getImage().setScale(geometry.getRadius() / (180 * resolution));
            styles.push(style2);
        }
        return styles;
    },

这些簇将是点几何体。您在
style1
中使用了什么来设置样式点?@Mike我将其添加到文本中。。。有没有可能让他们再绕回来?(可能大小与聚集在一起的数量成比例)看起来这个示例可能会做一些您想要做的事情(只需将“树”图标用于单个标记):我将尝试更多使用这个,到目前为止,窗口完全阻塞,我在想,因为它每次都使用样式实例化,在集群示例中,我注意到它们使用缓存。。。但我认为这是正确的方向。。。