У меня есть карта с векторным слоем и источником кластера.Я решил отображать кластеры в виде кружков с количеством объектов, написанных внутри.Если кластер содержит только одну функцию, он отображается как пользовательский значок.Если масштабирование слишком важно, я устанавливаю расстояние между кластерами в 0, чтобы отменить кластеризацию (я знаю, что каждая функция все еще рассматривается как кластер).У меня также есть взаимодействие выбора с пользовательской функцией (Kadricarto.selectEquipementStyle) для изменения стиля.Взаимодействие работает хорошо, и выбранные кластеры отображаются в правильном стиле.
Однако, если я увеличиваю или уменьшаю масштаб, выбранные кластеры по-прежнему отображаются в начальном увеличении выделения с их начальным стилем.
Существует ли простой способ динамического изменения стиля выбранных кластеров на каждом уровне масштабирования без отправки нового события выбора?
Я наткнулся на эту ссылку (http://jorix.github.io/OL-FeaturePopups/examples/feature-popups.html), которая производитТакое поведение я хочу, но это для OL2 ... Это мой код:
vectorEquipementSource = new ol.source.Vector();
clusterEquipementSource = new ol.source.Cluster({
source: vectorEquipementSource,
distance: constante.DistanceCluster
});
vectorLayerEquipement = new ol.layer.Vector({
source: clusterEquipementSource,
style: vectorEquipementStyle,
maxResolution: seuilVueCarto,
minResolution: minRes,
extent: maxextent,
visible: false
});
selectEquipementStyle = function (feat, iscluster) {
var size = 1;
var reg = "";
if (iscluster) {
var features = feat.get('features');
size = features.length;
if (size > 1) {
// draw circles
}
else
reg = features[0].get("Registre");
}
else
reg = feat.get("Registre");
if (size === 1)
style = styleSelectEquipement[reg];
return style;
};
getSelectStyle = function (selected) {
var type = "";
var iscluster = isCluster(selected);
if (iscluster)
type = getTypeObjet(selected.get("features")[0]);
else
type = getTypeObjet(selected);
if (type === "Equipement")
return selectEquipementStyle(selected, iscluster);
return null;
}
selectInteraction = new ol.interaction.Select({
layers: [vectorLayerEquipement],
hitTolerance: 4,
style: getSelectStyle
});
map.getView().on('change:resolution', function (evt) {
var view = evt.target;
if (view.getZoom() >= constante.NvZoomFeature)
clusterEquipementSource.setDistance(0);
else if (view.getZoom() < constante.NvZoomFeature)
clusterEquipementSource.setDistance(constante.DistanceCluster);
//Dispatch a select event with the clusters from clusterEquipementSource containing the previously selected clusters ?
}, map);
Спасибо за ваше время.