У меня есть карта OpenLayers 4 с взаимодействием одним щелчком мыши и соответствующим обработчиком события для события «select», которое меняет стиль выбранных объектов.
let clickInteraction = new olInteractionSelect({
layers: function (layer: any) {
return layer.get('selectable') == true;
},
condition: olEventCondition.singleClick,
filter: (feature: any, layer: any) => {
let shouldReturn: boolean = false;
switch (layer.get(this.LAYER_PROPERTY_ID)) {
case this.LAYER_ID_POINTS:
this.onPointClick(feature.getId());
shouldReturn = true;
break;
case this.LAYER_ID_AREAS:
this.onAreaClick(feature.getId());
shouldReturn = true;
break;
default:
break;
}
return shouldReturn;
}
});
let __this = this;
clickInteraction.on('select', function (evt: any) {
let selected = evt.selected;
let deselected = evt.deselected;
//Select and set style for newly selected features
if (selected.length) {
selected.forEach(function (feature: any) {
if (feature.get(__this.FEATUREKEY_SELECTEDSTYLEID)) {
feature.setStyle(__this.createStyleFnFeatureSelected(feature.get(__this.FEATUREKEY_SELECTEDSTYLEID)));
}
});
} else {
deselected.forEach(function (feature: any) {
if (feature.get(__this.FEATUREKEY_STYLEID)) {
feature.setStyle(__this.createStyleFn(feature.get(__this.FEATUREKEY_STYLEID)));
}
});
}
});
this.map.addInteraction(clickInteraction);
Каждый раз, когда выбирается новая функция, я хочуустановить стиль всех ранее выбранных функций.Что я не могу понять, так это когда при взаимодействии с кликом вызывается событие select, как получить коллекцию всех ранее выбранных объектов на слое карты?
На карте несколько тысяч объектов.поэтому перебор всех функций невозможен с точки зрения производительности.Чего я хочу добиться, так это получить только те функции, которые были выбраны ранее, а не те, которые были выбраны или отменены в текущем событии взаимодействия с кликами.