Openlayers 3: Как выбрать функцию программно с помощью ol.взаимодействие.Выбрать?

Я использую OpenLayers v3.6 (это важно, потому что большинство решений, которые я нашел и потенциально работать за помощью OpenLayers 2).

У меня есть таблица, и когда я выбираю строку в этой таблице, я хотел бы выделить/выбрать соответствующий объект на карте OpenLayers. Все объекты являются простыми полигонами (ol.геометрия.Полигон) в том же векторном слое (ol.слой.Вектор).

я настраиваю взаимодействие выбора, как это:

// there is a lot of other code here
...
addSelectListener: function() {
    this.SelectInteraction = new ol.interaction.Select({
        condition: ol.events.condition.singleClick,
        layers: function (layer) {
            // defines layer from which features are selectable
            return layer.get('id') == 'polygons_layer';
        },
        style: this.Style.Selected
    });

    // Map = ol.Map
    Map.addInteraction(this.SelectInteraction);
    this.SelectInteraction.on('select', this.selectPolygon, this);
}

...

selectPolygon: function(event) {
    var selectSrc = this.getSelectInfo(event);

    // some code that relies on selectSrc data
}

...

getSelectInfo: function (event) {
    var selectSrc = {
        deselected: null,
        selected: null,
        type: null                
    };

    if (event.selected.length == 0 && event.deselected.length == 1) {
        // click outside of polygon with previously selected
        selectSrc.type = 'deselect';
        selectSrc.deselected = {
            feature: event.deselected[0],
            id: event.deselected[0].getId()
        };

    } else if (event.deselected.length == 0 && event.selected.length == 1) {
        // click on polygon without previously selected
        selectSrc.type = 'select';
        selectSrc.selected = {
            feature: event.selected[0],
            id: event.selected[0].getId()
        }

    } else if (event.deselected.length == 0 && event.selected.length == 1) {
        // click on polygon with previously selected
        selectSrc.type = 'switch';
        selectSrc.deselected = {
            feature: event.deselected[0],
            id: event.deselected[0].getId()
        };
        selectSrc.selected = {
            feature: event.selected[0],
            id: event.selected[0].getId()
        }
    } else {
        selectSrc.type = 'out';
    }

    return selectSrc;
}

Это хорошо работает, когда я хочу выбрать полигон, нажав на него на карте. Но я хочу добиться того же самого, не щелкнув по карте, а щелкнув по какому-то элементу вне карты (строка таблицы в моем примере, но это может быть что угодно).

Я хотел бы использовать select interaction из-за события, которое излучается, и из-за стиля, который применяется к выбранным объектам. Однако, если случайно я могу просто манипулировать выбранным функции в select interaction без того же события это было бы нормально.

Я знаю об этом вопросе и ответе -Openlayers 3: выберите функцию программно - но проблема в том, что я не могу попросить в комментариях разъяснений (например, что именно mySelectControl), потому что у меня нет никакой репутации :)

1 ответов


способ сделать это в связан вопрос. Итак, нажмите ol.Feature в выбранную коллекцию:

var select = new ol.interaction.Select({
    //some options
});
map.addInteraction(select);

var selected_collection = select.getFeatures();
selected_collection.push(featurePoint);

если вы хотите, чтобы вызвать select событие:

select.dispatchEvent('select');

// OR

select.dispatchEvent({
  type: 'select',
  selected: [featurePoly],
  deselected: []
});

посмотреть демо!