Как изменить стили выбранных кластеров при увеличении в OL 4.6? - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть карта с векторным слоем и источником кластера.Я решил отображать кластеры в виде кружков с количеством объектов, написанных внутри.Если кластер содержит только одну функцию, он отображается как пользовательский значок.Если масштабирование слишком важно, я устанавливаю расстояние между кластерами в 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);

Спасибо за ваше время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...