如何在openlayers中为Circle geom应用群集源代码?
我正在尝试应用于圆形特征。阅读文档后,似乎对于任何不同的点,都需要定义geometryFunction:我的尝试如下所示:如何在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
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我将其添加到文本中。。。有没有可能让他们再绕回来?(可能大小与聚集在一起的数量成比例)看起来这个示例可能会做一些您想要做的事情(只需将“树”图标用于单个标记):我将尝试更多使用这个,到目前为止,窗口完全阻塞,我在想,因为它每次都使用样式实例化,在集群示例中,我注意到它们使用缓存。。。但我认为这是正确的方向。。。